磁盘调度算法的实现

上传人:枫** 文档编号:506476986 上传时间:2024-01-27 格式:DOCX 页数:13 大小:53.54KB
返回 下载 相关 举报
磁盘调度算法的实现_第1页
第1页 / 共13页
磁盘调度算法的实现_第2页
第2页 / 共13页
磁盘调度算法的实现_第3页
第3页 / 共13页
磁盘调度算法的实现_第4页
第4页 / 共13页
磁盘调度算法的实现_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《磁盘调度算法的实现》由会员分享,可在线阅读,更多相关《磁盘调度算法的实现(13页珍藏版)》请在金锄头文库上搜索。

1、操作系统一磁盘调度算法实验报告姓 名:范学升学 号:1001050903班级:电科10-1班专业:电子信息科学与技术一、实验目的:通过模拟设计磁盘驱动调度程序,观察驱动调度程序的动态运行过程,理解和掌握磁盘驱动调度的职能,并比较各种算法的调度结果。二、实验内容:要求设计主界面能灵活选择某算法,且实现以下算法:(1) 先来先服务算法(FCFS)(2) 最短寻道时间优先算法(SSTF)(3) 扫描算法(SCAN)(4) 循环扫描算法(CSCAN)三、实验步骤详细设计:源代码#include#includeusing namespace std;void FCFS(int a,int n);void

2、 SSTF(int a,int n);void SCAN(int a,int n);void CSCAN(int a,int n);int main()int n;/磁道的个数int s;/功能号cout请输入磁道的个数:n;int *a=new intn;cout生成随机磁道号.endl;srand(unsigned)time(NULL);for(int i=0;in;i+)ai = (rand()%100)+1;coutai;coutendl;while(1) coutendl;cout”1、先来先服务算法(FCFS) endl;cout2、最短寻道时间算法(SSTF) endl;cout

3、3、扫描算法(SCAN) endl;cout”4、循环扫描算法(CSCAN) endl;cout0、退出endl;coutendl;couts;if(s4)cout输入有误! endl;elseswitch(s) case 0: exit(0);break ;case 1:FCFS(a,n); break;case 2:SSTF(a, n);break;case 3:SCAN(a, n);break;case 4:CSCAN(a,n);break;return 0;/先来先服务调度算法(FCFS)void FCFS(int a,int n)int sum=0,j,i,first=0,now;c

4、outnow;/确定当前磁头所在位置cout磁盘调度顺序为:endl;for( i=0;in;i+)/按访问顺序输出磁道号coutai;/计算sumfor(i=0,j=1;jn;i+,j+)first+=abs(aj-ai);/外围磁道与最里面磁道的距离sum+=first+abs(now-a0);coutendl;cout移动的总磁道数:sumendl;最短寻道时间算法(SSTF)void SSTF(int a,int n)int temp;int k=1;int now,l,r;int i,j,sum=0;/将磁道号按递增排序for(i=0;in;i+)for(j=i+1;jaj)temp

5、=ai;ai=aj;aj=temp;cout按递增顺序排好的磁道:endl;for( i=0;in;i+)coutai ;/输出排好的磁道顺序coutendl;coutnow;/确定当前磁头所在位置cout磁盘调度顺序为:endl;if(an-1=0;i)coutai=now)/当前磁头位置小于最里欲访问磁道for(i=0;in;i+)coutai;sum=an-1-now;elsewhile(ak=0)&(rn)if(now-al)=(ar-now)/选择离磁头近的磁道coutal;sum+=now-al;now=al;l=l-1;elsecoutar;sum+=ar-now;now=ar;

6、r=r+1;if(l=-1)/磁头位置里侧的磁道已访问完for(j=r;jn;j+)/访问磁头位置外侧的磁道coutaj-1;j-) 访问磁头位置里侧的磁道coutaj;sum+=an-1-a0;coutendl;cout移动的总道数:sumendl;扫描算法(SCAN)void SCAN(int a,int n)int temp;int k=1;int now,l,r;int i,j,sum=0;for(i=0;in;i+)/对访问磁道按由小到大顺序排列输出for(j=i+1;jaj)temp=ai;ai=aj;aj=temp;cout按递增顺序排好的磁道:endl;for( i=0;in;

7、i+)coutai;coutendl;coutnow;/以下算法确定磁道访问顺序if(an-1=0;i) coutai=now) /磁头位置小于最里欲访问磁道for(i=0;in;i+)coutai;sum=an-1-now;else/磁头位置在最里侧磁道与最外侧磁道之间 int d;while(aknow)确定当前磁道在已排的序列中的位置k+;l=k-1;/在磁头位置的前一个欲访问磁道r=k;/磁头欲访问磁道coutd;/确定磁头访问的方向cout=0;j-)coutaj;for(j=r;jn;j+)coutaj;sum=now-2*a0+an-1;if(d=1)/磁头向外for(j=r;j

8、n;j+)coutaj=0;j-)coutaj;sum=2*an-1-now-a0;elsecout请输入 0 或 1! endl;coutendl;cout移动的总道数:sumendl;循环扫描算法(CSCAN)void CSCAN(int a,int n)int temp;int now,l,r;int i,j,sum=0;int k=1;for(i=0;in;i+)/对访问磁道按由小到大顺序排列输出for(j=i+1;jaj)temp=ai;ai=aj;aj=temp;cout按递增顺序排好的磁道:endl;for( i=0;in;i+)coutai;coutendl;coutnow;/

9、确定当前磁道号 if(an-1=now)/磁头位置大于最外围欲访问磁道 for(i=0;in;i+)coutai=now)/磁头位置小于最里欲访问磁道for(i=0;in;i+)coutai;sum=an-1-now;else /磁头位置在最里侧磁道与最外侧磁道之间 int d;while(aknow)k+;l=k-1;/在磁头位置的前一个欲访问磁道r=k;/磁头欲访问磁道coutd;/确定磁头访问的方向cout磁盘调度顺序为:;if(d=0|d=1)if(d=1)/磁头向外侧访问for(j=r;jn;j+)/先访问外侧磁道再转向最里欲访问磁道coutaj;for(j=0;jr;j+)coutaj=0;j-)coutaj=r;j-)/coutaj;sum=2*an-1-2*a0+now-ar;elsecout请输入0或1!;coutendl;cout移动的总道数:sumendl;(3)测试结果:1.先来先服务算法(FCFS)测试结果c 任横在本机编写的程序演作察藐源设莉pa nPebugci pa n. ex .使输入磁道白碎薮;生成随机磁道号-6 94 98 2 26 87来短描环出 先最扫蒿sc法 算 服道普 先!W扫.(FCFEJ 法(SSTF;CSCfiN?讶选择助或与2 隋楚入当爵磁道号j 32 器盘调度顺序为:6 94 98 2 26 87膀动的总磁

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号