操作系统磁盘调度算法源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.主界面
void display(){
cout<<"\n\n\n\n Operating Systems Curriculum Design\n";
cout<<"\n ╔———————————————————————————————╗";
cout<<"\n ││";
cout<<"\n │名称: 磁盘调度│";
cout<<"\n ││";
cout<<"\n │工具: Visual Studio 2010 │";
cout<<"\n ││";
cout<<"\n │班级:1205 │";
cout<<"\n ││";
cout<<"\n │作者:xxxx │";
cout<<"\n ││";
cout<<"\n │学号:1324256688 │";
cout<<"\n ││";
cout<<"\n ╚———————————————————————————————╝\n";
system("pause");
system("cls");
2.前言提示用户此程序实现的算法
cout<<"【载入完成】"< cout<<" 前言"< cout<<" 欢迎使用『磁盘调度算法系统』,本程序实现了常用的磁盘调度算法如下所示:\n\n"; cout<<" ①最短寻道时间优先(SSTF):最短寻道时间优先算法要求访问的磁盘与当前磁头所在的\n"; cout<<" 磁盘距离最近,以使每次的寻道时间最短。\n\n"; cout<<" ②扫描算法(SCAN)电梯调度:扫描算法不仅考虑到欲访问的磁道与当前磁道的距离\n"; cout<<" 更优先考虑的是磁头的当前移动方向。\n\n"; system("pause"); system("cls");//清屏 3.用户选择所使用的算法(先随机生成101个磁道号)void showMenu(int cidao[],int n){ int choice; while(true){ cout<<"请您选择喜欢的算法来实现调度(输入1-3):"; cout<<"\n ╔—————————————╗"; cout<<"\n ││"; cout<<"\n │ 1.最短寻道时间优先(SSTF) |"; cout<<"\n ││"; cout<<"\n │ 2.扫描算法(SCAN) │"; cout<<"\n ││"; cout<<"\n │ 3.退出(EXIT) │"; cout<<"\n ││"; cout<<"\n ╚—————————————╝\n"; cout< while(true){ cout<<"现在您选择的算法号是(1-3):"; cin>>choice; switch(choice){ /*case 1: FCFS(a,n); break;*/ case 1: SSTF(cidao,n); break; case 2: SCAN(cidao,n); break; case 3: cout<<"\n要退出系统了欢迎使用本系统\n"; exit(0); } } } } 4.短寻道时间优先算法(SSTF) (1)算法分析 ①I优点:相较于先来先服务算法(FCFS)有更好的寻道性能,使每次的寻道时间最短。 II缺点:易造成某个进程发生“饥饿”现象。 ②最短寻找时间优先调度算法总是从等待访问者中挑选寻找时间最短的那个请求先执行的,而不管访问者到来的先后次序。例如,如果现在读写磁头正在100号柱面上执行输出操作,而等待访问者依次要访问的柱面为55,58,39,18,90,160,150,38,184,那么,当100号柱面的操作结束后,应该先处理90号柱面的请求,然后到达58号柱面执行操作,随后处理55号柱面请求,后继操作的次序应该是39,38,18,150,160,184.采用最短寻找时间优先算法决定 等待访问者执行操作的次序时,读写磁头总共移动多个柱面的距离,与先来先服务、算法比较,大幅度地减少了寻找时间,具有更好的寻道性能,因而缩短了为各访问者请求服务的平均时间,也就提高了系统效率。但最短查找时间优先(SSTF)调度,FCFS会引起读写头在盘面上的大范围移动,SSTF查找距离磁头最短(也就是查找时间最短)的请求作为下一次服务的对象。SSTF查找模式有高度局部化的倾向,会推迟一些请求的服务,甚至引起无限拖延(又称饥饿)。 算法流程:输入磁头初始磁道号,序列长度,磁道号序列。选择磁盘调度算法(最短寻道时间优先调度(SSTF))或(扫描调度算法(SCAN))中的任意一个,若选择SSTF,则输出各进程被调度的顺序,并计算总的寻道长度和平均寻道长度,选择关闭则结束磁盘调度。 (2)算法流程图 开始 /**********************最短寻道时间优先调度算法********************/ void SSTF(int cidao[],int m) { system("cls"); int k=1; int now,l,r; int i,j,sum=0; int a; char str[100]; float ave; cidao=bubble(cidao,m); //调用冒泡排序算法排序 cout<<"请输入当前的磁道号:"; C: cin>>str; //对输入数据进行有效性判断 a=decide(str); if(a==0) {