实验2:物理内存管理
实验目的:
- 理解基于段页式内存地址的转换机制
- 理解页表的建立和使用方法
- 理解物理内存的管理方法
实验内容:
本次实验包含三个部分。首先了解如何发现系统中的物理内存;然后了解如何建立对物理内存的初步管理,即了解连续物理内存管理;最后了解页表相关的操作,即如何建立页表来实现虚拟内存到物理内存之间的映射,对段页式内存管理机制有一个比较全面的了解。
练习:
练习0:填写已有实验
本实验依赖实验1。请把你做的实验1的代码填入本实验中代码中有“LAB1”的注释相应部分。提示:可采用diff和patch工具进行半自动的合并(merge),也可用一些图形化的比较/merge工具来手动合并,比如meld,eclipse中的diff/merge工具,understand中的diff/merge工具等。
meld是一个非常好用并且快捷的文件合并工具,我们这里在Ubuntu下直接用meld就可以把lab1的代码复制到lab2里面了。
打开终端输入meld就可以看到meld的界面了,于是我们选择将lab1和lab2这两个文件目录进行对比
点击compare,进入对比界面后,找到有lab1 step1的的kdebug.c文件和lab1 step2 step3的trap.c文件,将文件从左边复制到右边。这样一来,lab1中的代码就自动复制到了lab2中。
练习1:实现firstfit连续物理内存分配算法
提示:在实现first fit 内存分配算法的回收函数时,要考虑地址连续的空闲块之间的合并操作。提示:在建立空闲页块链表时,需要按照空闲页块起始地址来排序,形成一个有序的链表。可能会修改default_pmm.c中的default_init,default_init_memmap,default_alloc_pages, default_free_pages等相关函数。请仔细查看和理解default_pmm.c中的注释。
根据提示,我们知道firstfit的分配算法的实现都是在default_pmm.c中的,我们需要做的就是完善和修改default_pmm.c中的每一个相关函数(根据代码的注释)
接下来我们需要了解firstfit算法的原理是什么:
firstfit算法是一种简单高效的分配算法:
物理内存页管理器顺着双向链表进行搜索空闲内存区域,直到找到一个足够大的空闲区域,因为 它尽可能少地搜索链表。如果空闲区域的大小和申请分配的大小正好一样,则把这个空闲区域分配出去,成功返回