起動中の Linux カーネル空間のページテーブル 質問する
Linux カーネルのページ テーブル管理に混乱を感じます。 Linux カーネル空間では、ページ テーブルがオンになる前。カーネルは 1 対 1 のマッピング メカニズムを使用して仮想メモリで実行されます。ページ テーブルがオンになった後、カーネルはページ テーブルを参照して仮想アドレスを物理メモリ アドレスに変換します。質問は次のとおりです。 この時点で、ページ テーブルをオンにした後、カーネル空間はまだ 1GB (0xC0000000 - 0xFFFFFFFF) ですか? また、カーネル プロセスのページ テーブルでは、0xC0000000 - 0xFFFFFFFF の範囲のページ テーブル エントリ (PTE) のみがマップされます。この範囲外の PTE は、カーネル コードがそこにジャンプすることはないため、マップされません。 ページ テーブルを有効にする前と有効にした後のアドレスのマッピングは同じですか? たとえば、ページ テーブルを有効にする前は、仮想アドレス 0xC00000FF が物理アドレス 0x000000FF にマッピングされていますが、ページ テーブルを有効にした後、上記のマッピングは変更されません。仮想アドレス 0xC00000FF は、引き続き物理アドレス 0x000000FF にマッピングされています。異なる点は、ページ テーブルを有効にした後、CPU がページ テーブルを参照して仮想アドレスを物理アドレスに変換することです。これは、以前は必要ありませんでした。 カーネル空間のページ テーブルはグローバルであり、ユーザー プロセスを含むシステム内のすべてのプロセス間で共有されます。 このメカニズムは x86 32 ビットと ARM で同じですか?