Ucore-操作系统实验二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二、物理内存管理
一、实验目的
●理解基于段页式内存地址的转换机制
●理解页表的建立和使用方法
●理解物理内存的管理方法
二、实验内容
本次实验包含三个部分。首先了解如何发现系统中的物理内存;然后了解如何建立对物理内存的初步管理,即了解连续物理内存管理;最后了解页表相关的操作,即如何建立页表来实现虚拟内存到物理内存之间的映射,对段页式内存管理机制有一个比较全面的了解。本实验里面实现的内存管理还是非常基本的,并没有涉及到对实际机器的优化,比如针对cache 的优化等。三、实验要求
基于markdown格式来完成,以文本方式为主填写各个基本练习中要求完成的报告内容完成实验后,请分析ucore_lab中提供的参考答案,并请在实验报告中说明你的实现与参考答案的区别列出你认为本实验中重要的知识点,以及与对应的OS原理中的知识点,并简要说明你对二者的含义,关系,差异等方面的理解(也可能出现实验中的知识点没有对应的原理知识点)列出你认为OS 原理中很重要,但在实验中没有对应上的知识
四、实验流程概述
内存管理相关的总体控制函数是pmm_init函数,它完成的主要工作包括:
1. 初始化物理内存页管理器框架pmm_manager
2. 建立空闲的page链表,分配以页(4KB)为单位的内存
3. 检查物理内存页分配算法
4.建立一个临时二级页表
5. 建立一一映射关系的二级页表;
6. 使能分页机制;
7. 从新设置全局段描述符表;
8. 取消临时二级页表;
9. 检查页表建立是否正确;
10. 通过自映射机制完成页表的打印输出
五、实验练习
练习一、first-fit连续内存分配
(1)用双向链表结构来表示每个页:
(2)管理物理页的Page数据结构:
(3)物理内存页管理器顺着双向链表进行搜索空闲内存区域,直到找到一个足够大的空闲区域,这是一种速度很快的算法,因为它尽可能少地搜索链表。如果空闲区域的大小和申请分配的大小正好一样,则把这个空闲区域分配出去,成功返回;否则将该空闲区分为两部分,一部分区域与申请分配的大小相等,把它分配出去,剩下的一部分区域形成新的空闲区。其释放内存的设计思路很简单,只需把这块区域重新放回双向链表
(4)、default_init_memmap()
(5)default_alloc_pages()
练习二、查找虚拟地址对应页表项
(1)pde_t全称为page directory entry,也就是一级页表的表项(注意:pgdir实际不是表项,而是一级页表本身。实际上应该新定义一个类型pgd_t来表示一级页表本身)。pte t全称为page table entry,表示二级页表的表项。uintptr t表示为线性地址,由于段式管理只做直接映射,所以它也是逻辑地址。
pgdir给出页表起始地址。通过查找这个页表,我们需要给出二级页表中对应项的地址。虽然目前我们只有boot_pgdir一个页表,但是引入进程的概念之后每个进程都会有自己的页表。
(2)有可能根本就没有对应的二级页表的情况,所以二级页表不必要一开始就分配,而是等到需要的时候再添加对应的二级页表。如果在查找二级页表项时,发现对应的二级页表不存在,则需要根据create参数的值来处理是否创建新的二级页表。如果create参数为0,则get_pte返回NULL;如果create参数不为0,则get_pte需要申请一个新的物理页(通过alloc_page来实现,可在mm/pmm.h 中找到它的定义),再在一级页表中添加页目录项指向表示二级页表的新物理页。注意,新申请的页必须全部设定为零,因为这个页所代表的虚拟地址都没有被映射。
(3)当建立从一级页表到二级页表的映射时,需要注意设置控制位。这里应该设置同时设置上PTE_U、PTE_W和PTE_P(定义可在mm/mmu.h)。如果原来就有二级页表,或者新建立了页表,则只需返回对应项的地址即可。
(4)相应代码如下:
练习三、释放虚拟地址所在页,并取消对应二级页表映射
(1)判断此页被引用的次数,如果仅仅被引用一次,则这个页也可以被释放。否则,只能释放页表入口。
(2)相关代码如下:
(3)实验结果:
六、实验心得
1、通过本次实验,对X-86的内存的管理的分页机制有了深入的理解
2、x86特权级CPL:当前特权级;DPL:描述符特权;RPL:请求特权级了解
3、对X86特权级切换过程-----------中断方式的过程更加熟悉
4、对x86内存管理单元MMU的段机制和页机制的实现原理有了更深的认识
七、参考资料
/cs_assult/article/details/46495379
/cs_assult/article/details/46462829