操作系统实验三-B14040836-潘安磊选读.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实 验 报 告 实验名称 虚存管理算法实验 指导教师 杨一涛 实验类型 实验学时 实验时间 2016.11.27 一、 实验目的和要求 掌握虚拟存储管理的原理,掌握虚存管理中的页面置换算法,学会分析各种页面置换算法的优劣以及内存页框数量对算法的影响。 二、实验环境(实验设备) 硬件:PC机和Linux服务器 软件:Linux操作系统或Windows操作系统,putty软件,VC++6.0软件 三、实验原理及内容 分页存储管理将一个进程的逻辑地址空间分成若干大小相等的片,称为页面或页。 1、调页策略 (1)何时调入页面 如果进程的许多页是存放在外存的一个连续区域中,则一次调入若干个相邻的页,会比一次调入一页的效率更高效一些。但如果调入的一批页面中的大多数都未被访问,则又是低效的。可采用一种以预测为基础的预调页策略,将那些预计在不久之后便会被访问的页面,预先调入内存。如果预测较准确,那么,这种策略显然是很有吸引力的。但目前预调页的成功率仅为50%。且这种策略主要用于进程的首次调入时,由程序员指出应该先调入哪些页。 (2)请求调页策略 当进程在运行中需要访问某部分程序和数据时,若发现其所在的页面不在内存,便即提出请求,由OS将其所需页面调入内存。由请示调页策略所确定调入的页,是一定会被访问的,再加之请求调页策略比较易于实现,故在目前的虚拟存储器中,大多采用此策略。但这种策略每次仅调入一页,故须花费较大的系统开销,增加了磁盘I/O的启用频率。 2、页面调入过程 每当程序所要访问的页面未在内存时, 便向CPU发出一缺页中断,中断处理程序首先保留CPU环境,分析中断原因后,转入缺页中断处理程序。该程序通过查找页表,得到该页在外在原物理 块后,如果此时内存能容纳新页,则启动磁盘I/O将所缺之页调入内存,然后修改页表。如果内存已满,则须先按照某种置换算法从内存中选出一页准备换出;如果该页未被修改过,可不必将该页写回磁盘;但如果此页已被修改,则必须将它写回磁盘,然后再把所缺的页调入内存,并修改页表中的相应表项,置其存在位“1”,并将此页表项写入快表中。在缺页调入内存后,利用修改后的页表,去形成所要访问数据的物理地址,再去访问内存数据。整个页面的调入过程对用户是透明的。 3、页面置换算法 在进程运行过程中,若其所要访问的页面不在内存需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁盘的对换区中。但应将哪个页面调出,所以需要根据一定的算法来确定。以下分别是三个算法的设计思想。 OPTIMAL:最佳置换算法。其所选择的被淘汰页面,将是以后永不使用的,或是在最长(未来)时间内不再被访问的页面。 FIFO:先进先出置换算法。该算法总是淘汰最先进入内存的页面,既选择在内存中驻留时间最久的页面予以淘汰。 LRU:最近最久未使用置换算法。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间T,当须淘汰一个页面时,选择现有页面中其T值最大的给予淘汰。 CLOCK:分简单CLOCK置换算法和改进型CLOCK算法。LRU算法是较好的一种算法,而由于LRU在硬件上要求较多,在实际应用中多采用LRU的近似算法。CLOCK算法就是用得较多的一种LRU近似算法。 2、核心算法 void FIFO(int N,Page *mm,int *D) //先进先出 { int i,a,b,m=0,K=0; int queue1[M]; for(i=0;iM;i++) { a=Equation(N,D[i],mm); if(a != -1){} //页已存在 else{ //页不存在 b=Check(N,mm); if(b != -1) { mm[b].num = D[i]; //内存还有空闲 } else { mm[m].num = D[i]; m++; m%=N; } //内存已满,需要置换 queue1[K++]=D[i]; } } printf(\nFIFO算法\n缺页次数为:%6d\n缺页率:%16.6f\n\n,K,(float)K/M); for(i=0;iK;i++) { printf(%3d ,queue1[i]); if(i%40==0i!=0) printf(\n); } } void OPT(int N,Page *mm,int *D)//最优置换 { int a,b,c,i,j,T=0; int queue2[M]; for(j=0;jM;j++) { a=Equation(N,D[j],mm);

文档评论(0)

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

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

1亿VIP精品文档

相关文档