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を設定します。