6.s081 walk函数与mappages函数说明

关于walk函数

首先返回的是第三层页表的页表项目,一页页表的大小是和一页物理内存的大小一致的,所以当他发现该页表项不存在的时候,是可以用kalloc去分配一页新的物理页给这一个页表项的,也就是页表层级关系是可以在这里建立的。

        建立流程就是首先拿到的是根页表么(用p3、p2、p1表示),那么就是拿到p3,首先在根找到项,然后如果没有分配,kalloc一个页表,并且设置pet,这时候拿到p2,往下同理。所以最后我们能够设置好页表层级。

关于mappages函数

        

主要就是如果是walk建立的,都是全新的页表(所谓以页来分配)。这里有点怪,就是walk返回最后的页表项,把这个项目设置为相应物理地址之后,因为off是12位的缘故,那么也刚好就是4K的大小的物理内存,所以也是a与pa+=4096的原因。然后这边物理内存分配的方式就有点搞不清楚。回头可能还需要看看kalloc的逻辑。

       详情见6.S081——虚拟内存部分——xv6源码完全解析系列(1)_xv6 源码-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值