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

清华大学操作系统课程 ucore Lab2 物理内存管理 实验

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

操作系统 Lab2 物理内存管理 实验报告

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

实验目的

实验内容

基本练习

练习0:填写已有实验

将LAB1中完成的代码(不包含拓展练习)移植到了lab2的框架中,涉及到的文件为kern/debug/kdebug.c和kern/trap/trap.c,具体内容已在LAB1报告中进行说明,此处不再赘述;

练习1:实现 first-fit 连续物理内存分配算法(需要编程)

练习2:实现寻找虚拟地址对应的页表项(需要编程)

pde_t *pdep = pgdir + PDX(la); // 获取到页目录表中给定线性地址对应到的页目录项
pte_t *ptep = ((pte_t *) (KADDR(*pdep & ~0XFFF)) + PTX(la)); // 从找到的页目录项中查询到线性地址对应到的页表中的页表项,即页表基址加上线性地址的中的offset(第12...21位,从0开始)
if (*pdep & PTE_P) return ptep; // 检查查找到的页目录项是否存在,如果存在直接放回找到的页表项即可
if (!create) return NULL; // 如果该页目录项是不存在的,并且参数要求不创建新的页表,则直接返回
struct Page* pt = alloc_page(); // 如果需要按需创建新的页表,则请求一个物理页来存储新创建的页表
if (pt == NULL) return NULL; // 如果物理空间不足,直接返回
set_page_ref(pt, 1); // 更新该物理页的引用计数
ptep = KADDR(page2pa(pt)); // 获取到该物理页的虚拟地址(此时已经启动了page机制,内核地址空间),这是因为CPU执行的指令中使用的已经是虚拟地址了
memset(ptep, 0, PGSIZE); // 新创建的页表进行初始化
*pdep = (page2pa(pt) & ~0XFFF) | PTE_U | PTE_W | PTE_P; // 对原先的页目录项进行设置,包括设置其对应的页表的物理地址,以及包括存在位在内的标志位
return ptep + PTX(la); // 返回线性地址对应的页目录项
pte.png
- 如果ucore执行过程中访问内存,出现了页访问异常,请问硬件要做哪些事情?
    - 当ucore执行过程中出现了页访问异常,硬件需要完成的事情分别如下:
        - 将发生错误的线性地址保存在cr2寄存器中;
        - 在中断栈中依次压入EFLAGS,CS, EIP,以及页访问异常码error code,如果page fault是发生在用户态,则还需要先压入ss和esp,并且切换到内核栈;
        - 根据中断描述符表查询到对应page fault的ISR,跳转到对应的ISR处执行,接下来将由软件进行page fault处理;

练习3:释放某虚地址所在的页并取消对应二级页表项的映射(需要编程)

assert(*ptep & PTE_P); // 确保传入的二级页表项是存在的
struct Page *page = pte2page(*ptep); // 获取该页表项对应的物理页对应的Page结构
page->ref --; // 减少该物理页的引用计数
if (!page->ref) free_page(page); // 如果该物理页的引用计数变成0,即不存在任何虚拟页指向该物理页,释放该物理页
*ptep &= (~PTE_P); // 将PTE的存在位设置为0,表示该映射关系无效
tlb_invalidate(pgdir, la); // 刷新TLB,保证TLB中的缓存不会有错误的映射关系
result.png

参考答案分析

接下来对所给出的参考答案进行分析,与本实验中的实现进行对比:

练习1

练习2

练习3

实验中涉及的知识点列举

列举本次实验中涉及到的知识点如下:

对应到的OS中的知识点如下:

两者之间的对应关系为:

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

实验中未涉及的知识点包括:

实验代码

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

参考文献

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

上一篇 下一篇

猜你喜欢

热点阅读