操作系统实验报告 lab3

本次实验报告详细介绍了ucore操作系统中虚拟内存的管理,包括初始化内存管理、页错误处理、FIFO页面替换算法的实现。通过分析vma_struct和mm_struct结构体,理解内存管理的关系,并通过代码实现对未映射地址的物理页映射。实验总结强调了操作系统基础知识的重要性及其在实践中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

操作系统实验报告 lab3

目录:

本次实验主要完成ucore内核对虚拟内存的管理工作。首先完成初始化虚拟内存管理机制,即需要设置好哪些页需要放在物理内存中,哪些页不需要放在物理内存中,而是可被换出到硬盘上,并涉及完善建立页表映射、页错误异常处理操作等函数实现。最后测试编写的代码有没有达到预期的效果。整体的实验不难,但需要掌握一些数据结构之间的关系,这样对理解虚拟内存管理有很大的帮助。

练习0 填写已有实验

将实验二代码补全至实验三

在这里了仍然采用meld工具直接进行比较,截图如下


*这里有图 1*
图1 文件夹对比

总共需要修改的文件有三个

default_pmm.c
pmm.c
trap.c

将代码直接从lab2复制至lab3,修改完之后进入下面的实验

练习1 给未被映射的地址映射上物理页

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

1 问题分析:

当启动分页机制以后,如果一条指令或数据的虚拟地址所对应的物理页不在内存中,或者访问权限不够,那么就会产生页错误异常。其具体原因有以下三点:

  1. 页表项全为0——虚拟地址与物理地址未建立映射关系或已被撤销。
  2. 物理页面不在内存中——需要进行换页机制。
  3. 访问权限不够——应当报错。

当出现上面情况之一,那么就会产生页面page fault(#PF)异常。产生异常的线性地址存储在
CR2中,并且将是page fault的产生类型保存在 error code 中

2 结构体分析

vma_struct

每个进程只有一个mm_struct结构,在每个进程的task_struct结构体中,有一个指向该进程的结构。可以说,mm_struct结构是对整个用户空间的描述。

 struct vma_struct {  
        // the set of vma using the same PDT  
        struct mm_struct *vm_mm;  
        uintptr_t vm_start;      // start addr of vma  
        uintptr_t vm_end;      // end addr of vma  
        uint32_t vm_flags;     // flags of vma  
        //linear list link which sorted by start addr of vma 
        list_entry_t list_link;  
    };  

1.vm_start和

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值