MIT 6.S081入门lab4.5 Q&A(lec7)、
这部分主要是Q&A部分课程的观看笔记,因此这一部分只有课程观看笔记
一、课程视频观看笔记
- pagtbl实验:
基础知识回顾:
0x800以上是DRAM,以下是DEVICE;CPU通过MMU获取地址;注意:页表自身也是存在于内存中
可以从init打印出来的页表中观测到 ,0-0三级页表中的第0页为用户页(1f),第1页为守护页(f),第2页为堆栈页(1f);其中255-511页表的三级页表中:511为trampoline页(b)、510为trapframe页(7)
255为顶是因为用了38位做地址
.data和.text在同一页是因为这样会让exec更简单,一般操作系统是分开的。 - test1;
xv6代码针对单一pgtabl很特别
代码中没有单一的代码创建内核页表,其是实现在kvminit()、procinit()和virto_disk()中的
用户进程退出后,需要清理页表(尤其是内核页表的映射清理需要注意)
内核bug很难追踪,需要不断的反推。 - 实验方法:copy方法/共享内核页表
例程使用共享的方法:
编程原则:小步 + 保持旧代码
由于内存布局的关系,其中地址空间的l1的pte的1-511都与原始的内核页表相同,因此可以复制原始的pte的l1
永远不要释放正在运行的页表,要提前切换
test2
新的copyin和copyinstr的优点:使用硬件实现walk
新的copyin核心是将copy将用户页表映射到内核页表中PLIC以下的位置(启动项等),从而便于内核空间和用户空间的大量数据传输,同时注意复制时页表的权限(禁用U、W、V)
参考文献
MIT 6.S081 2020 操作系统 [中英文字幕]:https://www.bilibili.com/video/BV19k4y1C7kA?p=6&vd_source=a92eee08b64ebacd746bc659b96ff37c
标签:lec7,内核,lab4.5,S081,MIT,页表 From: https://www.cnblogs.com/David-Dong/p/18045550