vm.c void switchkvm(void)
トップページ
jupiteroak.hatenablog.com
vm.c
https://github.com/mit-pdos/xv6-public/blob/master/vm.c#L149
void switchkvm(void) { lcr3(V2P(kpgdir)); // switch to the kernel page table }
switchkvm関数は、現在使用されているページディレクトリから カーネルスレッドにおいて使用されるぺージディレクトリへの切り替えを行います。
lcr3関数を呼び出して、カーネルスレッドにおいて使用されるぺージディレクトリの先頭アドレス(物理アドレス)をCR3レジスタに設定します。
V2Pマクロを使って、カーネルスレッドにおいて使用されるぺージディレクトリの先頭アドレスを仮想アドレスから物理アドレスに変換しています。