仮想アドレス空間のページサイズはどのように決定されますか?

仮想アドレス空間のページサイズはどのように決定されますか?

Linuxは、すべてのアドレスが物理アドレスではなく仮想アドレスである仮想メモリシステムを使用します。これらの仮想アドレスはプロセッサによって物理アドレスに変換される。

この変換をより簡単にするために、仮想メモリと物理メモリをページに分割します。各ページには固有のページフレーム番号があります。

一部のページサイズは2KB、4KBなどにすることができます。しかし、このページサイズの数値はどのように決まりますか?アーキテクチャのサイズによって影響を受けますか?たとえば、32ビットバスのアドレス空間は4 GBです。

ベストアンサー1

次のコマンドを使用してシステム構成を照会して、システムのデフォルトページサイズを確認できますgetconf

$ getconf PAGE_SIZE
4096

または

$ getconf PAGESIZE
4096

メモ:上記の単位は通常バイト単位であるため、4096は4096バイトまたは4kBに等しくなります。

これはLinuxカーネルのソースコードに組み込まれています。

はい

$ more /usr/src/kernels/3.13.9-100.fc19.x86_64/include/asm-generic/page.h
...
...
/* PAGE_SHIFT determines the page size */

#define PAGE_SHIFT  12
#ifdef __ASSEMBLY__
#define PAGE_SIZE   (1 << PAGE_SHIFT)
#else
#define PAGE_SIZE   (1UL << PAGE_SHIFT)
#endif
#define PAGE_MASK   (~(PAGE_SIZE-1))

ギアをシフトすると、どのように4096が出ますか?

Shift を行うと、2 のバイナリ乗算が行われます。したがって、左に移動(1 << PAGE_SHIFT)するのは実際に2^ 12 = 4096の乗算です。

$ echo "2^12" | bc
4096

おすすめ記事