kinit时是0,说明当时kmem.freelist还没有初始化
在kinit中进行了kmem的初始化
不难看到,我们的r是pa,pa就是我们自己定义的end,是kernel.ld写出来的,然后我们将r->next指向了
这里也可以看到第一个r->next是0,其他的就都是我们的mem的起始了,也就是end,我们在汇编中定义的值
可以看到页表的开头是这个东西,显然,这是因为我们的起始地址是88000000,所以这里分配了一个大小的页内容。
可以看到这里a和pa就是一样的。
一开始初始化时,va就是pa,所以我们有了va,之后
看来这个页表应该是这样的,我们认为他是一个数组,而px是得到数组索引,这个里边存着的就是我们的值,值是pte。页表不是储存完整的物理地址,而是储存一个pte(这相当于是一个索引)加上一些flags,而pte转变为物理地址还需要得到最终的offset
fork使用方式:1.alloproc获得一个未使用进程,并得到一个进程号,然后复制memory,然后将np一直复制,
什么是uvmcopy,这是一个用户vm拷贝函数,
pte_v是看pte是否存在,如果不存在,则