【无标题】

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是否存在,如果不存在,则

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值