5.20. kinit2関数

freerange関数kmem構造体のfreelistに0x400000~0xe000000までの領域をページとして加える。 差を取ると0xdc00000で4096で割ると56320ページ分ある。

main.c

int
main(void)
{

/* 略 */

  kinit2(P2V(4*1024*1024), P2V(PHYSTOP)); // must come after startothers()

/* 略 */

}

kalloc.c

void
kinit2(void *vstart, void *vend)
{
  freerange(vstart, vend);
  kmem.use_lock = 1;
}