当前位置: 首页 > article >正文

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

         全部学习汇总: 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的数目。这个链表的元素数目在最开始的时候进行了一个统计,这里通过统计一个丢弃一个的方式完成了“蜕壳”处理。最后出入的信息应该是对等的。

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

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


http://www.kler.cn/a/5265.html

相关文章:

  • 递归构建树菜单节点
  • 【HTML+CSS+JS+VUE】web前端教程-2-HTML5介绍和基础骨架
  • 攻防世界 ics-07
  • C#异步多线程——ThreadPool线程池
  • kubernetes第五天
  • 计算机网络——网络层—IP数据报与分片
  • 北大考研复试准备
  • 开源DataX集成可视化项目Datax-Web的使用
  • 膳食真菌在癌症免疫治疗中的作用: 从肠道微生物群的角度
  • 【HTTP详解】常用的14个HTTP状态码
  • ChatGPT开始威胁程序员的核心能力了!
  • Java设计模式(九)—— 中介者模式
  • 从NLP视角看电视剧《狂飙》,会有什么发现?
  • 15. 三数之和(Java)
  • 软件架构class-5-ORMapping思想
  • 发现一个白嫖GPT4.0的方法!真的是完胜3.5!
  • 二叉树练习题(数据结构系列10)
  • 【linu】ARM安装vscode服务器,本地vscode远程服务器开发
  • Redis面试题 (2023最新版)
  • 嵌入式系统概括
  • unity3d:asset store上C#代码热重载插件,不需要重运行,重新加载更新后函数
  • 字符串(二)-- LC[17] 电话号码的字母组合
  • Vision Pro 自己写的一些自定义工具(c#)
  • 深入探究PyTorch:理解PyTorch的基础知识(一)
  • 大数据学完好就业么
  • Typora 修改表格宽度