64ビットシステムでは、ユーザーページテーブルのカーネルアドレス領域を更新する必要がありますか?

64ビットシステムでは、ユーザーページテーブルのカーネルアドレス領域を更新する必要がありますか?

896MB以上のRAMを備えた32ビットシステムでは、カーネル仮想アドレスと非連続マッピングのためにカーネルアドレスマッピングを変更する必要があるのは当然です。

しかし、64ビットではどのように処理されますか? RAMは常にアドレス空間に完全にマッピング可能であるため、デフォルトのカーネルページテーブルは初期化時に一度設定され、マッピングは変更されないため、変更しないでください。その場合、ユーザーページテーブルのこのカーネル領域は更新する必要はありません。

しかし、32ビットでユーザープロセスページテーブルがどのように更新されるのかをよく説明する人はいますか?よく言及されるように、メインカーネルページテーブルは直接使用されず、参照用にのみ使用されます。ユーザーページテーブルのカーネル領域エントリは各プロセスにコピーされますか?

ベストアンサー1

896MB以上のRAMを備えた32ビットシステムでは、カーネル仮想アドレスと非連続マッピングのためにカーネルアドレスマッピングを変更する必要があることは明らかです。

うん、これといい高メモリ

しかし、64ビットではどのように処理されますか? RAMは常にアドレス空間に完全にマッピング可能であるため、デフォルトのカーネルページテーブルは初期化時に一度設定され、マッピングは変更されないため、変更しないでください。その場合、ユーザーページテーブルのこのカーネル領域は更新する必要はありません。

はい

しかし、32ビットでユーザープロセスページテーブルがどのように更新されるのかをよく説明する人はいますか?よく言及されるように、メインカーネルページテーブルは直接使用されず、参照用にのみ使用されます。ユーザーページテーブルのカーネル領域エントリは各プロセスにコピーされますか?

上にリンクされた highmem ドキュメントでは、highmem マッピングには「カーネルのページテーブル」だけを操作すれば良いことが示されています。

「ページテーブル」は実際にはツリー構造です。例えば「ステップ4ページテーブル」[LWN.net, 2004]。トップレベルはシングルページ(4096バイト)です。カーネルスコープをマッピングするエントリは、すべてのプロセスで同じ値に設定されるため共有されます。一時マッピングはツリーの下位レベルで発生するため、各プロセスページテーブルを個別に変更するのではなく、共有カーネルページテーブル内でのみ変更する必要があります。

少なくともそれは私の一般的な概要です。私はすべての言葉を持っていません。

おすすめ記事