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マクロを使って、カーネルスレッドにおいて使用されるぺージディレクトリの先頭アドレスを仮想アドレスから物理アドレスに変換しています。