磁盘驱动调度算法的模拟.doc_第1页
磁盘驱动调度算法的模拟.doc_第2页
磁盘驱动调度算法的模拟.doc_第3页
磁盘驱动调度算法的模拟.doc_第4页
磁盘驱动调度算法的模拟.doc_第5页
免费预览已结束,剩余9页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一编写目的熟悉磁盘的结构以及磁盘的驱动调度算法的模拟,编程实现简单常用的磁盘驱动调度算法先来先服务(FIFO)、电梯调度算法、最短寻找时间优先算法、扫描(双向扫描)算法、单向扫描(循环扫描)算法等。编程只需实现两个算法。题目可以选取教材或习题中的相关编程实例。编程语言建议采用c/c+或Java。模拟程序鼓励采用随机数技术、动态空间分配技术,有条件的最好能用图形界面展现甚至用动画模拟。实验性质:验证型。二课程设计内容1)掌握使用一门语言进行磁盘驱动调度算法的模拟;2)编写程序将磁盘驱动调度算法的过程和结果能以较简明直观的方式展现出来。三设计、方法和步骤1. 设计磁盘驱动调度对磁盘的效率有重要影响。磁盘驱动调度算法的好坏直接影响辅助存储器的效率,从而影响计算机系统的整体效率。常用的磁盘驱动调度算法有:最简单的磁盘驱动调度算法是先入先出(FIFO)法。这种算法的实质是,总是严格按时间顺序对磁盘请求予以处理。算法实现简单、易于理解并且相对公平,不会发生进程饿死现象。但该算法可能会移动的柱面数较多并且会经常更换移动方向,效率有待提高。 最短寻找时间优先算法:总是优先处理最靠近的请求。该算法移动的柱面距离较小,但可能会经常改变移动方向,并且可能会发生进程饥饿现象。 电梯调度:总是将一个方向上的请求全部处理完后,才改变方向继续处理其他请求。扫描(双向扫描):总是从最外向最里进行扫描,然后在从最里向最外扫描。该算法与电梯调度算法的区别是电梯调度在没有最外或最里的请求时不会移动到最外或最里柱面,二扫描算法总是移到最外、最里柱面。两端的请求有优先服被务的迹象。循环扫描(单向扫描):从最外向最里进行柱面请求处理,到最里柱面后,直接跳到最外柱面然后继续向里进行处理。该算法与扫描算法的区别是,回来过程不处理请求,基于这样的事实,因为里端刚被处理。 2. 设计方法1)使用流程图描述演示程序的设计思想;2)选取c/c+、Java等计算机语言,编程调试,最终给出运行正确的程序。3. 程序步骤参考程序:1) c/c+版的驱动调度算法电梯调度模拟程序#include #include #include #include typedef struct _procchar name32; /*定义进程名称*/int team; /*定义柱面号*/int ci; /*定义磁道面号*/int rec; /*定义记录号*/struct _proc *prior;struct _proc *next;PROC;PROC *g_head=NULL,*g_curr=NULL,*local;int record=0;int yi=1;void init()PROC *p; /*初始化链表(初始I/O表)*/g_head = (PROC*)malloc(sizeof(PROC);g_head-next = NULL;g_head-prior = NULL;p = (PROC*)malloc(sizeof(PROC);strcpy(p-name, P1);p-team=100;p-ci=10;p-rec=1;p-next = NULL;p-prior = g_head;g_head-next = p;g_curr=g_head-next;p = (PROC*)malloc(sizeof(PROC);strcpy(p-name, P2);p-team=30;p-ci=5;p-rec=5;p-next = NULL;p-prior = g_curr;g_curr-next = p;g_curr=p;p = (PROC*)malloc(sizeof(PROC);strcpy(p-name, P3);p-team=40;p-ci=2;p-rec=4;p-next = NULL;p-prior = g_curr;g_curr-next = p;g_curr=p;p = (PROC*)malloc(sizeof(PROC);strcpy(p-name, P4);p-team=85;p-ci=7;p-rec=3;p-next = NULL;p-prior = g_curr;g_curr-next = p;g_curr=p;p = (PROC*)malloc(sizeof(PROC);strcpy(p-name, P5);p-team=60;p-ci=8;p-rec=4;p-next = NULL;p-prior = g_curr;g_curr-next = p;g_curr=g_head-next;local = (PROC*)malloc(sizeof(PROC); /*选中进程*/strcpy(local-name, P0);local-team=0;local-ci=0;local-rec=0;local-next=NULL;local-prior=NULL;void PrintInit() /*打印I/O表*/ PROC *t = g_head-next;printf(-/n);printf( -I/O LIST-/n);printf( process team ci rec /n);while(t!=NULL)printf(%4s %8d %8d %5d/n, t-name, t-team, t-ci, t-rec ); t = t-next;printf(/n/nCurrent process is :/n);printf(-/n/n);printf( process team ci rec /n);printf(%4s %8d %8d %5d/n, local-name, local-team, local-ci, local-rec );switch(yi)case 1:printf(current direction is UP/n);break;case 0:printf(current direction is down/n);break;void acceptreq() /*接受请求函数*/PROC *p;p = (PROC*)malloc(sizeof(PROC);printf(please input the information of the new process/nprocess-name:/nprocess-team/nprocess-ci/nprocess-rec/n);printf(1.name/n);scanf(%s,p-name);printf(2.team 0-199/n);scanf(%d,&p-team); /*输入请求进程信息*/printf(3.ci 0-19/n);scanf(%d,&p-ci);printf(4.rec 0-7/n);scanf(%d,&p-rec);getchar();g_curr=g_head; /*将此节点链入I/O请求表*/while(g_curr-next!=NULL)g_curr=g_curr-next;p-next=NULL;p-prior=g_curr;g_curr-next=p;g_curr=g_head-next;printf(NEW I/O LIST/n/n);PrintInit(); /*将新的I/O请求表输出*/void qddd() /*驱动调度函数*/PROC *out;int min;int max=g_head-next-team;if (g_head-next=NULL); /*若已全部调度,则空操作*/else switch (yi)case 1: min=g_head-next-team;out=g_head-next; /*选出最小的team进程,模拟启动此进程*/strcpy(local-name,out-name);local-team=out-team;local-ci=out-ci;local-rec=out-rec;for (g_curr=g_head-next;g_curr!=NULL;g_curr=g_curr-next)if (g_curr-team record) min = g_curr-team;break;for (g_curr=g_head-next;g_curr!=NULL;g_curr=g_curr-next)if (min=g_curr-team&g_curr-teamrecord)min=g_curr-team;out=g_curr;strcpy(local-name,out-name);local-team=out-team;local-ci=out-ci;local-rec=out-rec;printf(/n-/n);printf(the process choosed :/n);printf( process team ci rec /n);printf(%4s %8d %8d %5d/n, out-name, out-team, out-ci,out-rec );record = local-team;printf(%d,record);for (g_curr=g_head-next;g_curr!=NULL;g_curr=g_curr-next)if (maxteam)max=g_curr-team;if(max=record)yi=0;record=1000;break;break;/*case 1*/case 0: /*case 1 的对称过程*/max=g_head-next-team;out=g_head-next; strcpy(local-name,out-name);local-team=out-team;local-ci=out-ci;local-rec=out-rec;for (g_curr=g_head-next;g_curr!=NULL;g_curr=g_curr-next)if (g_curr-team team;break;for (g_curr=g_head-next;g_curr!=NULL;g_curr=g_curr-next)if (maxteam&g_curr-teamteam;out=g_curr;strcpy(local-name,out-name);local-team=out-team;local-ci=out-ci;local-rec=out-rec;printf(/n-/n);printf(the process choosed :/n);printf( process team ci rec /n);printf(%4s %8d %8d %5d/n, out-name, out-team, out-ci,out-rec );min=g_head-next-team;for (g_curr=g_head-next;g_curr!=NULL;g_curr=g_curr-next)if (ming_curr-team)min=g_curr-team;record = local-team;if(min=record)yi=1;record=0;break;break;default : return -1;/*switch*/if (out-next=NULL) /*将选中的进程从I/O请求表中删除*/out-prior-next=NULL;free(out);elseout-prior-next=out-next;out-next-prior=out-prior;free(out);/*else*/void acceptnum() /*通过输入01选择驱动调度或是接受请求*/float num;char c;while(1)printf(-/n);printf(please input a number between 0 and 1/nnum0.5:qudong diaodu/n/nnum=2:I/O LIST/n/nnum=?/n);scanf(%f,&num);getchar();while(num1)&num!=2) /*过滤不合法数据 注意:本程序其他输入数据可能未过滤*/printf(number ERROR!Input again please!/nnum=?/n );scanf(%f,&num);getchar();if(num0.5&num!=2) /*驱动调度*/if (g_head-next=NULL)printf(/n/n);printf(-/n);printf(I/O list is empty!/n); /*请求表为空 无需调度*/elseprintf(qudong diaodu/n); qddd(); /*调用函数进行调度*/else if (num=0.5) /*接受请求*/printf(accept request/n/n);acceptreq();else if (num=2) /*通过输入2显示当前请求I/O表*/printf(I/O LIST;);printf(-/n);PrintInit();printf(/n);printf(-/n);printf(choose n to quit else to continue/n); /*输入n离开本程序*/if(strcmp(c=getchar(),n)=0|strcmp(c=getchar(),N)=0)clrscr();printf(/n/n/n/n/n/n);printf(tha

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论