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

这一次的小结有一点没底气,因为感觉实现的过于简单,可能跟正确的结果有一定的差距。但是,临时没有找到功能测试的方法,因此暂时先整理一下。另一个必须要做一部分整理的原因是,如果继续扩展当前的思考区域,那么这个洞就越挖越深了,我怕扩展太大之后收起来很难。因此,先做一个简单的小结,如果后续发现错了重新按照争取的方式整理。

这一行代码其实还是容易理解的,kern_pgdir数组是内核的页目录。PDX(UVPT)是一个获取页目录索引的方式,而处理的对象UVPT是用户虚拟页表,一个用户只读的用户页表。

关于上面的UVPT在整个OS存储中的分配位置可以参考上面的这个存储分布说明。那么,这一行代码实现了一个什么功能呢?这一行代码让分页管理的机制处理kern_pgdir虚拟地址的时候,把kern_pgdir的地址映射到kern_pgdir的物理地址上。也就是说,处理这个页目录表的时候会直接去物理存储上去操作这个页目录信息。

接下来,给pages页表分配存储空间。Pages是用来管理整个物理存储的一个页状态数组。而npages则是当前的系统中物理存储的大小,单位是page。这些,可以从上面的代码注释中获知。

那么,应该给这个数组信息分配多大的空间呢?肯定是一个物理页分配一个状态信息,如此大小就可以计算出来。

之后,我们这一次处理的一个关键问题来了:如何实现boot_alloc()函数?

代码中的这个函数是一个半成品,或者说只是一个框架。这里说明了改实现什么效果。如果传入的参数n大于0,那么分配指定的存储,按照page大小对齐。如果n为0,那么返回下一个可用的page的地址。分配完的存储,不要进行初始化。如果存储超限了,需要panic。接下来,先按照我自己的思路梳理第一次的实现尝试。

这一段代码其实还是很容易理解的,end其实是链接文件中定义的,这个数值其实是内核所占用的存储的最后的地址。现在,在初始化的时候通过对齐取整的方式来保证内核所在的page不会被分配。真正被分配的区域也就是内核结束后的一个page开始。

这是我根据注释的要求,临时做的一个代码实现。Panic的地址范围判断应该是KERNBASE空间之后的超过总的物理存储区的时候。因为,在内核设计的时候,存储应该是进行了重新映射的。

再次回顾一下这个存储的分布设计,这样就能够更加明确一些。之前,我还在考虑是否是需要考虑两部分存储的连续性,是否需要考虑跳过IO映射区域。后来想了一下,应该是不需要,因为两块区域都是按照page对齐的。因此,能够完成到这个虚拟地址的映射。

这是修改之后JOS启动的效果,这里面已经有了对boot_alloc()接口的调用。但是,至少可以看到没有出现存储溢出。这并不是一个完整合理的测试,但是目前来说暂且看到这样的效果就结束了。这个接口的设计是否合理,或许还得继续往后调试其他功能才能够体会到。

1660_MIT 6.828 JOS初始化boot_alloc的初步实现相关推荐

  1. 1662_MIT 6.828 JOS check_page_free_list实现分析以及boot_alloc问题修复

    全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 继续尝试完善分析JOS的 ...

  2. MIT 6.828 JOS学习笔记17. Lab 3.1 Part A User Environments

    Introduction 在这个实验中,我们将实现操作系统的一些基本功能,来实现用户环境下的进程的正常运行.你将会加强JOS内核的功能,为它增添一些重要的数据结构,用来记录用户进程环境的一些信息:创建 ...

  3. 1656_MIT 6.828 JOS i386_init的实现分析

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

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

    全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 继续往下分析JOS的启动 ...

  5. 1617_MIT 6.828 JOS boot代码分析

    全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) JOS的这部分boot相 ...

  6. 1655_MIT 6.828 JOS存储分页映射的实现分析

    全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 这是mmu.h的一部分, ...

  7. 1665_MIT 6.828 JOS虚拟存储的设置

    全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 之前把这一部分相关的功能 ...

  8. MIT 6.828 JOS学习笔记12 Exercise 1.9

    Lab 1中Exercise 9的解答报告 Exercise 1.9: 判断一下操作系统内核是从哪条指令开始初始化它的堆栈空间的,以及这个堆栈坐落在内存的哪个地方?内核是如何给它的堆栈保留一块内存空间 ...

  9. 1654_MIT 6.828 JOS entry.S实现分析

    全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 之前分析过JOS中的启动 ...

最新文章

  1. 区块链技术开发三个优势
  2. linux安装unzip及使用
  3. transformer机制讲解_【核心代码解读】Transformer-XL
  4. 工业交换机厂家,工业交换机品牌前十大排名
  5. 奇偶ASCII值判断(信息学奥赛一本通-T1042)
  6. arduino 串口读取字符串_乐创物联物联网架构之硬件层中间件Arduino模拟量
  7. 每位开发者都应了解的数据库一致性!
  8. CentOS 7伪分布式方式安装Hadoop-2.6.0-cdh5.6.0并且通过主机浏览器访问hadoop工作台
  9. linux孟庆昌第六章课后题_周三多管理学第5版课后答案资料笔记和课后习题含考研真题详解...
  10. Linux -- 在文件中添加信息的方法(转)
  11. opencv学习笔记1:图片灰度化
  12. MicroSIP注册点星PBX后拨打电话undefined external error故障解决方法
  13. Python各类常用库整理
  14. php setlocale 中国,PHP setlocale,UTF-8与否?
  15. 【黑金原创教程】【TimeQuest】【第五章】网表质量与外部模型
  16. HBuilder快捷键整理集合
  17. Unity3d 屏幕特效实现类似死亡之后的全屏黑白效果
  18. XML解析为Document对象
  19. 看美国无线路由器品牌用户满意度排行榜
  20. # [解构如何运用的解构--报错 throw new TypeError(‘Router.use() requires a middleware function but got a ‘ + gett

热门文章

  1. Speedoffice(excel)如何利用MIN函数求最小值
  2. F 魏迟燕的自走棋(思维+贪心+并查集维护联通块/左部点配对边<=2的匈牙利)
  3. linux 如何做共享磁盘阵列,在Linux上玩转磁盘阵列分享
  4. python是真刑啊!爬虫这样用,离好日子越铐越近了~
  5. IMAX [生活时尚]
  6. 在华为之后,再有中国芯片赶超美国芯片,美国的图谋将再次失败
  7. imperva代理拦截
  8. 在线上也能进行商标注册
  9. mysql群发消息_分享网站群发站内信数据库表设计
  10. Bug复现辅助神器-EV录屏