mmu.h #define PTE_ADDR(pte) ((uint)(pte) & ~0xFFF)
トップページ
jupiteroak.hatenablog.com
mmu.h
https://github.com/mit-pdos/xv6-public/blob/master/mmu.h#L100
#define PTE_ADDR(pte) ((uint)(pte) & ~0xFFF)
PTE_ADDRマクロは、pte(ページディレクトリエントリ、または、ページテーブルエントリ)から、そのpteが参照しているページテーブル、または、ページフレームの先頭物理アドレスを取得します。
#define PTE_ADDR(pte) ((uint)(pte) & ~0xFFF)
↓
#define PTE_ADDR(pte) ((uint)(pte) & 0x1111 1000)
pteの値(32bit)を~0xFFFでマスク処理することにより、pteのbit31-12の値を取り出しています。このpteのbit31-12の値がページテーブル、または、ページフレームの先頭物理アドレス上位20bitの値となります。よって、pte & 0x1111 1000の値がそのまま、pteが参照しているページテーブル、または、ページフレームの先頭物理アドレスとなります。