Skip to content

实验任务

练习

为了实现lab3的目标,lab2提供了2个基本练习,要求完成实验报告。 注意有“LAB3”的注释,代码中所有需要完成的地方(challenge除外)都有“LAB3”和“YOUR CODE”的注释 对实验报告的要求: - 基于markdown格式来完成,以文本方式为主 - 填写各个基本练习中要求完成的报告内容 - 完成实验后,请分析ucore_lab中提供的参考答案,并请在实验报告中说明你的实现与参考答案的区别 - 列出你认为本实验中重要的知识点,以及与对应的OS原理中的知识点,并简要说明你对二者的含义,关系,差异等方面的理解(也可能出现实验中的知识点没有对应的原理知识点) - 列出你认为OS原理中很重要,但在实验中没有对应上的知识点

练习1:完成TLB的重填代码(需要编程)

请读者阅读LoongArch32文档中的存储管理和控制状态寄存器有关部分,学习LoongArch32架构的内存管理机制,包括软件填充TLB,TLB项的TLBELO和TLBEHI各个bit的含义,然后完成位于kern/mm/la32_tlb.c中的代码。

这里需要补充的代码包括2个函数:

pte2tlblow是从根据uCore的PTE获得相应的页表权限,以及它的物理地址,然后填到TLBELO中。

tlb_refill 要完成LoongArch32虚双页表的适配(即虚拟地址第13位分别为0和1的相邻两个页面放在同一个页表项中),并调用pte2tlblow得到TLBELO所要填写的内容,以及根据虚拟地址得到TLBEHI所要填写的内容,最后调用tlb_replace_random完成TLB重填。

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

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

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

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

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