オペレーティング システムはどのようにしてハードウェアからページ サイズを読み取るのでしょうか?

オペレーティング システムはどのようにしてハードウェアからページ サイズを読み取るのでしょうか?

オペレーティング システムに関する書籍では、ページ サイズはプロセッサ アーキテクチャによって決定されるとよく​​記載されています。たとえば、Intel x86 は 4KB のページ サイズをサポートしています。ハードウェアにオペレーティング システムをインストールするときに、OS がハードウェアから 4KB のページ サイズを読み取り、仮想アドレス空間を 4KB サイズのページに、メモリをフレームにそれぞれ論理的に分割したのではないかという印象を受けています。

私の認識が正しいとすれば、オペレーティング システムはハードウェアのどこから、またはどの位置からプロセッサからこの 4KB の値を読み取るのでしょうか。OS はハードウェアによって提供されるページ サイズを決定するためにどのようなメカニズムを使用するのでしょうか。誰かこれについて教えてくれませんか。Intel はどのようにして (どのような基準で) 4KB のページ サイズを維持することを決定しているのでしょうか。

答え1

オペレーティングシステムは、アーキテクチャ(および場合によってはビルド時のカーネル構成)に応じてページサイズをハードコードします。たとえば、x86では基本ページサイズは常に4KiBです。これはCPUアーキテクチャの特性です。Linuxでは、これが定義されています。include/asm/page_types64ビットARMでは、ページサイズはビルド時に4KiB、16KiB、または64KiBに設定できます。一部のアーキテクチャでは、実行時に複数のページサイズが設定されます(例えば(x86 上の巨大なページなど) ですが、すべてのサイズは事前にわかっており、基本サイズは固定されています。

Linuxでは、ページサイズの標準的な定義は でありPAGE_SIZE、アーキテクチャ固有の をインクルードすることで取得できますasm/page.h(x86の場合のように、他のヘッダーが取り込まれる可能性があります)。Elixirは、すべてのPAGE_SIZE定義

Linux カーネルがサポートするアーキテクチャのほとんどは 4KiB ページをサポートしています。例外は Alpha、ARC、一部の Motorola 68k システム、OpenRISC、および 64 ビット SPARC で、これらはすべて 8KiB ページを使用します。多くのアーキテクチャは、他のページ サイズを使用するように構成できます。

関連情報