您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 磁盘调度算法的模拟实现
实用文档标准磁盘调度算法的模拟实现学院专业学号学生姓名指导教师姓名2014年3月19日目录实用文档标准一、课设简介.........................................21.1课程设计题目...................................21.2课程设计目的...................................21.3课程设计要求...................................2二、设计内容.........................................32.1功能实现.......................................32.2流程图.........................................32.3具体内容.......................................3三、测试数据......................................43.3测试用例及运行结果.............................4四、源代码...........................................5五、总结............................................125.1总结............................................一、课设简介1.1课程设计题目实用文档标准磁盘调度算法的模拟实现11.2程序设计目的操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。1)进一步巩固和复习操作系统的基础知识。2)培养学生结构化程序、模块化程序设计的方法和能力。3)提高学生调试程序的技巧和软件设计的能力。4)提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。1.3设计要求1)磁头初始磁道号,序列长度,磁道号序列等数据可从键盘输入,也可从文件读入。2)最好能实现磁道号序列中磁道号的动态增加。3)磁道访问序列以链表的形式存储4)给出各磁盘调度算法的调度顺序和平均寻道长度二、设计内容2.1功能实现设计并实现一个本别利用下列磁盘调度算法进行磁盘调度的模拟实用文档标准程序。1)FCFS2)SSTF2.2流程图2.3具体内容1)先来先服务算法FCFS这是一种比较简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情开始选择算法FCFSSSTF结束实用文档标准况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。2)最短寻道时间优先算法SSTF该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变化幅度很大。在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。三、测试数据3.1先来先服务算法输入磁道序列:555839189016015038184当前磁道号:1003.2最短寻道时间优先算法(1)当前磁道号大于磁道序列中的最大的磁道号时输入磁道序列:555839189016015038184当前磁道号:1003.3测试结果实用文档标准四、源代码#includeiostream#includecmath#includestdio.husingnamespacestd;typedefstructnode{intdata;structnode*next;实用文档标准}Node,*Linklist;voidmain(){voidCreate_Linklist(Node*);voidfcfs();//声明先来先服务函数FCFSvoidsstf();//声明最短寻道时间优先函数SSTFvoidprint(Node*);//输出链表函数ints;//s是选择哪个算法printf(**************磁盘调度算法***************\n);printf(\t***1,先来先服务算法FCFS\n);printf(\t***2,最短寻道时间优先算法SSTF\n);printf(\t***0,退出\n);printf(\t***请选择:);scanf(%d,&s);while(s!=0){switch(s){实用文档标准case1:printf(\t\t********你选择了:先来先服务算法FCFS\n);fcfs();break;case2:printf(\t\t******你选择了:最短寻道时间优先算法SSTF\n);sstf();break;}printf(\t\t*******退出请选0,继续请选1,2,\n);scanf(%d,&s);}}/******************************************************************/voidfcfs()//先来先服务算法{voidCreate_Linklist(Node*);voidprint(Node*);intLength_Linklist(Node*);实用文档标准Node*l,*head;//*m,*n;*/floatnum=0;//num为平均寻道长度intc,f;head=(Node*)malloc(sizeof(Node));head-next=NULL;printf(**************新建一个单链表,以0作为结束标志:********\n);Create_Linklist(head);c=Length_Linklist(head);printf(\t\t******从几号磁道开始:********);scanf(%d,&f);//f为磁道号print(head);printf(\t***链表长度为:%d\n,c);l=head-next;for(inti=0;ic;i++){num+=abs(l-data-f);f=l-data;l=l-next;}num=num/c;printf(\t\t*****先来先服务的寻道顺序是:\n);实用文档标准print(head);printf(\t\t******平均寻道长度:%f\n,num);}/*****************************************************************/voidsstf()//最短寻道时间优先算法{voidCreate_Linklist(Node*);voidprint(Node*);intLength_Linklist(Node*);Node*p,*q,*r,*s,*l,*m,*head;intc,f;head=(Node*)malloc(sizeof(Node));head-next=NULL;printf(**************新建一个单链表,以0作为结束标志:********\n);Create_Linklist(head);c=Length_Linklist(head);printf(\t\t******从几号磁道开始:********);scanf(%d,&f);//f为磁道号实用文档标准print(head);printf(\t***链表长度为:%d\n,c);l=(Node*)malloc(sizeof(Node));l-next=NULL;m=l;q=head;p=head-next;s=head;r=head-next;floatnum=0;for(inti=0;ic;i++){intmin=abs(f-r-data);for(intj=0;jc-i-1;j++){p=p-next;q=q-next;if(abs(f-p-data)min){min=abs(f-p-data);r=p;s=q;实用文档标准}}num+=abs(f-r-data);f=r-data;s-next=r-next;r-next=NULL;m-next=r;m=r;q=head;p=head-next;s=head;r=head-next;}num=num/c;printf(\t\t******最短寻道时间优先顺序是:\n);print(l);printf(\t\t*********平均寻道长度:%f\n,num);}/*********************************************************/voidprint(Node*head)//输出链表{Node*p;实用文档标准p=head-next;cout单链表显示:;if(p==NULL){printf(单链表为空:\n);}elseif(p-next==NULL){printf(%d\t,p-data);printf(\n);}else{while(p-next!=NULL){printf(%d\t,p-data);p=p-next;}printf(%d\t,p-data);printf(\n);}}实用文档标准/*********************************************************/voidCreate_Linklist(Node*head)//创建链表{Node*p,*q;inti;scanf(%d,&i);q=head;while(i!=0){p=(Node*)malloc(sizeof(Node));p-next=NULL;p-data=i;q-next=p;q=p;cini;}/*c++;*/}/**************************************************/intLength_Linklist(Node*head)//计算链表长{intl;实用文档标准Node*p;p=head-next;l=1;while(p-next){p=p-next;l++;}returnl;}五、总结通过此次课程设计,我对操作系统的基础知识了解得更透彻了,同时对磁盘调度的四种算法——先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、有了更深刻的理解和掌握,使我能够为磁盘调度选择适当的算法,提高CPU工作效率。设计过程中遇到的困难在老师和同学的帮助下顺利解决并通过了验收,我深刻认识到算法的逻辑性对程序的重要影响,算法的准确度对程序运行结果的重要影响,这对我以后在操作系统的学习中有极大帮助。
本文标题:磁盘调度算法的模拟实现
链接地址:https://www.777doc.com/doc-6028210 .html