lab2实验报告
lab2实验报告
一、实验思考题
Thinking2.1
虚拟地址查询可以不经过TLB和页表的查询,于是不需要进行地址转换。缺点是一个虚拟地址可能对应不同物理地址,导致cache空间的浪费,命中率降低。若cache没有命中,则效率反而会下降。对于每个进程的虚拟空间是独立的,而如果使用cache则需要额外区分是哪一个进程,否则可能影响进程间的独立运行问题。
物理地址查询更有利于数据的安全共享,不会发生上述的缺点。
Thinking2.2
虚拟地址。c语言运行时指针均是虚拟地址。
Thinking2.3
宏函数有
- 创建链表头
- 初始化链表头
- 清除链表
- 链表的
for-each循环 - 从头部插入链表
- 从尾部插入链表
- 从中间某一项的前、后插入链表
- 删除元素
结构体中有下一项的地址,和上一项中指向下一项指针的地址。因为存放有上一项中指向下一项指针的地址,所以方便了插入和移除结点的操作。通过这样巧妙的设计,有很好的抽象和可扩展性,在使用时可以定义链表结点的类型,而其他的相关操作都已经封装好。
Thinking2.4
使用do-while可以让代码块成为完整的一部分,相当于一句话,避免出现单句if或其他语句中的错误,宏函数展开成为整个部分。
例如
if (...)
{
/* something */
};
else (...)
{
/* something */
};
利用dev编译时会报错
另外,可以使用break增加控制。
Thinking2.5
真实的物理内存页在物理内存当中,逻辑上我们将其分为页来管理,但真实的物理内存中的内存是连续分布的。
我们可以通过pmap.h中定义的page2pa()函数,传入一个Page结构体指针,即可得到物理内存页的物理地址。
具体实现为物理页框号左移12位。
指针pp相对于pages的偏移量
Thinking2.6
C
Thinking2.7
虚拟地址。在alloc()函数中,有相关代码段。
if (clear) {
bzero((void *)alloced_mem, n);
}
这里alloced_mem与freemem相关,所以为虚拟地址。
Thinking2.8
$0xC0000000+((0xC0000000>>12)<<2) = 0xC0000000+0x00300000 = 0xcC0300000 $
起始地址:\(0xC0300000\)
Thinking2.9
可以有虚拟地址直接得到对应页表项的虚拟地址。设置页目录可以判断页面是否有效,减少内存开销。
Thinking2.10
在实现pgdir_walk()中,有注释段pgdir_walk returns a pointer to the page table entry (with permission PTE_R|PTE_V)
在这个函数中进行了关于PTE_R权限位的相关操作。
Thinking2.11
- 将
CP0_ENTRYHI的值存放至k1寄存器 - 将
CP0_ENTRYHI的值修改为a0寄存器的值 - 利用
tlbp查询,如果虚拟地址匹配,则将index保存到Index寄存器中。没有匹配,则Index寄存器的最高位置1 - 四个
nop用于等待tlbp出流水线,保证mfc0读取到更新后的结果 - 将
CP0_INDEX值写入k0寄存器 - 如果
k0的最高位置1,即值小于0,发生缺失,跳转到NOFOUND处理 - 清除
CP0_ENTRY,CP0_ENTRYLO0,更新TLB
Thinking2.12
va2pa的实现中,低12位清零,所以页内偏移并没有被考虑进来,只是获得了va对应物理内存页的首地址,所以改变va的值时,并不改变pa的值。
Thinking2.13
一级页表中多增加一位标记位,由于一级页表的一项映射到4MB的页面地址,需要区分一级页表中存放的是二级页表的入口地址还是4MB大物理页面地址。
二、实验难点图示
主要难点在于理解内存,并且掌握虚拟内存的管理。并且明白什么时候用虚拟内存,何时该用物理内存。并且理解如何利用页表来管理内存。
页目录自映射
UVPT(0x7fc00000) 到 ULIM(0x80000000) 之间的空间只有 4MB
可以通过页表起始地址计算页目录的虚拟地址。
三、体会与感想
本单元主要内容是内存管理,首先是物理内存,在此基础之上需要掌握虚拟内存。直接访问内存有很多不便之处,而通过虚拟内存的方法,可以将不同地址空间独立出来,程序员可以只关注于逻辑地址而不用从头考虑物理内存的规划。
通过学习,完善创建内存管理相关的作业部分,总体来说这次作业是需要花费大量时间来学习的, 需要理解整个的页表机制,以及如何通过每一步的函数来实现复杂功能。以及对于相关指针的运用自己掌握地还不够熟练。
随着实验的进行,操作系统也在不断完善,后续的任务也不会太轻松,需要好好加油。

浙公网安备 33010602011771号