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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验报告六磁盘调度算法.docx

1、实验报告六磁盘调度算法实验报告六磁盘调度算法班级:软技 2 班学号: 201467003084 姓名:刘道林一 实验内容: 熟悉磁盘的结构以及磁盘的驱动调度算法的模拟, 编程实现简单常用的 磁盘驱动调度算法先来先服务( FIFO)、 电梯调度算法、最短寻找时间优先算法、扫描(双向扫描)算法、单向扫描(循环扫描)算 法等。编程只需实现两个算法。 题目可以选取教材或习题中的相关编程实例。 编程语言建议采用 C/C+或Java。模拟程序鼓励采用随机数技术、动态空间分配技术,有条件的最好能用图形界面展现甚至用动画模拟。 实验性质:验证型。二 实验目的和要求 1)掌握使用一门语言进行磁盘驱动调度算法的模

2、拟; 2)编写程序将磁盘驱动调度算法的过程和结果能以较简明直观的方式展现 出来。三 实验原理、方法和步骤1.实验原理磁盘驱动调度对磁盘的效率有重要影响。 磁盘驱动调度算法的好坏直接影响辅助存储器的效 率,从而影响计算机系统的整体效率。常用的磁盘驱动调度算法有:最简单的磁盘驱动调度算法是先入先出( FIFO)法。这种算法的实质是,总是严格按时间顺序对磁盘请 求予以处理。算法实现简单、易于理解并且相对公平,不会发生进程饿死现象。但该算法可 能会移动的柱面数较多并且会经常更换移动方向,效率有待提高。 最短寻找时间优先算法:总是优先处理最靠近的请求。 该算法移动的柱面距离较小,但可能会经常改变移动方向

3、, 并且可能会发生进程饥饿现象。 电梯调度: 总是将一个方向上的请求全部处理完后,才改变方向继续处理其他请求。扫描(双向扫描) :总是从最外向最里进行扫描,然后在从最里向最外扫描。该算法与电梯 调度算法的区别是电梯调度在没有最外或最里的请求时不会移动到最外或最里柱面, 二扫描算法总是移到最外、 最里柱面。 两端的请 求有优先服被务的迹象。 循环扫描(单向扫描):从最外向最里进行柱面请求处理,到最里柱面后,直接跳到最外柱面然后继续向 里进行处理。该算法与扫描算法的区别是,回来过程不处理请求,基于这样的事实,因为里端刚被处理。2.实验方法1)使用流程图描述演示程序的设计思想; 2)选取C/C+、J

4、ava等计算机语言,编程调试,最终给出运行正确的程序。四 实验结果分析 能够将磁盘驱动调度算法在各种情况下都能得出正确的结论。 最短寻找时间优先或电梯调度算法能够 在多次模拟数据下得出平均移动柱面数,并进行效率比较分析对 FIFO、五源程序代码#include #include #include #include typedef struct _proc char name32;int team;int ci;int rec;struct _proc *prior; struct _proc *next; /* 定义进程名称 */* 定义柱面号 */* 定义磁道面号 */* 定义记录号 */P

5、ROC;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

6、 = 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

7、=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; loc

8、al = (PROC*)malloc(sizeof(PROC); strcpy(local-name, P0);local-team=0; local-ci=0; local-rec=0;void PrintInit()local-next=NULL; local-prior=NULL;/* 打印 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 %5dn, t-name, t-team, t-

9、ci, t-rec ); t = t-next;printf(nnCurrent process is :n); printf( nn);local-ci, local-rec );downn);void acceptreq()PROC *p;printf( process team ci rec n);printf(%4s %8d %8d %5dn, local-name, local-team, switch(yi)case 1:printf(current direction is UPn); break;case 0: printf(current direction isbreak;

10、/* 接受请求函数 */p = (PROC*)malloc(sizeof(PROC);processnprocess-name:nprocess-teamnprocess-cinprocess-recn);printf(1.namen);scanf(%s,p-name);printf(2.team 0-199n);scanf(%d,&p-team); /* 输入请求进程信息 */ printf(3.ci 0-19n);scanf(%d,&p-ci);printf(4.rec 0-7n);scanf(%d,&p-rec);getchar();g_curr=g_head; /* 将此节点链入 I/

11、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 LISTnn); PrintInit(); /* 将新的 I/O 请求表输出 */ void qddd() /* 驱动调度函数 */PROC *out;int max=g_head-next-team; if (g_head-next=NULL); elseint min;/* 若已全部调度,则空操作 */switch (yi)case 1

12、:min=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;if (g_curr-team record)for (g_curr=g_head-next;g_curr!=NULL;g_curr=g_curr-next)ming_curr-team;break;for(g_curr=g_head-next;g_curr!=NULL;g_curr=g_curr-next)if(min=g_curr-te

13、am&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);choosed :n);team ci rec n);printf(the processprintf( processprintf(%4s %8d %8d %5dn, out-name, out-team, out-ci,out-rec );(g_curr=g_head-next;g_curr!=NULL;

14、g_curr=g_curr-next)(maxteam) max=g_curr-team;if(max=record)yi=0;record=1000;break;record = local-team; printf(%d,record);forifbreak;/*case 1 的对称过程 */max=g_head-next-team;/*case 1*/case 0: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_he

15、ad-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( p

16、rocess team ci rec n);printf(%4s %8d %8d %5dn, 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;/*switch*/ if/* 将选中的进程从 I/O 请求表中删除 */free(

17、out);out-prior-next=out-next;out-next-prior=out-prior;/*else*/ default : return -1;(out-next=NULL)out-prior-next=NULL;elsefree(out);01 选择驱动调度 或是接void acceptnum() /* 通过输入受请求 */ float num; char c;while(1) printf( n);printf(please input a number between 0 and 1nnum0.5:qudong diaodunnnum=2:I/O LISTnnnum

18、=?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(nn);printf( n);printf(I/O list is empty!n); /* 请求表为空 无需调度 */ elseprintf(qudong diaod

19、un); qddd();/* 调用函数进行调度 */else if (num=0.5) /* 接受请求 */ printf(acceptrequestnn);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 continuen); /* 输入 if(strcmp(c=getchar(),n)=0|strcmp(c=getchar(),N)=0) clrscr();printf(nnnnnn);printf(thank you for testing my program!n);printf( -by 01n);sleep(2);printf(nnBYEbye!);sleep(2);return -1;elseclrscr();/* 主程序 */main ()init(); PrintInit(); acceptnum();

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

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