MIT 6.S081入门lab4.5 Q&A(lec7)

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)
    image
    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

posted @ 2024-02-29 21:29  David_Dong  阅读(11)  评论(0编辑  收藏  举报