版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上第3章 与存储管理有关的操作系统算法实践作业(占课程整体分数5%)参照“强化实践能力培养课程内容”中“内存页面置换算法实践能力培养考核选例”程序,编写一个能演示LRU内存页面置换算法的程序,它可根据给定的一组页面引用序列号和实存页数,显示LRU置换页的过程,能统计和报告LRU置换算法情况下依次淘汰的页号、缺页次数(页错误数)和缺页率。参考运行结果:#include"stdio.h"#include"stdlib.h"void CopyL(intSour,int Dist ,int x); /数组Sour复制到数组Dist,复制到
2、x个数void SetDI(intDiscL); /随机生成磁道数 void Print(intPri,int x); /打印输出数组Privoid DelInq(int Sour,intx,int y); /数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现2个y) void FCFS(int Han,intDiscL); /先来先服务算法(FCFS)void SSTF(int Han,intDiscL); /最短寻道时间优先算法(SSTF)int SCAN(int Han,intDiscL
3、,int x,int y); /扫描算法(SCAN)void CSCAN(int Han,intDiscL); /循环扫描算法(CSCAN)/void N_Step_SCAN(intHan1,int DiscL); /N步扫描算法(NStepScan)void PaiXu(); /寻道长度由低到高排序void Pri();int NAll=0;int Best52; /用作寻道长度由低到高排序时存放的数组 int Limit=0; /输入寻找的范围磁道数iint Jage;float Aver=0; int main() in
4、t i; int DiscLine10; /声明准备要生成的随机磁道号的数组 int Hand; /磁道数 int Con=1; int n; while(Con=1) Jage=0; printf("n 请输入初始的磁道数(0<n<65536):"); scanf("%d",&Hand); printf("n+ 输入寻找的范围:");&
5、#160; scanf("%d",&Limit); if(Limit>65536) printf("超出范围!"); elseprintf(" *n");printf(" *磁盘调度算法 *n"); printf(" *n"); printf("*
6、 1.先来先服务算法(FCFS) *n"); printf(" * 2.最短寻道时间优先算法(SSTF
7、) *n"); printf(" * 3.扫描算法(SCAN)
8、160; *n"); printf(" * 4.循环扫描算法(CSCAN)
9、160;*n"); printf(" *n"); scanf("%d",&n); if(n=0) exit(0); printf("n"); switch(n) case 1: SetDI(DiscLine); /随机生成磁道数 FCFS(Hand,DiscLine); /先来先服务算法(FCFS) break; case 2: SetDI
10、(DiscLine); /随机生成磁道数 SSTF(Hand,DiscLine); /最短寻道时间优先算法(SSTF) break; case 3: SetDI(DiscLine); /随机生成磁道数 SCAN(Hand,DiscLine,0,9); /扫描算法(SCAN) break; case 4: SetDI(DiscLine); /随机生成磁道数 CSCAN(Han
11、d,DiscLine); /循环扫描算法(CSCAN) break; case 5: SetDI(DiscLine); /随机生成磁道数 SetDI(DiscLine); /随机生成磁道数 FCFS(Hand,DiscLine); /先来先服务算法(FCFS) SSTF(Hand,DiscLine); /最短寻道时间优先算法(SSTF) SCAN(Hand,DiscLine,0,
12、9); /扫描算法(SCAN) CSCAN(Hand,DiscLine); /循环扫描算法(CSCAN) PaiXu(); /寻道长度由低到高排序 printf("nn+ 寻道长度由低到高排序:"); for(i=0;i<5;i+) printf("%4d ",Besti0); break; printf("nn+ 是否继续(按0结束,按1继续)?");
13、0; scanf("%5d",&Con); /数组Sour复制到数组Dist,复制到x个数void CopyL(intSour,int Dist ,int x) int i; for(i=0;i<=x;i+) Disti=Souri; /打印输出数组Privoid Print(intPri,int x) int i; for(i=0;i<=x;i+) printf("%5d",Prii);
14、 /随机生成磁道数void SetDI(intDiscL) int i; for(i=0;i<=9;i+) DiscLi=rand()%Limit;/随机生成10个磁道号 printf("+ 需要寻找的磁道号:"); Print(DiscL,9); /输出随机生成的磁道号 printf("n");/数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现2个y) void DelInq(int
15、Sour,int x,int y) int i; for(i=x;i<y;i+) Souri=Souri+1; x+; /先来先服务算法(FCFS)void FCFS(int Han,intDiscL) int RLine10; /将随机生成的磁道数数组Discl复制给数组RLine int i,k,All,Temp; /Temp是计算移动的磁道距离的临时变量 All=0; /统计全部的磁道数变量 k=9; /限定10个的磁道数
16、;CopyL(DiscL,RLine,9); /复制磁道号到临时数组RLine printf("n+ 按照FCFS算法磁道的访问顺序为:"); All=Han-RLine0; for(i=0;i<=9;i+) Temp=RLine0-RLine1;/求出移动磁道数,前一个磁道数减去后一个磁道数得出临时的移动距离 if(Temp<0) Temp=(-Temp);/移动磁道数为负数时,算出相反数作为移动磁道数 printf(&
17、quot;%5d",RLine0); All=Temp+All;/求全部磁道数的总和 DelInq(RLine,0,k);/每个磁道数向前移动一位 k-; BestJage1=All;/Best1存放移动磁道数 BestJage0=1; /Best0存放算法的序号为:1 Jage+;/排序的序号加1 Aver=(float) All)/10;/求平均寻道次数 printf("n+ 移动磁道数:<%5d> ",All); printf(&q
18、uot;n+ 平均寻道长度:*%0.2f* ",Aver);/最短寻道时间优先算法(SSTF)void SSTF(int Han,intDiscL) int i,j,k,h,All; int Temp; /Temp是计算移动的磁道距离的临时变量 int RLine10; /将随机生成的磁道数数组Discl复制给数组RLine int Min; All=0; /统计全部的磁道数变量 k=9; /限定10个的磁道数 CopyL(DiscL,RLine,9);
19、60; /复制磁道号到临时数组RLine printf("n+ 按照SSTF算法磁道的访问顺序为:"); for(i=0;i<=9;i+) Min=64000; for(j=0;j<=k;j+) /内循环寻找与当前磁道号最短寻道的时间的磁道号 if(RLinej>Han) /如果第一个随机生成的磁道号大于当前的磁道号,执行下一句 &
20、#160; Temp=RLinej-Han; /求出临时的移动距离 else Temp=Han-RLinej; /求出临时的移动距离 if(Temp<Min) /如果每求出一次的移动距离小于Min,执行下一句 Min=Temp; /Temp临时值赋予Min h=j; /把最近当前磁道号的数组下标赋予h
21、All=All+Min; /统计一共移动的距离 printf("%5d",RLineh); Han=RLineh; DelInq(RLine,h,k); /每个磁道数向前移动一位 k-; BestJage1=All;/Best1存放移动磁道数 BestJage0=2;/Best0存放算法的序号为:2 Jage+;/排序序号加1 Aver=(float)All)/10;/求平均寻道次数 printf("n+ 移动磁道数:
22、<%5d> ",All); printf("n+ 平均寻道长度:*%0.2f* ",Aver);/扫描算法(SCAN)int SCAN(int Han,intDiscL,int x,int y) int j,n,k,h,m,All; int t=0; int Temp; int Min; int RLine10; /将随机生成的磁道数数组Discl复制给数组RLine int Order; Order=1; k=y; m=2;
23、 /控制while语句的执行,即是一定要使当前磁道向内向外都要扫描到 All=0; /统计全部的磁道数变量 CopyL(DiscL,RLine,9); /复制磁道号到临时数组RLine printf("n+ 按照SCAN算法磁道的访问顺序为:"); Min=64000; for(j=x;j<=y;j+) /寻找与当前磁道号最短寻道的时间的磁道号 if(RLinej>Han) /如果第一个随机生成的磁道号大于
24、当前的磁道号,执行下一句 Temp=RLinej-Han; /求出临时的移动距离 else Temp=Han-RLinej; /求出临时的移动距离 if(Temp<Min) Min=Temp; /Temp临时值赋予Min h=j; /把最近当前磁道号的数组下标赋予h All=All+Min; printf("
25、%5d",RLineh); if(RLineh>=Han) /判断磁道的移动方向,即是由里向外还是由外向里 Order=0; t=1; Han=RLineh; DelInq(RLine,h,k); /每个磁道数向前移动一位 k-; while(m>0) if(Order=1) /order是判断磁盘扫描的方向标签,order是1的话,磁道向内移动 for(j=x;j<=y;j
26、+) h=-1; Min=64000; for(n=x;n<=k;n+) /判断离当前磁道最近的磁道号 if(RLinen<=Han) Temp=Han-RLinen; &
27、#160; if(Temp<Min) Min=Temp; /Temp临时值赋予Min h=n; /把最近当前磁道号的数组下标赋予h
28、0; if(h!=-1) All=All+Min; /叠加移动距离 printf("%5d",RLineh); Han=RLineh; /最近的磁道号作为当前磁道 DelInq
29、(RLine,h,k); k-; Order=0; /当完成向内的移动,order赋予0,执行else语句,使磁道向外移动 m-; /向内完成一次,m减一次,保证while循环执行两次 else /order是0的话,磁道向外移动 for(j=x;j<=y;j+) &
30、#160; h=-1; Min=64000; for(n=x;n<=k;n+) /判断离当前磁道最近的磁道号 if(RLinen>=Han) Temp=RLinen-Han; &
31、#160; if(Temp<Min) Min=Temp; /Temp临时值赋予Min h=n; /把最近当前磁道号的数组下标赋予h
32、60; if(h!=-1) All=All+Min; /叠加移动距离 printf("%5d",RLineh); Han=RLineh; /最近的磁道号作为当前磁道 DelIn
33、q(RLine,h,k); k-; Order=1; /当完成向内的移动,order赋予0,执行else语句,使磁道向外移动 m-; /向内完成一次,m减一次,保证while循环执行两次 NAll=NAll+All; if(y-x)>5) BestJage1=All;/Best1存放移动磁道数
34、 BestJage0=3;/Best0存放算法的序号为:3 Jage+;/排序序号加1 Aver=(float)All)/10;/求平均寻道次数 printf("n+ 移动磁道数:<%5d> ",All); printf("n+ 平均寻道长度:*%0.2f* ",Aver); if(t=1) printf("n+ 磁道由内向外移动"); else printf("n+ 磁道由外向内移动");
35、;return(Han);/循环扫描算法(CSCAN)void CSCAN(int Han,intDiscL) int j,h,n,Temp,m,k,All,Last,i; int RLine10; /将随机生成的磁道数数组Discl复制给数组RLine int Min; int tmp=0; m=2; k=9; All=0; /统计全部的磁道数变量 Last=Han; CopyL(DiscL,RLine,9); /复制磁道号到临时数组RLine&
36、#160; printf("n+ 按照CSCAN算法磁道的访问顺序为:"); while(k>=0) for(j=0;j<=9;j+) /从当前磁道号开始,由内向外搜索离当前磁道最近的磁道号 h=-1; Min=64000; for(n=0;n<=k;n+) if(RLinen>=Han)
37、; Temp=RLinen-Han; if(Temp<Min) Min=Temp; h=n; if(h!=-1)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 腹痛护理指南
- 血压测量在慢性病管理中的角色
- 初中生环保知识普及说课稿
- 上海工商职业技术学院《安装工程施工技术》2025-2026学年第一学期期末试卷(A卷)
- 高中低年级文学赏析方法说课稿
- 上海工商职业技术学院《Android 开发基础》2025-2026学年第一学期期末试卷(A卷)
- 胃肠减压护理中患者沟通技巧
- 2026年说课稿《落花生》
- 上饶卫生健康职业学院《ASP.NET网站开发设计》2025-2026学年第一学期期末试卷(B卷)
- 上海音乐学院《安装工程估价》2025-2026学年第一学期期末试卷(A卷)
- GB/T 5780-2025紧固件六角头螺栓C级
- 2025年中国休闲农业与乡村旅游研究报告
- 特殊作业审批人培训课件
- 2025广东东莞市谢岗镇招聘编外聘用人员23人参考题库及答案详解(典优)
- 测绘工程毕业设计答辩汇报
- 2025年贵州省高考生物试卷(含答案与解析)
- GB/T 33658-2025室内人体热舒适环境要求与评价方法
- 塔吊运输专项施工方案
- 纺织厂消防应急预案
- 【《基于S7-1200 PLC的风力发电机变桨距复合控制系统设计》8400字(论文)】
- 常州大学c语言考试题及答案
评论
0/150
提交评论