OS起動編⑯ kinit2(P2V(4*1024*1024), P2V(PHYSTOP)) (Xv6を読む~OSコードリーディング~)

前回
jupiteroak.hatenablog.com
トップページ
jupiteroak.hatenablog.com




main.c

int
main(void)
{
  ...
  kinit2(P2V(4*1024*1024), P2V(PHYSTOP)); // must come after startothers()
  ...
void
kinit2(void *vstart, void *vend)
{
  freerange(vstart, vend);
  kmem.use_lock = 1;
}

Unix xv6では、カーネル空間のメモリ領域0x8011 5000〜0x8E00 0000をメモリ割り当てのために使用します。
そのための準備として、kinit2関数を呼び出し、0x8040 0000から0x8E00 0000までのメモリ領域を使用可能な状態として管理します(使用可能なメモリページを把握するためのリストを作成します)。


処理の内容

freerange(vstart, vend);

freerange関数を呼び出して、引数vstartで指定された仮想アドレスP2V(4*1024*1024)→0x8040 0000)から、引数vendで指定された仮想アドレスP2V(PHYSTOP)→0x8E00 0000までのメモリ領域を使用可能な状態として管理します(使用可能なメモリページを把握するためのリストを作成します)。

kmem.use_lock = 1;

kmem構造体のロックをこれから使用する場合は1を、そうでない場合は0を設定します。




次回
jupiteroak.hatenablog.com