操作系统学习笔记清华OS内存管理

清华大学操作系统课程 ucore Lab3 虚拟内存管理 实验报

2019-03-17  本文已影响0人  AmadeusChan

操作系统 Lab3 虚拟内存管理 实验报告

课程信息所在网址:https://github.com/chyyuu/os_course_info

实验目的

实验内容

基本练习

练习0:填写已有实验

在本练习中将LAB1/2的实验内容移植到了LAB3的实验框架内,由于手动进行内容移植比较烦杂,因此考虑使用diff和patch工具进行自动化的移植,具体使用的命令如下所示:(对于patch工具进行合并的时候产生冲突的少部分内容,则使用*.rej, *.orig文件来手动解决冲突问题)

diff -r -u -P lab2_origin lab2 > lab2.patch
cd lab3
patch -p1 -u < ../lab2.patch

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

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

设计实现

问题回答

pte.png
- 通过上述分析可以发现,无论是页目录项还是页表项,表项中均保留了3位供操作系统进行使用,可以为实现一些页替换算法的时候提供支持,并且事实上在PTE的Present位为0的时候,CPU将不会使用PTE上的内容,这就使得当P位为0的时候,可以使用PTE上的其他位用于保存操作系统需要的信息,事实上ucore也正是利用这些位来保存页替换算法里被换出的物理页的在交换分区中的位置;此外PTE中还有dirty位,用于表示当前的页是否经过修改,这就使得OS可以使用这个位来判断是否可以省去某些已经在外存中存在着,内存中的数据与外存相一致的物理页面换出到外存这种多余的操作;而PTE和PDE中均有表示是否被使用过的位,这就使得OS可以粗略地得知当前的页面是否具有着较大的被访问概率,使得OS可以利用程序的局部性原理来对也替换算法进行优化(时钟替换算法中使用);

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

完成vmm.c中的do_pgfault函数,并且在实现FIFO算法的swap_fifo.c中完成map_swappable 和swap_out_vistim函数。通过对swap的测试。

设计实现

问题回答

实验结果

最终的实验结果可以输出符合期望的结果,并且通过了make grade的测试,如下图所示:

result.png

参考答案分析

接下来对参考答案与本实验的实现进行分析比较,可以得到其主要区别分别有以下主要两点:

实验中涉及的知识点列举

在本次实验中所涉及到的知识点有:

对应到的操作系统中的知识点分别有:

它们之间的关系为,前者的知识点为后者中操作系统中的具体实现提供了理论基础(比如说页替换算法就为OS中具体实现swap out的机制提供了基础);

实验中未涉及的知识点列举

在本次实验中未涉及到的知识点有:

实验代码

https://github.com/AmadeusChan/ucore_os_lab/tree/master/lab3

参考文献

如果我的文章给您带来了帮助,并且您愿意给我一些小小的支持的话,以下这个是我的比特币地址~
My bitcoin address: 3KsqM8tef5XJ9jPvWGEVXyJNpvyLLsrPZj

上一篇 下一篇

猜你喜欢

热点阅读