练习

对实验报告的要求:

  • 基于 markdown 格式来完成,以文本方式为主
  • 填写各个基本练习中要求完成的报告内容
  • 完成实验后,请分析 ucore_lab 中提供的参考答案,并请在实验报告中说明你的实现与参考答案的区别
  • 列出你认为本实验中重要的知识点,以及与对应的 OS 原理中的知识点,并简要说明你对二者的含义,关系,差异等方面的理解(也可能出现实验中的知识点没有对应的原理知识点)
  • 列出你认为 OS 原理中很重要,但在实验中没有对应上的知识点

练习 0:填写已有实验

本实验依赖实验 1/2。请把你做的实验 1/2 的代码填入本实验中代码中有“LAB1”,“LAB2”的注释相应部分。

练习 1:给未被映射的地址映射上物理页(需要编程)

完成 do_pgfault(mm/vmm.c)函数,给未被映射的地址映射上物理页。设置访问权限 的时候需要参考页面所在 VMA 的权限,同时需要注意映射物理页时需要操作内存控制 结构所指定的页表,而不是内核的页表。注意:在 LAB3 EXERCISE 1 处填写代码。执行

make qemu

后,如果通过 check_pgfault 函数的测试后,会有“check_pgfault() succeeded!”的输出,表示练习 1 基本正确。

请在实验报告中简要说明你的设计实现过程。请回答如下问题:

  • 请描述页目录项(Page Directory Entry)和页表项(Page Table Entry)中组成部分对 ucore 实现页替换算法的潜在用处。
  • 如果 ucore 的缺页服务例程在执行过程中访问内存,出现了页访问异常,请问硬件要做哪些事情?

练习 2:补充完成基于 FIFO 的页面替换算法(需要编程)

完成 vmm.c 中的 do_pgfault 函数,并且在实现 FIFO 算法的 swap_fifo.c 中完成 map_swappable 和 swap_out_victim 函数。通过对 swap 的测试。注意:在 LAB3 EXERCISE 2 处填写代码。执行

make qemu

后,如果通过 check_swap 函数的测试后,会有“check_swap() succeeded!”的输出,表示练习 2 基本正确。

请在实验报告中简要说明你的设计实现过程。

请在实验报告中回答如下问题:

  • 如果要在 ucore 上实现"extended clock 页替换算法"请给你的设计方案,现有的 swap_manager 框架是否足以支持在 ucore 中实现此算法?如果是,请给你的设计方案。如果不是,请给出你的新的扩展和基此扩展的设计方案。并需要回答如下问题
    • 需要被换出的页的特征是什么?
    • 在 ucore 中如何判断具有这样特征的页?
    • 何时进行换入和换出操作?

扩展练习 Challenge 1:实现识别 dirty bit 的 extended clock 页替换算法(需要编程)

扩展练习 Challenge 2:实现不考虑实现开销和效率的 LRU 页替换算法(需要编程)

challenge 部分不是必做部分。需写出有详细的设计、分析和测试的实验报告。

results matching ""

    No results matching ""