mmu.h #define PGADDR(d, t, o) ((uint)((d) << PDXSHIFT | (t) << PTXSHIFT | (o)))

トップページ
jupiteroak.hatenablog.com


mmu.h
https://github.com/mit-pdos/xv6-public/blob/master/mmu.h#L80

#define PGADDR(d, t, o) ((uint)((d) << PDXSHIFT | (t) << PTXSHIFT | (o)))

PGADDRマクロはd、t、oでそれぞれ指定された、PDE(ページディレクトリエントリ)のインデックス値、PTE(ページテーブルエントリ)のインデックス値、オフセット値から、それらに対応している仮想アドレスを算出します。
PDE(ページディレクトリエントリ)のインデックス値d(10bit)を22bit(#define PDXSHIFT 22)左シフト演算して、仮想アドレスのbit31-22を構成させます。
PTE(ページテーブルエントリ)のインデックス値t(10bit)を12bit(#define PTXSHIFT 12)左シフト演算して、 仮想アドレスのbit21-12を構成させます。