网站大量收购独家精品文档,联系QQ:2885784924

Ucore-操作系统-实验三.docx

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Ucore-操作系统-实验三

虚拟内存管理实验目的了解虚拟内存的Page Fault异常处理实现了解页替换算法在操作系统中的实现实验内容本次实验是在实验二的基础上, 借助于页表机制和实验一中涉及的中断异常处理机制, 完成Page Fault异常处理和FIFO页替换算法的实现, 结合磁盘提供的缓存空间, 从而能够支持虚存管理, 提供一个比实际物理内存空间“更大”的虚拟内存空间给系统使用。 这个实验与实际操作系统中的实现比较起来要简单, 不过需要了解实验一和实验二的具体实现。 实际操作系统系统中的虚拟内存管理设计与实现是相当复杂的, 涉及到与进程管理系统、文件系统等的交叉访问。实验要求基于markdown格式来完成, 以文本方式为主填写各个基本练习中要求完成的报告内容完成实验后, 请分析ucore_lab中提供的参考答案, 并请在实验告中说明你的实现与参考答案的区别列出你认为本实验中重要的知识点,以及与对应的OS原理中的知识点,并简要说明你对二者的含义,关系,差异等方面的理解( 也可能出现实验中的知识点没有对应的原理知识点)列出你认为OS原理中很重要,但在实验中没有对应上的知识点实验原理虚拟内存单元不一定有实际的物理内存单元对应, 即实际的物理内存单元可能不存在;如果虚拟内存单元对应有实际的物理内存单元, 那二者的地址一般是不相等的;通过操作系统实现的某种内存映射可建立虚拟内存与物理内存的对应关系, 使得程序员或CPU访问的虚拟内存地址会自动转换为一个物理内存地址。实验流程1、初始化过程。调用pmm_init函数完成物理内存的管理2、执行中断和异常相关的初始化工作,调用pic_init函数和idt_init函数3、函数vmm_init检查我们的练习1是否正确实现了。为了表述不在物理内存中的“合法”虚拟页,需要有数据结构来描述这样的页,为此ucore建立了mm_struct和vma_struct数据结构。4、完成ide_init函数后,ucore就可以对这个swap硬盘进行读写操作了。由于页面置换算法的实现存在对硬盘数据块的读写, 所以ide_init就是完成对用于页换入换出的硬盘(简称swap硬盘)的初始化工作。 5、swap_init函数建立swap_manager,swap_manager是完成页面替换过程的主要功能模块其中包含了页面置换算法的实现。通过do_pgfault来调用swap_map_swappable函数来查询这些页的访问情况并间接调用实现页面置换算法的相关函数。实验练习练习一:给未被映射的地址映射上物理页原理:以下三种情况会产生页错误异常并触发中断①页表项全为0——虚拟地址与物理地址未建立映射关系或已被撤销。?②物理页面不在内存中——需要进行换页机制。?③访问权限不够——输出错误信息,并退出。??根据以上三点错误原因,完成页错误处理函数do_pgfault()。函数从CR2寄存器中获取页错误异常的虚拟地址,根据error?code来查找这个虚拟地址是否在某一个VMA的地址范围内,并且具有正确的权限。如果满足上述两个要求,则需要为分配一个物理页。?相关代码(1)页面换入的实现?(2)vma_struct的描述(简称vma变量)(3)vm_mm是一个指针,指向一个比更高的抽象层次的数据结构mm_struct练习二:补充完成基于FIFO()的页面替换算法(一)原理页面换入主要在vmm.c中的do_pgfault()函数实现;页面换出主要在swap_fifo.c中的swap_out_vistim()函数实现。????在换入时,需要先检查产生访问异常的地址是否属于某个vma表示的合法虚?拟地址,并且保存在硬盘的swap文件中(对应的PTE的高24位不为0)。如果满足以上亮点,则执行swap_in()?函数换入页面。??换出则相对简单,当申请空闲页面时,alloc_pages()函数不能获得空闲页,则直接调用swap_out()函数换出不常用的页面。??(二)相关代码(1)_fifo_map_swappable()函数将最近被用页面添加到算法所维护的次序队列??(2)_fifo_swap_out_victim()函数是用来查询哪个页面需要被换出。 (3)对Page数据结构进行扩展(4)设计了一个页替换算法的类框架swap_manager(5)实验结果:心得体会在页表项全为0、物理页面不在内存中、访问权限不够。这三种情况下,会产生错异常并发生中断。FIFO算法只是在应用程序按线性顺序访问地址空间时效果才好,否则效率不高FIFO算法的另一个缺点是,它有一种异常现象(Belady现象),即在增加放置页的页帧的情况下,反而使页访问异常次数增多。算法的类框架swap_manager通过重载函数,实现了不同换页机制的实现参考资料/cs_assult/article

文档评论(0)

ayangjiayu4 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档