1657_MIT 6.828 JOS memmap以及一些存储划分定义的解读-第一部分

文章详细探讨了Unix操作系统的内存布局,包括内核空间从KERNBASE+1MB开始,堆栈自顶向下增长,以及初始化时的分页映射。JOS的存储管理中,内核堆栈和IO映射区域的设定被详细阐述,并提到了用户空间的划分和特殊只读区域。作者对存储分布的理解和疑问也反映了学习过程中的深度思考。

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

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

         继续学习JOS的存储管理,这一次看一部分初始化的相关内容吧!估计一晚上的时间也就只能够看一部分,预感这部分会有一点复杂度。

         先看这个定义,这地址前面理解页目录以及页表等概念的时候已经简单接触过了。这个是内核空间开始的地址,同时也用做了内核stack的栈顶地址。

         这个结合这个memory的分布来看的话,其实能够看得出来。操作系统其实是被链接到了KERNBASE + 1MB的地址上的,也就是说从画出来的这部分继续向上的一部分空间中。而堆栈在这个架构上是向下增长的,因此,如果堆栈设置在这里的话并不会破坏操作系统内核的数据。

         中间跳过去的这部分参数其实很好理解了,在x86的设计中,最开始的一块地址是存储,一共640K。但是,继续往后有384K的存储空洞,这部分地址空间是给IO外设留下来的。如果按照之前看到的OS的分页映射,这部分的线性地址其实是在KERNBASE开始的1MB范围之内。而EXTPHYSMEM被定义为了1MB,因此上面的注释中会说这个存储的空洞会结束于KERNBASE + IOPHYSMEM。

         这里又回到了最开始看的信息,KSTACKTOP已经是知道了,这个是内核的堆栈栈顶地址。下面两个参数分别为内核堆栈的大小以及内核堆栈警戒区。

         从这个存储分布图可以看出来,这个内核的警戒区其实就是一段无效的存储。但是,看到这里我多少开始有点疑问了。因为,我们的JOS在初始化的时候映射的存储只有两部分,第一个是0~4MB映射到0~4MB。另外一部分就是前面提到的:[KERNBASE, KERNBASE+4MB) 映射到物理地址区间[0, 4MB)。但是,这两个地址区间都没有包含以上地址区间段。那么,上面的这一一部分内核堆栈后续应该如何处理呢?

         再看这两个定义,这两个定义非常容易理解。其实,就是从KERNBASE开始向下,先划掉了4MB的空间用来取出一部分作为内核的堆栈区域。之后,再往下来4MB就划出来了这个区域。而这个区域,从现在的字面上看应该是为了处理IO映射用的。

         从内核开始,划出去一个内核堆栈空间,再划出去一个IO映射空间。继续往下,就是用户空间了。用户空间还有一些细致的划分,但是这个地址的极限值在这里限制住了。

         继续往下,首先这里的这注释我觉得如果能够放到前面去的话会给我一些帮助。其实,这部分注释的内容也就是我前面推测、猜测出来的内容。但是,这部分内容更加细致,除了说明用户的存储空间可用范围之外,还指出来了这里还有一些特殊的用户只读的信息区域。这几个区域大小都是4MB,看起来都会对应一个页目录条目。这几条信息分别为:虚拟页表、页结构、env(环境?)结构。

         整个信息的整理理解花了一些时间,今晚上看得进度不算快。其实,还是有冲动想把这部分的定义信息全都看完的,但是继续看下去身体怕是又得大幅度透支了。暂且到此吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值