1663_MIT 6.828 JOS页面的分配与回收

文章详细描述了在分析JOS启动过程中遇到的页面分配问题,以及如何实现分配和回收接口。通过测试,确认了页面的分配、回收、写入操作及清零处理等功能,同时提出在释放存储时添加了panic保护,以防止占用中的存储被错误释放。目前测试已通过存储分配和回收的部分,但文章末尾指出存在一个待解决的异常问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com)

         继续往下分析JOS的启动,上一次解决了check_page_free_list()中遇到的一些问题。继续往下,会是一个分配的检查。

         这部分执行的时候会出现panic。

         以上是运行时候的错误提示。

         其实,看到这里就很清楚为什么出错了,因为page分配的接口没有实现。

         关于这个函数接口的实现其实还是容易的,因为这个动作的定义比较具体。在动作上,只是分配一个页面,而传入的参数是存储初始化属性的指定。更重要的一点,这里还给出来了用到的接口。有了这些信息之后,完成这个接口其实就跟做一个拼图差不多了。

         这一次的运行效果结合代码信息可以看得出来,至少是前面的测试是通过了。接下来,再去理顺其他的接口。

         单纯的一个页面的释放占用还是很容易实现的,不过按照这里的提示这里加了一个panic防止出现占用中的存储被释放的情况。而存储的释放过程其实很简单,就是把相应的page插入到page_free_list链表之上。

         继续看这个页面分配的检查接口,在检查完了页面的分配以及回收之后,进一步检查了对于分配的存储的写入操作。除此之外,分配时候的清零操作等特殊的处理也做了测试。一切测试结束后,恢复之前的page_free_list。

         最后,释放当前获取到的page,检查了链表中page的数目。这个链表的元素数目在最开始的时候进行了一个统计,这里通过统计一个丢弃一个的方式完成了“蜕壳”处理。最后出入的信息应该是对等的。

         这是最初的处理,尤其值得注意的是这里的操作是在链表出现变化之前的操作。

         处理完之后的测试,从测试的结果看到存储分配以及回收部分的测试现在是通过了。当然,这里又看到了一个异常问题。这个问题的解决,这个留待下一次探索了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值