物理ページが呼び出されpage frames
ます (フレームと呼ぶことができます)。この用語は、仮想メモリ内のページpage
に対して予約されています。
仮想メモリは、カーネルによって同じサイズのチャンクに分割されます。物理メモリも同じサイズのページ (ページ フレーム) に分割されます。
たとえば、32 ビット アーキテクチャで 4GB の RAM がある場合、これは次のことを意味します。サイズ 4KB の 1048576 ページ フレーム
続けましょう、
ページ フレーム (物理ページ) ごとに、カーネルは構造を維持しますstruct page
。この構造体はlinux/mm_types.h
( https://github.com/torvalds/linux/blob/master/include/linux/mm_types.h ) で定義されており、この構造体には、ページ フレームが存在するアドレス空間を指定するmapping
( )という名前のメンバーが含まれています。struct address_space *mapping
位置した。index
このマッピング内のオフセットを表すという名前のメンバーもあります。
すべての構造体ページはグローバルmem_map
配列に保持されます。この配列は、仮想メモリと物理メモリ間のすべての関連付けを知るためにカーネルによって使用されます。
最後に、仮想アドレスを物理アドレスに変換するために、カーネルは( https://github.com/torvalds/linux/blob/master/include/asm-generic/memory_model.h )でvirt_to_page()
定義されたマクロを使用します。asm-i386/page.h
pfn_to_page
例の前に、32 ビット アーキテクチャのアドレスのレイアウトを見てみましょう。
| | 10 ビット - ディレクトリ | 10 ビット - ページ テーブル | 12 ビット - オフセット |
メモリの仮想アドレスを物理アドレスに変換する例を見てみましょう:
http://img11.imageshack.us/img11/9426/pagingexample.png
この助けを願っています。
よろしく。