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が参照しているページテーブル、または、ページフレームの先頭物理アドレスとなります。