0
点赞
收藏
分享

微信扫一扫

1665_MIT 6.828 JOS虚拟存储的设置


GreyZhang/g_unix: some basic learning about unix operating system. (github.com)

1665_MIT 6.828 JOS虚拟存储的设置_unix

         之前把这一部分相关的功能全都调试通过了,从这里的注释看,其实这里的准备更多的是为了画出来的两个接口。其中,page_insert()已经在前面的调试中实现了,接下来看一下boot_map_region()的实现。

1665_MIT 6.828 JOS虚拟存储的设置_unix_02

         关于这个接口的注释提示还是非常丰富的,实现起来也比较简单。我考虑了一下对pa的处理,主要是想把对齐的逻辑一起处理掉。这个接口应该只是在初始化的阶段在用,按理说也不会有存储超出的情况,不过加上总没坏处。

1665_MIT 6.828 JOS虚拟存储的设置_unix_03

         完成了上面的接口之后,做这个接口的实现就会简单很多。但是,在做这个实现的时候,第一个参数的确认费了点时间。这部分倒是顺着上面代码没实现之前的报错,从check_kern_pgdir()接口中推断出来的。

1665_MIT 6.828 JOS虚拟存储的设置_MIT_04

         这部分地址区间之前看memory layout的时候已经熟悉了,按照注释完成这部分的接口只是修改几个参数即可。

1665_MIT 6.828 JOS虚拟存储的设置_服务器_05

         这里,完成了剩余的存储的映射。2 ^ 32正好是所有的bit都是1的时候,直接用16进制表达更简单一些。

1665_MIT 6.828 JOS虚拟存储的设置_linux_06

         这是这部分配置的检查接口,里面调用了很多check_va2pa()接口。

1665_MIT 6.828 JOS虚拟存储的设置_linux_07

         而这个接口是分页管理中二级查表的额一个软件实现,只是用来做测试。实际的转换其实是CPU的MMU模块辅助实现的。实现这样的一个机制的目的只是为了看一下这个计算结果是否跟硬件转换的结果一致。

1665_MIT 6.828 JOS虚拟存储的设置_unix_08

         这是修改后的代码进行测试的结果,从这里看暂时有提示的测试全都已经测试通过。JOS的初始化部分的虚拟存储设置应该基本上是满足了运行条件。究竟是否会有bug还是很难讲,整个存储的处理模型比较简单,但是熟悉这个框架的确是花了时间。

1665_MIT 6.828 JOS虚拟存储的设置_MIT_09

         继续往下的代码是上面运行结果中对应的检查接口。同时,在这个阶段,CR3以及CR0寄存器进行了修改,切换了新的分页管理机制。

1665_MIT 6.828 JOS虚拟存储的设置_MIT_10

         最后对整个功能进行测试,效果如上。看上去,所有的测试全都通过了。

举报

相关推荐

0 条评论