質問: 仮想アドレス空間でのページサイズの決定方法 linuxは、すべてのアドレスが物理アドレスではなく仮想アドレスである仮想メモリシステムを使用します。これらの仮想アドレスは、プロセッサによって物理アドレスに変換されます。この変換を簡単にするために、仮想メモリと物理メモリはページに分割されています。これらの各ページには一意の番号が付けられています。ページフレーム番号。一部のページサイズは2 kb、4 kbなどです。しかし、このページサイズの数値はどのように決定されますか?建築の大きさに影響されますか?たとえば、32ビットバスには4 gbのアドレス空間があります。
回答: 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をどのように与えますか?ビットをシフトすると、2の乗算を2で実行していることになります。つまり、ビットを左にシフトすることになります(1 << page_shift)は、2 ^ 12 = 4096の乗算を行っています。$ echo "2^12" | bc 4096