版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、页面置换算法实验报告一、 实验目得 :设计与实现最佳置换算法、 随机置换算法、 先进先出置换算法、 最近最久未使用置换算法、简单 clock 置换算法及改进型 c ock 置换算法 ; 通过支持页面访问序列随机发生实现有关算法得测试及性能比较、二、实验内容 :虚拟内存页面总数为n,页号从 0 到 n 1物理内存由 m 个物理块组成页面访问序列串就是一个整数序列 ,整数得取值范围为 0 到 n - 、页面访问序列串中得每个元素 p 表示对页面 p 得一次访问页表用整数数组或结构数组来表示符合局部访问特性得随机生成算法1. 确定虚拟内存得尺寸 ,工作集得起始位置 p,工作集中包含得页数e,工作集移
2、动率 (每处理 m 个页面访问则将起始位置 p 1),以及一个范围在 0 与之间得值 t;2. 生成个取值范围在 p 与 + e 间得随机数 ,并记录到页面访问序列串中 ;3. 生成一个随机数 r,0 r 1;4.如果 r t,则为 p 生成一个新值 ,否则 p = (p ) mod n;5. 如果想继续加大页面访问序列串得长度 ,请返回第 2 步 ,否则结束。三、实验环境 :操作系统 :wi ows7软件 : +6.0四、实验设计 :本实验包含六种算法 ,基本内容相差不太 ,在实现方面并没有用统一得数据结构实现 ,而就是根据不同算法得特点用不同得数据结构来实现 : 1、最佳置换与随机置换所需
3、操作不多 ,用整数数组模拟内存实现 ;2、先进先出置换与最近最久未使用置换具有队列得特性,故用队列模拟内存来实现 ;3、clock 置换与改进得c o置换具有循环队列得特性,故用循环队列模拟内存实现 ;4、所有算法都就是采用整数数组来模拟页面访问序列。五、数据结构设计: /页面访问序列数组 : n e ref_sze; /内存数组 :it pyphy_size;/队列数据结构定义 :tpe ef sr t qoe?/定义队列数据结构?int daa;structqnde * ext;qnod ,* ueueptr; yped strctqu u ptr rnt;?/头指针?quuptr rea
4、 ;?/尾指针 linkqu u;/定义链表数据结构typede struct lno /定义循环链表数据结构i t data;i t flag;?int modfy; ?/访问位?/修改位?stuctlnod ext;ln de,lin l st;六、主要函数说明:1、 vo d se _r _num()?/ 产生具有局部特性得随机数列;2、 intexchange_ no (l nklis &l,in e,i ti)/ 将链表中序号为i 得结点替换为内容为e 得结点 ;3、 ool s rch_ i klis (lin st l, nt e, n &i) 找到链表中内容为得结点,并用 i
5、返回其位置 ,i=1 表示第一个非头结点,依次类推 ;4、 void e rch_ _fl g(li klis ,i t i)/ 用 i 返回第一个flag 为 0 得结点得位置 ,i 1 表示第一个非头结点,以此类推 ;5、 vo d e_ll lag(linkl结点得 la标志为1;s&l,int i)/ 设置链表中得序号为得6、 i t arch_ l modifyclock(linkl st l, nt &mo y_ m) / 找到改进得 clo 算法所需要淘汰得页 ,用 od f _n m 返回其位置 ;此函数根据书上给得思路,第一遍扫描=且 m= 得页面予以淘汰,若失败 ,则进行第
6、二轮扫描a= 且 m= 得页面 ,第二轮扫描时将所有访问过得页面得访问位置 0;若失败则重复上述两部;7、 vo d s ll_mo fy( l st l,inti) / 设置链表l 中得序号为i得结点得 odi y 标志为 1;8、 boo sear hqu e(l n qu e q,i e,int )?/寻找队列中结点data 域等于得结点,并用 i 返回其在 q 中得位置 ;9、 nt getnum(i ta,int )?/ 用返回元素在被引用数列中得下一个位置10、 vo dora()/ 实现最佳置换算法,包括判断页面就是否在内存中、页面进内存、输出内存状态等内容;11、 oid r
7、d()? /随机置换算法12、 void f o() ?/先进先出算法1、 voi lr ()?/ 最近最久未使用算法实现最近最久未使用算法得思想就是:判断待进入内存得页面,如果与内存中得第一个页面相同 ,则将它移到最后一个 ,即标志为最近使用得页 ;如果与内存中得第二个页面相同 ,则将它删除 ,并在队列尾部添加相同元素 ,即标志为最近使用得页 ;?、 v id c o k() ?实现clo k 算法1、 oid difi _ lock() /实现改进得clock 算法16、 in ain() /主函数 ,调用实现各算法得个主要函数,并输出各算法得缺页率。七、实验问题回答:1、 fifo 算法
8、就是否比随机置换算法优越?答:f o 算法比随机置换算法优越,但优势并不明显、2、 lru 算法比 fi 算法优越多少?答 :l u 算法 ifo 算法得效率要高 5 10%,有理论知识可知 ,页面访问序列具有局部性 ,而 fo 算法并不符合实际情况。3、 ru 算法与 optimal 算法有何差距?答 :lru 算法就是所有算法中效率最接近 opimal 算法得算法 ,由理论知识可知 ,o t al 算法就是理想得算法 ,现实中几乎不可能实现 ,只能作为一种测评标准 ,lru 算法就是效率较高得可实现置换算法 ,但其硬件要求较高 ,如果规模较小 ,则略显麻烦。4、 clock 算法与 lr
9、算法有何差距?答 : lck 算法与 l u 算法从结果瞧来差距不大 ,l c算法就是使用软件得方式实现 lru 算法中硬件得功能 ,从而在执行效率上会稍逊色些。八、实验过程结果截图:实验结果截图测评一 :测评二 :测评三 :实验过程截图(注:只截取第三次测评 ,蓝色字体表示产生缺页中断)九、实验结果分析:1、最佳置换算法效果最佳不论在那组数据中 ,最佳置换算法得效果都就是最好得 ,且都会比其它算法得性能高出不少。但通过课堂上得学习 ,我们知道这只就是一种理想化算法 ,但实际上却难于实现 ,故主要用于算法评价参照。、随机算法得性能总就是最不好得?这就是由于随机算法每次总就是从所有页面中随机挑一
10、个置换出去 ,但我们知道页面得访问存在着局部性得原理 ,并不就是随机得 ,因此它得性能较差。3、最近最久未使用算法得性能较好相较于先进先出与两种 clc算法 ,最近最久未使用算法得性能略好 ,我们测试得数据规模相对较小 ,相信如果采用更大规模得数据 ,其优势会更加明显。当从课堂上我们知道要想在实际得应用中实现本算法 ,用软件得方法速度太慢 ,影响程序执行效率 ,如果采用硬件方法实现 ,则需要增加大量得硬件设备。4、先进先出与 clock 算法得性能基本相同这就是由于两种 loc 算法遍历链表采用得就就是 if得方法 ,而改进得cl ck 算法相比于简单 clc算法得优势主要体现在会根据就是否被
11、修改进行选择 ,以减少写回所花费得时间。十、实验总结 :这次实验总体难度不就是很大 ,需要实现得算法数目虽然不少 ,但基本思路较为相似 ,因此实现起来也并不就是十分困难。通过完成这次实验 ,除了加深了我对几种策略得理解 ,锻炼了我得编程能力 ,另一个巨大得收获就就是了解了一些生成测试数据得方法。为了使我们得测试数据更贴近现实 ,我们引入了工作集得概念 ,并根据实际使用情况得特点设计出尽可能符合实际情况得随机数生成方案。 通过阅读课件再加上自己得理解 ,我了解了老师得设计思路 ,感觉这个思路极其巧妙 , 设计中用到得方法与体现出得很多思想值得我们学习。十一、程序清单:#includeistram
12、#nclude#i cude tim . inludemalloc。#i u usin name p ce s ; defi ref_siz d i e phy_size 3in refref_ize;floa in rrupt = 0。 0 ;/nt rfref_siz = 0;int phy y_ ie; / / / / / / / / id et_ a nm()?/ 产生具有局部特性得随机数列cout 页面访问序列 :” endl;?in p 1 ;?inte=4;int m=4;it ;?itj=0;int n=;?dou 0、6; nt tmp;?for(i=0;i m;i ,+)?
13、sl p(10 );? and(time(null);? temp=rand()e ;? refj=tem ;?co t ref ; r(n0;n4;n+)?sleep(100 ); rand(ime(null);?doube =(doubl)(ran ()10)10.;? /coutr dl;? f(r t) p=p+in (10*r);? lse? p=(p+)20; ?for(i=0; m;i +,j+)? sle (00*i);? s an(time(null);? em r ()% ; ?refj temp;? cout refj ” ”;cut nxt=;?- lag= ;retr
14、n 1;int exchange_lnde(link s l,n e,i )/将链表 l 中序号为得结点替换为内容为e 得结点? (l- ext =l) exi ( );?l nklist p,q; t j=0;?p=(lin list)mal oc(sizeo(lnode);?q=(ink it) a oc(szeo(l ode);?q dta=;p=l;?or(j ;jet;q ext=p-nextnext;?p-next=q;?q flag1;/设置新结点得访问位为1?q ify=0; ?/设置新结点得修改位为0retun1;intinsert_l de(linklist &l,i t
15、e)/在循环链表中插入新得结点,从 l 头结点开始依次向后插入?linklist p, ;?p=(i i t)mlloc(si of(lnode); ?q=(li kis)ml c(s zef(ln );q- aa=;?q flag=;? /设置新结点得访问位为1?- md y=0; /设置新结点得修改位为p=; e(pn t!=l)? p nxt;?-next=q;?q nex=l;?rturn 1;bos r _linklist(li kis &l, nte,int &i)/ 找到链表 l 中内容为 e 得结点 ,并用返回其位置 ,i 1 表示第一个非头结点 ,依次类推 =1;?i(l n
16、ext= l) exi (-1);l n listp;?=(lin l )malloc(sz f(lnode);i(!p) e t(-1);?p - ext; ?/p 指向链表得第一个结点 (非头结点 )while(p !=l & p dta! = )? p= next; ?+;?f(p=l) ?/没有找到符合要求得结点ret rn fase;retun tre;void serch ll_flag(lin is &l, i)/ 用返回第一个 fla 为 0 得结点得位置 , =1 表示第一个非头结点 ,以此类推?i1;?l nki t ; =(lin l s)maloc( ieof(lnod
17、e); (! ) eit(-1);p=l- nex ;?w le(p fla! =)p-fl =0;?/修改访问标志位为0p= ext;? f(p=l) ?/跳过头结点? ?pp ext;? i+;?f(= )?/跳过头结点? i1;?/ etur 1;v d et_ _ lag(lnklist l,int i) ?/ 设置链表中得序号为 i 得结点得 flag 标志为 1;?i kl t p;p (l nk s)mal c(siz o (lno ); i(! ) x t(-1);?p l ext;if(i= )? p- lag=1;if( =2)?p=pnext; -fl g1;?if(i=
18、3)?p= -nxt;? = ne ; ?p-fag=;?in erch_l _m d y lok(linklist &l,int &m f _ u) /找到改进得 clo k 算法所需要淘汰得页 ,用 modify_num 返回其位置?modfy_ m=1;?if( - ext=l) ex t(- );linkl stp;?p=(ikli t)malloc( zeof(lnode);if(! ) i (-1);=l next;?/p 指向链表得第一个结点 (非头结点 )whl (p! l)/第一轮扫描a=0并且m=0得结点?if(p f ag=0p- modfy= )?break;/找到?p
19、= nex;?modify_num+;i(p=l)? ify_ um= ;? p l nxt; hile(p!=)?/ 第二轮扫描 a=0 并且 m=1 得结点 ,同时修改访问过得结点得访问位为 0? i(p-fl g! 0)? ? flag=0;?e e if( mdif =1)?break;?p=p ext;?m di um+ ;?if(p )?moify num=1;p= -nxt;wile(p ! )/第三轮扫描 a 0 并且 =0 得结点? ? f(p fl g=0 & p mdi y=0)? e ;? =p nex;? mo fy_num+;?if(p= l)? ?modify_n
20、um=1;? =l- xt; le(p!=)/第四轮扫描 a=并且 =1 得结点? ?if(p flag!=0)?pflag0;ese f(p md fy= )? ? ak;?p=p ne t;?m ify_n m+;?retun 1;void t_ll_mo ify( inkl st & ,int i)/设置链表l 中得序号为i 得结点得modify标志为1;ink istp;? (lin list)malloc( izo( nde);i(!p) eit(-1);=l xt;if(i= )?p-modif =; (i= )?=p e t;p modiy=1;if( =2)p= -nxt;?p
21、= -nex ;? p-modify 1;?in det o lnklist(l n ist )? 删除链表 ,并释放链表空间?li klis p,;?p (l klist)ma oc(si e f( node);?i(! ) xi ();?=(li li t) al oc(si eo( ode);if( !q) exit(- );?=l xt;?while(p!=l)? q=p ne ;? fee();p= ;? ree(q);ret;/ / / / / / / / 对队列得一些操作in init uee( nkqueue &q)队列初始化q、f ont=q、rear=( u ueptr)m
22、allo(sz f(qnode); i(!、 r nt) it( 1); q.ron et nl;?retu ;i t enqe (l nkqueue q,n e) ?/插入元素 e 为 q 得新得队尾元素?ueueptr p;? (qe eptr)mallo ( eof(node); (!p) eit(-1);p dt=e;p-next nll;?q、r ar-n t=p;q、 e ;eturn1;int de ee(lnkquee &q,inte)?/若队列不空 ,则删除 q 得队头元素 ,用e 返回其值if(q 。front= .rear)reurn 1;queueptr p;? (qu
23、eueptr)al c(siz of(qnoe);=q、fr n next;e=-dta;q。 ront-next -next;if(q. a =p)?q、 earq。 front;?fee(p);?retun 1;bool sear hqueue(li kq eue q,nt e,int &i) / 寻找队列中结点at域等于 e 得结点 ,并用 i 返回其在 q 中得位置?i=1;if(q 。fro t=q.ear) e it(-1);ueeptr p;p=( euept)ml oc( ize (q ode); f(!p) ex (-1);p=q.fro -next;/指向队列得第一个节点(
24、非头结点 )whl (p!= u p-dt!=e)?p= next;+;if( !p)?eturnfa se;retur ue;int elid_qu e(l kque q,int & )/删除 q 得中间元素 ,并用 e 返回其值 (q、f o t=q.re ) retur 1; ?queuetr p;?p=(queuepr)malloc( izof( node); if(!p) xit(-1);p=q. ontne ; ?e=pnet-dat;?- t=pnetn xt;r urn ; nt d troyqeue(linkque &q)?/删除队列并释放空间whl (q、fro t)?q.
25、rea=q、 nt nex;?free(q、 f nt);?。 fro =q、 er;?rturn ;/ / / / / / / nt mx(int a,int b, int c)?/ 返回 a,b,c 中得最大值?if(a b) a=b;if(a ) a=c;eturna;intge um(int a,it b)? ?/用 b 返回元素 a 在被引用数列中得下一个位置?or(;bref_size;b +)?if(a= r fb)?br k;?retur b;vo oa()/ / 最佳置换算法? e cons l t xt ribut (ge tdha dl (st _ utput_ andl
26、e),f r ou d in e it foregro re); out n * * * * 最佳置换算法 * * * * * * endl;?etcosol tetat r ute(gts dhan le(std_ou t_hand e),foregrund_int nsty forgou din ensiy);/ 设置字体颜色为白色?int i,j;?it num_0,num_1,num_2,nm x;?int i r ptnu =0;/nu_0=um_1=num 2=0;?fr(i=0;i hy_size;i+)?/前三个数进内存?py f ;?for( =0;ip size;i+ )/
27、输出最初得三个数?cout phy ”t ”;?coutend;?for(j=ph i e;j f sze;j+)?setcon oet xtattr bute(getst a dle(std_upu _ha de),orgru d_i tensity foreg ond_ nsit );i (!(re j =phy 0 r fj=phy 1 ref =phy )?/若产生缺页中断 ,选择最久不会被使用得页被替换? ?nu 0=gen (h 0,j 1);? u _1=ge um(phy1,j1);?num2=etnum(hy2,j 1);nu max=max1(num0,num_1,nu _
28、2);?if(n m_ =um_max)? ? py0=ref j;? ?else? ?f(n m_1=nm_max)? ?phy refj ;?else?if(num_2=num_m x)? ?ph =refj ; ?interrupt_ um+;? setc nsole xtattri ute(getstdandl (std_ utput han e),freground i ensity | forero nd blue);/ 设置字体为蓝色? out进入页 :rf j edl; ? r(i=0;ip ize;i+) ?/输出内存状态? outphyi t ” ;? ?coutend e
29、ndl;? etcon o et xtatt ibut (gets handle(st _output_ andle),for round_intensity ?c t”最佳置换算法缺页中断次数| fo eg ou green);: int rup _num endl;? /以绿色字体输出中断次数inerru 0=(f at)interupt_nm/20、0)*100 。0;?/ / / / / / / / / / / / / / / / / / / / /vi nd()?/ 随机置换算法set on ole e tatt ibute(get tdhan le(st ou put_hand )
30、,fregound tensity forgroud_ );?cout * * * * * * 随机置换算法 * * * * * * ” endl; t onsoleex attribu (getstdhan le( td_out ut ha le), o und_intens y fore roun _i tensy);in i,j, mp;?int i terr _nm=0;/ um_0=num_1=n m_20;?sleep(1000);?rand(ime(null); ?/设置时间种子?or(i ; h_siz;+)? phyi=re i ;?fo(i=0;i ysi e; +)?co
31、ut i ”t;?ou en ;?for(j hysize;jref_sze;j+)? setcons letextatt ibute(ge stdhandl ( t _o put andl ),foreroun _int sity | foregr ud_intensi );?if( !(refj =hy0 | refj=p y1 | re j=p 2)?/ 产生缺页中断 ,随机选择页被替换? t p and()%3;?/cout tep n ;phytmp=ef ;? int rut n m+ ;? setco s t x at ribute( e stdhandle(std_outp t
32、 ndle), oreg u intens ty f eground_ u); ? cout进入页 :ref j endl; ?or(i= ;i p _size;i+)? ? t py t ”;? cotendl ndl;? et ons letexta rib te(ge stdhandle(std_output h d e),for run _inte siy foregroud_gre );?cot 随机置换算法缺页中断次数 : interut_nm n l;? / 以绿色字体输出中断次数?nte upt1 ( loat)interupt_ 20、 )*100 、 0;?/ / / /
33、/ / / / / / / / / oi fif ()?setco ole ex t ri u (getstdhandl (st outp t_ha dl ),foregrund intensit freround_red);?out n* * * * * * * 先进先出置换算法 * * * nd;se on oletex ttribute(g ts d andl (std_ utpu _handle), orer und_int nsit fo eround_inten it ); ink ueue l;?ue ptr p;in , ,e,m;int nter pt_num=;intq e
34、 ( );for(i ;i p y_size;i+ )en u u (l,r f i);? (ueue t)malloc(sizeof(qno );?p l、 fron nex;?fr( =0;p!=n l j p _size;j+)/ 前三个数进内存? cot t;?out end;? (i=phy_iz;i ef_ ize;i+)? setcons etextatt ib (ge st and e(st _output_ha dle),f r rou i tesity | f grou _intensity);? i(!sea hquu(l,r fi , )?/产生缺页中断 ,选择最先进入得页被替换?deque e(l,e); ? /cuteendl;? en eue(,re ); ? i rrupt_num+; c n le att bu e( ets dha dle(std_output h dle), egrou d_ tensity or
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026 年介入手术室护理质控风险防控汇报
- 生态环境部门环境安全隐患排查标准化检查表
- 一级建造师(机电工程管理与实务)试题及解析+考点知识预测(上海市)
- 校本研修组织实施题库(含答案)
- 微观经济学试卷及答案
- 企业生产安全事故应急处置培训考试试卷
- 2026土地登记代理人理论知识测试题(含答案)
- 2026年乡村振兴业务培训考试试卷及答案
- 2026年企业培训学习项目社会化运营培训考试题库(含答案)
- 2026年化工压力管道管理考试题库及答案
- 会议系统采购投标文件编写模板
- 2026年护士执业资格考试专业实务笔试及答案
- 《钢质海船入级规范》
- 地方政府债务风险的识别与管控机制
- 2025及未来5年中国塑料鼠板市场调查、数据监测研究报告
- GB/T 46166-2025洁净室用天然胶乳手套
- 智驭未来:AI工具辅助高效学习与科研(天津师范大学)学习通网课章节测试答案
- GJB1032A-2020 电子产品环境应力筛选方法
- 医学生物学染色体
- 晋江市基础教育提升三年行动方案(2023-2025年)
- 施工项目综合成本优化措施
评论
0/150
提交评论