ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:92.07KB ,
资源ID:11494948      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11494948.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(linux环境下几种内存调度算法模拟00.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

linux环境下几种内存调度算法模拟00.docx

1、linux环境下几种内存调度算法模拟00课程设计(大作业)报告课程名称: 操 作 系 统 设计题目:Linux环境下几种内存调度算法模拟 院 系: 信息技术学院 班 级:设 计 者: 学 号: 指导教师: 设计时间: 2011、12、202011、12、28 课程设计(大作业)报告一、两种算法的原理分析1 FIFO内存调度算法的原理 先进先出先出置换算法是最早出现的置换算法。该算法总是淘汰最先进入内存的页面,即选择内存中驻留时间最久的页面予以淘汰。(1)、在分配内存页面数(AP)大于进程页面数(PP)时,所有进程需要的页面(PP个页面)按提出要求的先后次序放入内存。(2)在分配内存页面数(AP

2、)大于进程页面数(PP)时,当然是按提出请求的次序将最先的AP个页面放入内存。(3)这时有需要处理新的页面,则将原在内存中的AP个页面中最先进入的调出(称为FIFO)然后放入新页面。(4)以后如果有新页面需要调入,按(3)的规则进行。该算法的实现方式为:把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指向最老页面的替换指针。但是该算法是基于CPU按线性顺序访问地址空间的假设上的。算法实现提示如下:要得到“命中率”,必然应该有一个常量total-instruction记录页面总共使用次数;此外,需要一个变量记录总共换入页面的次数(需要换出页面,总是因为没有命中而产生的)disef

3、fect。利用公式1-*100%可以得到命中率。1) 初始化。设置两个数组pagePP和pagecontrolAP分别表示进程页面数和内存分配页面数,并产生一个随机数序列maintotal-instruction(当然这个序列有page的下标随机构成),表示待处理的进程页面顺序,diseffect置零。2) 看main中是否有下一个元素,有,就由main中获取该页面下标,并转到3);没有,就转到7)。3) 如果该page页已在内存中,就转到2);否则转到4),同时未命中的diseffect加1.4) 观察pagecontrol是否占满,如果占满需将使用队列(6)中建立的)中最先进入的(就是队列

4、第一单元)pagecontrol单元“清干净”,同时将对应的page单元置为“不在内存中”。5) 将该page与pagecontrol建立关系(可以改变pagecontrol的标示位,也可以采用指针连接,总之至少要使对应的pagecontrol单元包含两个信息:一个它被使用了,二是那个page单元使用的。Page单元包含两个信息:对应的pagecontrol单元号、本page单元已在内存中)。6) 将用到的pagecontrol置入使用队列(这里的队列当然是一种先进先出的数据结构了,而不是泛指),返回2)。7) 显示公式1-*100%完成。算法特点:所使用的内存页面构成一个队列。 2 (其他任

5、选一个算法)OPT内存调度算法的原理前提是在分配的内存页面占满的情况下。最佳置换法是一种理想状况下的算法,它要求遍历所有的CPU待处理的进程页面序列(实际上由于待处理的页面有时取决于先前处理的页面,所以,很多情况下不可能得到完整的待处理页面序列。在这个层面上,才说该算法是理想的),在这些页面中,如果有已经在内存中,而CPU不再处理的,就将其换出。当要调入一新页而必须淘汰一旧页时,所淘汰的页是以后不再使用的,或者是以后相当长的时间内不会使用的。这种算法是不可能的。算法实现提示如下: 1)初始化。设置两个数组pagePP和pagecontrolAP分别表示进程页面数和内存分配的页面数,并产生一个随

6、机数序列maintotal_instruction(当然这个序列由page的下标随机构成),表示待处理的进程页面顺序,diseffect置零。2)看main中是否有下一个元素,有,就从序列main中获取一个CPU待处理的页面号;没有,转到6)。3)如果该页面已经在内存中了,就转到2),否则转到4)。4)看是否有空闲的内存页面,如果有就直接返回该页面指针;如果没有,遍历所有未处理的进程页面序列,如果有位于内存中的页面,而CPU以后不再处理的,首先将其换出,返回页面指针;如果没有这样的页面,找寻到CPU最晚处理到的页面,将其换出,返回该内存页面指针。5)将内存页面和待处理的进程页面建立联系,返回2

7、)。6)输出1 - total_instruction/diseffcet * 100%,结束。二、两种算法的流程图表示1 FIFO算法的流程图2 (其他任选一个算法)OPT内存调度算法的流程图三、两种算法的实现代码1 FIFO内存调度算法的代码#define TRUE 1#define FLASE 0#define INVALID -1#define NULL 0#define total_instruction 320 #define total_vp 32 #define clear_period 50 typedef struct int pn,pfn,counter,time;pl_

8、type;pl_type pltotal_vp; struct pfc_struct int pn,pfn; struct pfc_struct * next;typedef struct pfc_struct pfc_type;pfc_type pfctotal_vp,* freepf_head,* busypf_head,* busypf_tail;int diseffect,atotal_instruction;int pagetotal_instruction,offsettotal_instruction;int initialize(int);int FIFO(int);int m

9、ain()int s,i,j;srand(10 *getpid(); s=(float)319 * rand()/32767/32767/2+1;for(i=0;itotal_instruction;i+=4) if(s319)printf(when i=%d,Error,s=%dn,i,s);exit(0); ai=s; ai+1=ai+1; ai+2=(float)ai * rand()/32767/32767/2; ai+3= ai+2+1; s=(float)(318- ai+2) * rand()/32767/32767/2+ai+2+2;if(ai+2318)|(s319) pri

10、ntf(a%d+2,a number which is: %d and s=%dn,i,ai+2,s);for(i=0;itotal_instruction;i+) pagei=ai/10; offseti=ai%10;for(i=4;i32;i+) printf(-%2d page frames-n,i); FIFO(i); return 0;int initialize(total_pf) int total_pf; int i; diseffect = 0; for(i=0;itotal_vp;i+) pli.pn=i; pli.pfn=INVALID; pli.counter=0; p

11、li.time=-1; for(i=0;itotal_pf-1;i+) pfci.next=&pfci+1; pfci.pfn=i;pfctotal_pf-1.next=NULL;pfctotal_pf-1.pfn=total_pf-1;freepf_head=&pfc0; return 0;int FIFO(total_pf) int total_pf; int i,j;pfc_type * p;initialize(total_pf); busypf_head=busypf_tail=NULL; for(i=0;inext; plbusypf_head-pn.pfn=INVALID; fr

12、eepf_head=busypf_head; freepf_head-next=NULL; busypf_head=p; p=freepf_head-next; freepf_head-next=NULL; freepf_head-pn=pagei; plpagei.pfn=freepf_head-pfn;if(busypf_tail=NULL) busypf_head=busypf_tail=freepf_head;else busypf_tail-next=freepf_head; busypf_tail=freepf_head; freepf_head=p;printf(FIFO:%6.

13、4fn,1-(float)diseffect/320);return 0;2 (其他任选一个算法)OPT内存调度算法的代码#define TRUE 1#define FLASE 0#define INVALID -1#define NULL 0#define total_instruction 320 #define total_vp 32 #define clear_period 50 typedef struct int pn,pfn,counter,time;pl_type;pl_type pltotal_vp; struct pfc_struct int pn,pfn; struct

14、pfc_struct * next;typedef struct pfc_struct pfc_type;pfc_type pfctotal_vp,* freepf_head,* busypf_head,* busypf_tail;int diseffect,atotal_instruction;int pagetotal_instruction,offsettotal_instruction;int initialize(int);int OPT(int);int main()int s,i,j;srand(10 *getpid(); s=(float)319 * rand()/32767/

15、32767/2+1;for(i=0;itotal_instruction;i+=4) if(s319)printf(when i=%d,Error,s=%dn,i,s);exit(0); ai=s; ai+1=ai+1; ai+2=(float)ai * rand()/32767/32767/2; ai+3= ai+2+1; s=(float)(318- ai+2) * rand()/32767/32767/2+ai+2+2;if(ai+2318)|(s319) printf(a%d+2,a number which is: %d and s=%dn,i,ai+2,s);for(i=0;ito

16、tal_instruction;i+) pagei=ai/10; offseti=ai%10;for(i=4;i32;i+) printf(-%2d page frames-n,i); OPT(i); return 0;int initialize(total_pf) int total_pf; int i; diseffect = 0; for(i=0;itotal_vp;i+) pli.pn=i; pli.pfn=INVALID; pli.counter=0; pli.time=-1; for(i=0;itotal_pf-1;i+) pfci.next=&pfci+1; pfci.pfn=

17、i;pfctotal_pf-1.next=NULL;pfctotal_pf-1.pfn=total_pf-1;freepf_head=&pfc0; return 0;int OPT(total_pf)int total_pf; int i,j,max,maxpage,d,disttotal_vp; pfc_type *t; initialize(total_pf); for(i=0;itotal_instruction;i+) /printf(In OPT for 1,i=%dn,i); if(plpagei.pfn=INVALID) diseffect+; if(freepf_head=NU

18、LL) for(j=0;jtotal_vp;j+) if(plj.pfn!=INVALID) distj=32767; else distj=0; d=1; for(j=i+1;jtotal_instruction;j+) if(plpagej.pfn!=INVALID) distpagej=d; d+; max=-1; for(j=0;jtotal_vp;j+) if(maxnext=NULL; plmaxpage.pfn=INVALID; plpagei.pfn=freepf_head-pfn; freepf_head=freepf_head-next; printf(OPT:%6.4fn

19、,1-(float)diseffect/320); return 0;四、结果分析一、 结果分析1. 分析设计结果是否达到预期目标1)在实现OPT算法时,要将栈中指定的元素移到栈顶,但是一开始这个方法在运行到一定的页面序列后会出现索引越界的异常,通过与同学一晚上的讨论,最后修改了一下算法,从而算法能够准确的实现。2)在计算缺页率时,由于访问页面次数不是固定的,得到的缺页率可能是一个无限循环的小数,因此经过在网上查找相关资料后用,用一个方法即可只输出小数点后两位。4)在增加了手动输入索引号后,要再次使用算法时会出现异常,经过加入异常捕获后,就可以循环输入索引号并使用算法了。1)FIFO运行结果:

20、2)OPT运行结果:2. 针对同一访问序列比较两种算法的命中率 由运行结果得出,该分析设计达到了预期的目标,计算出了FIFO和OPT两种算法的页帧及其命中率。这两种算法的命中率大致在60%80%左右,OPT算法比FIFO算法的命中率略高。五、实验总结及心得体会实验总结:在本次设计中,首先,对于FIFO和OPT两种内存调度算法的原理和实现方式有了更好的了解。其次,通过对两种内存调度算法的模拟实现,对比运行结果发现对于同一访问序列,OPT算法的命中率比FIFO算法更高。再次通过在linux中调试和运行程序,对linux中的使用有了更深的记忆,尤其是在linux中实现文件的共享这一功能,实现这一功能

21、就不用每次都在Vi中重复输入代码,减少了工作量。另外在画流程图时,一定要读懂源代码,才能正确的画出。通过本次课程设计,我对以前学过的一些知识有了更深的记忆和理解,特别是对linux中的各种命令的使用更加熟练,也学到了很多新的有用的知识。心得体会:在设计过程中由于粗心大意经常因为单词拼写错误,或者是字母的大小写还有程序的格式出错都会使得程序无法调试通过,我在最后输出结果时由于输出函数的输出表述错误使得程序运行后输出的结果错误。告诉我在做任何是的时候都应该认真严谨。此外在平日的学习过程中我们要注意细节,在注重基础知识的学习的同时,还应不断的提高自己的操作能力,另外还要学会对所学的知识学于致用,因为这是社会对我们专业的基本要求。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1