MIT6.828LAB2 (3)

LAB2_Part 3 Kernel Address Space


前言

记录一下自己的学习过程
实验内容翻译:
https://gitee.com/cherrydance/mit6.828
该翻译仅供参考

练习5

在调用 check_page() 后,填写 mem_init() 中缺失的代码。
您的代码应该通过 check_kern_pgdir() 和 check_page_installed_pgdir() 的检查。

找到需要补充代码的对应位置,看注释说是要把pages以只读的方式映射到线性地址UPAGES。
在这里插入图片描述
在memlayout.h中得到部分信息。
最终代码:

	boot_map_region(kern_pgdir, UPAGES, PTSIZE, PADDR(pages), PTE_U);

第二部分是要将 ‘bootstack’ 所引用的物理内存用作内核栈。代码如下:

	boot_map_region(kern_pgdir, KSTACKTOP-KSTKSIZE, KSTKSIZE, bootstack, PTE_W);

最后一部分将所有物理内存映射到KERNBASE,即,虚拟地址范围 [KERNBASE, 2^32) 应映射到物理地址范围 [0, 2^32 - KERNBASE)。代码如下:

	boot_map_region(kern_pgdir, (uintptr_t)KERNBASE, (0xffffffff-KERNBASE), (physaddr_t)0, PTE_W);

运行之后出现错误:
在这里插入图片描述
经过检查发现是boot_map_region出错。经过百度查找其他人的做法发现是因为在判断条件中不能使用va+size作为循环的退出条件。可能会溢出,因此将条件改一下就可以。
最终结果:
在这里插入图片描述

问题2:在此时点上,页目录(kern_pgdir)的哪些条目(行)已经填充?它们映射的地址是什么,指向哪里?换句话说,请尽可能填写以下表格:

要知道kern_pgdir有哪些被填充直接看mem_init函数对kern_pgdir的使用就行。
在这里插入图片描述

问题3:我们将内核和用户环境放在同一个地址空间中。为什么用户程序无法读取或写入内核的内存?有哪些特定的机制来保护内核内存?

如果该页的PTE_U没有被设置,用户就没有权限去访问。页保护机制保护了内核内存。

问题4:这个操作系统能支持的最大物理内存是多少?为什么?

4GB,因为32位地址可以表示4GB

问题5:如果我们实际上有最大量的物理内存,用于管理内存的空间开销是多少?这个开销如何分配?

一个页表项是32bit即4B,一个页有1024个页表项也就是4KB。我们总共有一个页目录加上1024个页表,就有1024*4KB=4MM。页目录本身是4KB。此外还有一个PageInfo每个是6B,总共有1024 * 1024个,也就是6MB。(应该是这样)

问题6:重新审视 kern/entry.S 和 kern/entrypgdir.c 中的页表设置。在打开分页之后,EIP 仍然是一个较低的数字(略高于1MB)。我们在什么时候过渡到在高于 KERNBASE 的 EIP 上运行?是什么使我们能够在启用分页和开始在高于 KERNBASE 的 EIP 上运行之间继续以低 EIP 运行?为什么这个过渡是必要的?

在这里插入图片描述
在entrypgdir.c中:
entry.S页目录将物理内存的前4MB映射到虚拟地址KERNBASE开始的地方(即,它将虚拟地址[KERNBASE,KERNBASE+4MB)映射到物理地址[0,4MB))。我们选择4MB是因为这是一个页表可以映射的最大范围,并且足够支持早期引导过程。我们还将虚拟地址[0,4MB)映射到物理地址[0,4MB);这个区域对于entry.S中的一些指令至关重要,然后我们就不再使用它。
问了一下chatgpt:
在启用分页和开始在高于 KERNBASE 的 EIP 上运行之间,为了确保系统的稳定性和兼容性,内核会继续以低 EIP 运行一段时间。这是因为在内核的启动过程中,有一些代码和数据仍然依赖于低地址的物理内存位置。如果立即过渡到高地址执行,这些依赖关系可能会被破坏,导致系统崩溃或出现其他问题。

总结

lab2的最后一部分。
这一个lab的任务主要是完成分页管理,对内存有更深的了解。
后续再继续加油!!!!!

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值