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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(操作系统概论作业第三章.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统概论作业第三章.docx

1、操作系统概论作业第三章第3章 与存储管理有关的操作系统算法实践作业#includestdio.h#includestdlib.hvoid CopyL(intSour,int Dist ,int x); /数组Sour复制到数组Dist,复制到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); /先

2、来先服务算法(FCFS)void SSTF(int Han,intDiscL); /最短寻道时间优先算法(SSTF)int SCAN(int Han,intDiscL,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;

3、/输入寻找的范围磁道数iint Jage;float Aver=0;int main()int i;int DiscLine10; /声明准备要生成的随机磁道号的数组int Hand;/磁道数int Con=1;int n;while(Con=1) Jage=0; printf(n 请输入初始的磁道数(0n65536) printf(超出范围!); elseprintf( *n);printf( *磁盘调度算法 *n); printf(*n); printf(* 1.先来先服务算法(FCFS) *n); printf( *2.最短寻道时间优先算法(SSTF) *n); printf( *3.扫

4、描算法(SCAN)*n); printf( *4.循环扫描算法(CSCAN) *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(DiscLine); /随机生成磁道数 SSTF(Hand,DiscLine); /最短寻道时间优先算法(SSTF) break;case 3: SetDI(DiscLine); /随机生成磁道数 SCAN(Ha

5、nd,DiscLine,0,9); /扫描算法(SCAN) break;case 4: SetDI(DiscLine); /随机生成磁道数 CSCAN(Hand,DiscLine); /循环扫描算法(CSCAN) break;case 5: SetDI(DiscLine); /随机生成磁道数 SetDI(DiscLine); /随机生成磁道数 FCFS(Hand,DiscLine); /先来先服务算法(FCFS) SSTF(Hand,DiscLine); /最短寻道时间优先算法(SSTF) SCAN(Hand,DiscLine,0,9); /扫描算法(SCAN) CSCAN(Hand,Disc

6、Line); /循环扫描算法(CSCAN) PaiXu();/寻道长度由低到高排序 printf(nn+ 寻道长度由低到高排序:); for(i=0;i5;i+) printf(%4d ,Besti0); break; printf(nn+ 是否继续(按0结束,按1继续)?); 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

7、;i+) printf(%5d,Prii);/随机生成磁道数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(intSour,int x,int y)int i;for(i=x;iy;i+) Souri=Souri+1; x+;/先来先服务算法(FCFS)void FCFS(

8、int Han,intDiscL)int RLine10;/将随机生成的磁道数数组Discl复制给数组RLineint i,k,All,Temp; /Temp是计算移动的磁道距离的临时变量All=0;/统计全部的磁道数变量k=9; /限定10个的磁道数CopyL(DiscL,RLine,9); /复制磁道号到临时数组RLine printf(n+ 按照FCFS算法磁道的访问顺序为:);All=Han-RLine0;for(i=0;i=9;i+) Temp=RLine0-RLine1;/求出移动磁道数,前一个磁道数减去后一个磁道数得出临时的移动距离 if(Temp0) Temp=(-Temp);

9、/移动磁道数为负数时,算出相反数作为移动磁道数 printf(%5d,RLine0); All=Temp+All;/求全部磁道数的总和 DelInq(RLine,0,k);/每个磁道数向前移动一位 k-;BestJage1=All;/Best1存放移动磁道数BestJage0=1; /Best0存放算法的序号为:1Jage+;/排序的序号加1Aver=(float) All)/10;/求平均寻道次数printf(n+ 移动磁道数: ,All);printf(n+ 平均寻道长度:*%0.2f* ,Aver);/最短寻道时间优先算法(SSTF)void SSTF(int Han,intDiscL)

10、int i,j,k,h,All;int Temp;/Temp是计算移动的磁道距离的临时变量int RLine10; /将随机生成的磁道数数组Discl复制给数组RLineint Min;All=0;/统计全部的磁道数变量k=9; /限定10个的磁道数CopyL(DiscL,RLine,9); /复制磁道号到临时数组RLine printf(n+ 按照SSTF算法磁道的访问顺序为:);for(i=0;i=9;i+) Min=64000; for(j=0;jHan) /如果第一个随机生成的磁道号大于当前的磁道号,执行下一句 Temp=RLinej-Han; /求出临时的移动距离 else Temp

11、=Han-RLinej; /求出临时的移动距离 if(TempMin) /如果每求出一次的移动距离小于Min,执行下一句 Min=Temp;/Temp临时值赋予Min h=j;/把最近当前磁道号的数组下标赋予h All=All+Min;/统计一共移动的距离 printf(%5d,RLineh); Han=RLineh; DelInq(RLine,h,k); /每个磁道数向前移动一位 k-;BestJage1=All;/Best1存放移动磁道数BestJage0=2;/Best0存放算法的序号为:2Jage+;/排序序号加1Aver=(float)All)/10;/求平均寻道次数printf(n

12、+ 移动磁道数: ,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复制给数组RLineint Order;Order=1;k=y;m=2; /控制while语句的执行,即是一定要使当前磁道向内向外都要扫描到All=0;/统计全部的磁道数变量CopyL(DiscL,RLine,9); /复制磁道号到临时数组RLine prin

13、tf(n+ 按照SCAN算法磁道的访问顺序为:);Min=64000;for(j=x;jHan) /如果第一个随机生成的磁道号大于当前的磁道号,执行下一句 Temp=RLinej-Han; /求出临时的移动距离 else Temp=Han-RLinej; /求出临时的移动距离 if(Temp=Han) /判断磁道的移动方向,即是由里向外还是由外向里 Order=0; t=1;Han=RLineh;DelInq(RLine,h,k); /每个磁道数向前移动一位k-;while(m0) if(Order=1)/order是判断磁盘扫描的方向标签,order是1的话,磁道向内移动 for(j=x;j

14、=y;j+) h=-1; Min=64000; for(n=x;n=k;n+) /判断离当前磁道最近的磁道号 if(RLinen=Han) Temp=Han-RLinen; if(TempMin) Min=Temp; /Temp临时值赋予Min h=n; /把最近当前磁道号的数组下标赋予h if(h!=-1) All=All+Min; /叠加移动距离 printf(%5d,RLineh); Han=RLineh; /最近的磁道号作为当前磁道 DelInq(RLine,h,k); k-; Order=0;/当完成向内的移动,order赋予0,执行else语句,使磁道向外移动 m-;/向内完成一次

15、,m减一次,保证while循环执行两次 else/order是0的话,磁道向外移动 for(j=x;j=y;j+) h=-1; Min=64000; for(n=x;n=Han) Temp=RLinen-Han; if(Temp5) BestJage1=All;/Best1存放移动磁道数BestJage0=3;/Best0存放算法的序号为:3 Jage+;/排序序号加1 Aver=(float)All)/10;/求平均寻道次数 printf(n+ 移动磁道数: ,All); printf(n+ 平均寻道长度:*%0.2f* ,Aver);if(t=1) printf(n+ 磁道由内向外移动);

16、else printf(n+ 磁道由外向内移动);return(Han);/循环扫描算法(CSCAN)void CSCAN(int Han,intDiscL)int j,h,n,Temp,m,k,All,Last,i;int RLine10;/将随机生成的磁道数数组Discl复制给数组RLineint Min;int tmp=0;m=2;k=9;All=0;/统计全部的磁道数变量Last=Han;CopyL(DiscL,RLine,9); /复制磁道号到临时数组RLine printf(n+ 按照CSCAN算法磁道的访问顺序为:);while(k=0) for(j=0;j=9;j+) /从当前

17、磁道号开始,由内向外搜索离当前磁道最近的磁道号 h=-1; Min=64000; for(n=0;n=Han) Temp=RLinen-Han; if(Temp=0) tmp=RLine0; for(i=0;iRLinei) tmp=RLinei; Han=tmp;/把最小的磁道号赋给Han Temp=Last-tmp;/求出最大磁道号和最小磁道号的距离差 All=All+Temp; BestJage1=All;/Best1存放移动磁道数BestJage0=4;/Best0存放算法的序号为:4Jage+;/排序序号加1Aver=(float)All)/10;/求平均寻道次数printf(n+ 移动磁道数: ,All);printf(n+ 平均寻道长度:*%0.2f* ,Aver);void PaiXu()int i,j,Temp;for(i=0;i5;i+) for(j=0;jBestj+11) /如果前一个算法的移动磁道距离大于后一个移动磁道数,执行下面语句 Temp=Bestj+11; /从这起下三行执行冒泡法将移动距离大小排序,排完后则执行每个算法的排序 Bestj+11=Bestj1; Bestj1=Temp; Temp=Bestj+10; /将每个算法的序号用冒泡法排序 Bestj+10=Bestj0;Bestj0=Temp;

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

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