操作系统lab3实验报告

本文是操作系统lab3实验报告,主要内容包括虚拟内存管理的Page Fault异常处理和基于FIFO的页面替换算法实现。实验通过页错误异常服务例程do_pgfault完成页映射,以及实现_Fifo_map_swappable和_fifo_swap_out_victim函数来完成页面换入换出操作。通过实验,加深了对虚拟内存机制、页替换算法和中断处理的理解。

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


实验三:虚拟内存管理


做完实验二后,大家可以了解并掌握物理内存管理中的连续空间分配算法的具体实现以及如何建立二级页表。本次实验是在实验二的基础上,借助于页表机制和实验一中涉及的中断异常处理机制,完成Page Fault异常处理和FIFO页替换算法的实现。实验原理最大的区别是在设计了如何在磁盘上缓存内存页,从而能够支持虚存管理,提供一个比实际物理内存空间“更大”的虚拟内存空间给系统使用。

实验目的:

  • 了解虚拟内存的Page Fault异常处理实现
  • 了解页替换算法在操作系统中的实现

实验内容:


练习0:

和lab2一样,依旧使用Ubuntu下的meld工具来进行文件拷贝,在此不再多余赘述。

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

原理分析:

在程序的执行过程中由于某种原因导致CPU无法最终访问到相应的物理内存单元,即无法完成从虚拟地址到物理地址的映射,这时CPU会产生一次页错误异常,从而需要进行相应的页错误异常服务例程。当相关处理完成后,将返回产生异常的指令处重新执行,才能使得软件正常运行。

产生页面异常的原因主要如下:
  • 目标页面不存在(页表项全为0,即该线性地址与物理地址尚未建立映射或者已经撤销);
  • 相应的物理页面不在内存中(页表项非空,但Present标志位=0,比如在swap分区或磁盘文件上)
  • 访问权限不符合(此时页表项P标志=1,比如企图写只读页面).

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

因此此函数是完成页错误异常处理的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值