Skip to content

Latest commit

 

History

History
160 lines (88 loc) · 4.51 KB

04-3-lab3-spoc-discussion.md

File metadata and controls

160 lines (88 loc) · 4.51 KB

lab3 SPOC思考题

=======

lab3 SPOC思考题

NOTICE

  • 有"w5l2"标记的题是助教要提交到学堂在线上的。
  • 有"w5l2"和"spoc"标记的题是要求拿清华学分的同学要在实体课上完成,并按时提交到学生对应的git repo上。
  • 有"hard"标记的题有一定难度,鼓励实现。
  • 有"easy"标记的题很容易实现,鼓励实现。
  • 有"midd"标记的题是一般水平,鼓励实现。

视频相关思考题


10.1 实验目标:虚存管理


  1. 缺页和页访问非法的返回地址有什么不同?

硬件设置、软件可修改;

  1. 虚拟内存管理中是否用到了段机制?
  1. ucore如何知道页访问异常的地址?

10.2 回顾历史和了解当下


  1. 中断处理例程的段表在GDT还是LDT?

GDT

  1. 物理内存管理的数据结构在哪?
  1. 页表项的结构?

物理页帧号、标志位

  1. 页表项的修改代码?

缺页异常处理代码

  1. 如何设置一个虚拟地址到物理地址的映射关系?

修改页表项内容

  1. 为了建立虚拟内存管理,需要在哪个数据结构中表示“合法”虚拟内存

页表项中的有效位

10.3 处理流程、关键数据结构和功能


  1. swap_init()做了些什么?

对换分区的初始化;

  1. vmm_init()做了些什么?

逻辑地址空间初始化;

  1. vma_struct数据结构的功能?

逻辑地址空间的合法区域的维护数据结构;

  1. mmap_list是什么列表?

用于维护连续逻辑地址空间映射的数据结构;

  1. 外存中的页面后备如何找到?

swap_in_page

  1. vma_struct和mm_struct的关系是什么?

合法的连续虚拟地址区域、整个进程的地址空间

  1. 画数据结构图,描述进程的虚拟地址空间、页表项、物理页面和后备页面的关系;

10.4 页访问异常


  1. 页面不在内存和页面访问非法的处理中有什么区别?对应的代码区别在哪?

pgfault_handler

  1. find_vma()做了些什么?

查找合法逻辑地址所在vma数据结构;

  1. swapfs_read()做了些什么?

读取在外存中的页面内容;

  1. 缺页时的页面创建代码在哪?

page_insert

  1. struct rb_tree数据结构的原理是什么?在虚拟管理中如何用它的?

红黑树,用于加快查找速度;

  1. 页目录项和页表项的dirty bit是何时,由谁置1的?
  1. 页目录项和页表项的access bit是何时,由谁置1的?

10.5 页换入换出机制


  1. 虚拟页与磁盘后备页面的对应有关系?

PTE中存在位为零时,采用swap_entry_t的结构来表示与外存后备页面的对应关系;

  1. 如果在开始加载可执行文件时,如何改?
  1. check_swap()做了些什么检查?
  1. swap_entry_t数据结构做什么用的?放在什么地方?
  1. 空闲物理页面的组织数据结构是什么?
  1. 置换算法的接口数据结构?

swap_manager

================

小组思考题


(1)(spoc) 请参考lab3_result的代码,思考如何在lab3_results中实现clock算法,给出你的概要设计方案。可4人一个小组。要求说明你的方案中clock算法与LRU算法上相比,潜在的性能差异性。进而说明在lab3的LRU算法实现的可能性评价(给出理由)。

(2)(spoc) 理解内存访问的异常。在x86中内存访问会受到段机制和页机制的两层保护,请基于lab3_results的代码(包括lab1的challenge练习实现),请实践并分析出段机制和页机制各种内存非法访问的后果。,可4人一个小组,,找出尽可能多的各种内存访问异常,并在代码中给出实现和测试用例,在执行了测试用例后,ucore能够显示出是出现了哪种异常和尽量详细的错误信息。请在说明文档中指出:某种内存访问异常的原因,硬件的处理过程,以及OS如何处理,是否可以利用做其他有用的事情(比如提供比物理空间更大的虚拟空间)?哪些段异常是否可取消,并用页异常取代?

v9-cpu相关


(1)分析并编译运行v9-cpu git repo的testing branch中的,root/etc/os_lab2.c os_lab3.c os_lab3_1.c,理解虚存机制是如何在v9-cpu上实现的,思考如何实现clock页替换算法,并给出你的概要设计方案。

(2)分析并编译运行v9-cpu git repo的testing branch中的,root/etc/os_lab2.c os_lab3.c os_lab3_1.c,理解内存访问异常的各种情况,并给出你的分析结果。