小邪操作系统课程设计电梯调度

上传人:橙** 文档编号:333363589 上传时间:2022-09-01 格式:PDF 页数:15 大小:635.31KB
返回 下载 相关 举报
小邪操作系统课程设计电梯调度_第1页
第1页 / 共15页
小邪操作系统课程设计电梯调度_第2页
第2页 / 共15页
小邪操作系统课程设计电梯调度_第3页
第3页 / 共15页
小邪操作系统课程设计电梯调度_第4页
第4页 / 共15页
小邪操作系统课程设计电梯调度_第5页
第5页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《小邪操作系统课程设计电梯调度》由会员分享,可在线阅读,更多相关《小邪操作系统课程设计电梯调度(15页珍藏版)》请在金锄头文库上搜索。

1、石家庄经济学院课程设计报告(学 院)系:华信学院专业:计算机科学与技术姓名:小邪班级:学号:指导教师:王颖2010 年 6 月 24 日名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 15 页 -“操作系统”课程设计报告姓名小邪学号日期6.24.2010 实验室152 机房指导教师王颖设备编号52 课程设计题目实习九驱动调度一、实验内容模拟电梯调度算法,实现对磁盘的驱动调度。二、实验目的磁盘是一种高速、大容量、旋转型、可直接存取的存储设备。它作为计算机系统的辅助存储器,担负着繁重的输入输出任务、在多道程序设计系统中,往往同时会有若干个要求访问磁盘的输入输出请求等待处理。系统可采用

2、一种策略,尽可能按最佳次序执行要求访问磁盘的诸输入输出请求。这就叫驱动调度,使用的算法称为驱动调度算法。驱动调度能降低为若干个输入输出请求服务所需的总时间,从而提高系统效率。本实验要求学生模拟设计一个驱动调度程序,观察驱动调度程序的动态运行过程。通过实验使学生理解和掌握驱动调度的职能。三、实验过程1.数据结构设计struct pcb int name;/进程名int sector;/柱面号199 int track;/磁道号19 int record;/物理记录号7 struct pcb*next;2.算法设计算法思想:电梯调度算法的调度策略是与移动臂的移动方向和移动臂的当前位子有关的,所以每

3、次启动磁盘时都应登记移动臂方向和当前位子。电梯调度算法是一种简单而实用的驱动调度方法,这种调度策略总是优先选择与当前柱面号相同的访问请求,从这些请求中再选择一个能使旋转距离最短的等待访问者。如果没有与当前柱面号相同的访问请求,则根据移臂方向来选择,每次总是沿臂移动方向选择一个与当前柱面号最近的访问请求,若沿这个方向没有访问请求时,就改变臂的移动方向。这种调度策略能使移动臂的移动频率极小,从而提高系统效率。用电梯调度算法实现驱动在驱动调度的程序中我一共编写了七个函数,pcb*create(struct pcb*a)是初始化一个请求调度表,根据用户输入的进程个数依次创建进程,每次创建的进程都插到链

4、表的末尾,而且数据由rand()直接生成,不用用户输入。pcb*insert(struct pcb*a)是插入一个新的请求进程,同样数据也是由rand()生成,之后把创建好的进程插入到链表的尾部。void showpcb(struct pcb*a)是打印进程链表的数据。int*sequenceup(int a,int n)把对进程链表中的所有进程柱面号取出,放入一个数组,之后对数组进行升序排列。int*sequencedown(int a,int n)结构和上面的函数一样,不过是对数组进行降序排列。void show(int a,int n)是打印磁道移动的情况,之前把磁道移动的过程都存储在一

5、个数组里,通过这个函数来打印数组。pcb*scancal(struct pcb*a)是这个程序的关键函数,用scan 算法进行驱动调度。首先要判断磁头移动的方向,然后根据方向找离磁头当前位置最近的磁道,这样一直找下去,如果一个方向找完就按相反的方向继续找,直到找完为止。名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 15 页 -开始把i/o请求表中的磁道号全部拷贝到数组a和数组 b中队数组 a进行升序排列数组 b进行降序排列判断输出数组的元素的个数是否等于进程的个数判断当前磁道方向从升序排列的数组中找出比当前磁道号大的磁道放入输出数组从降序排列的数组中找出比当前磁道号晓得磁道翻入

6、输出数组打印输出数组中的寻道的序列是向上向下否结束图 1 实现 scan 算法的流程图名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 15 页 -3.程序实现及运行结果 (1)源程序链接#include stdio.h#include stdlib.h#include iostream.h struct pcb int name;/进程名int sector;/柱面号 199 int track;/磁道号 19 int record;/物理记录号 7 struct pcb*next;int direct;/方向int r;/进程个数int f;/当前此道的位置pcb*create

7、(struct pcb*a)/a表示队列 n 表示进程个数 struct pcb*q,*s;int n;n=r;s=q=NULL;s=a;for(int i=1;iname=rand()%80;q-sector=rand()%199;q-track=rand()%19;q-record=rand()%7;q-next=NULL;if(a=NULL)a=s=q;else s-next=q;s=s-next;return a;pcb*insert(struct pcb*a)/插入一个进程进程所在磁道 k 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 15 页 -struct pcb

8、*q,*s;s=q=NULL;q=a;s=(struct pcb*)malloc(sizeof(struct pcb);s-name=rand()%40;s-sector=rand()%200;s-track=rand()%19;s-record=rand()%7;s-next=NULL;if(q=NULL)return s;while(q!=NULL)/找队尾 if(q-next!=NULL)q=q-next;else break;q-next=s;return a;void showpcb(struct pcb*a)struct pcb*p;p=a;printf(初始化请求 I/O 表:n

9、);printf(进程名柱面号磁道号物理记录号 :n);while(p!=NULL)printf(%d t%d t%d t%dt n,p-name,p-sector,p-track,p-record);p=p-next;int*sequenceup(int a,int n)/n表示元素的个数按升序排列用的是冒泡排序法 int i,j,k,w;名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 15 页 -for(j=0;jn-1;j+)w=j;for(i=j;in;i+)if(aiaw)w=i;k=aw;aw=aj;aj=k;return a;int*sequencedown(int

10、 a,int n)/n表示元素的个数按降序排列用的是冒泡排序法 int i,j,k,w;for(j=0;jn-1;j+)w=j;for(i=j;iaw)w=i;k=aw;aw=aj;aj=k;return a;void show(int a,int n)/显示调度的序列 int p;p=n;if(p=2)printf(%d,a0);printf(n);printf(当前磁头的位置:%dn,a0);f=a0;return;for(int i=0;inext=NULL)printf(当前没有请求!n);return NULL;*/名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 15

11、页 -for(int i=0;isector;q=q-next;z=sequenceup(c,n);/生序排列 v=sequencedown(d,n);/降序排列q=a;if(q-sector)(q-next)-sector)direct=1;else direct=0;if(f=0)direct=0;printf(当前磁臂移动的方向:);if(direct=0)printf(%sn,up);else printf(%sn,down);while(e!=n)if(direct=0)/0表示从小往大移动表示 up if(o=2)h0=*(z+1);break;for(i=0;if)if(he-i

12、=(*(z+i)&(e=n)break;if(he-i=*(z+i)continue;he=*(z+i);e+;名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 15 页 -if(e=n)break;continue;direct=1;else /1表示从大往小的方向表示 down if(o=2)h0=*(v+1);break;for(i=0;in;i+)if(*(v+i)sector=t)if(a-sector=f)/找到磁道当前的位置更改请求链表 p=a;p-next=NULL;r=1;break;else a=a-next;printf(当前磁臂的移动方向是:);if(dir

13、ect=0)printf(%sn,up);else printf(%sn,down);return p;void main()int n;struct pcb*a;a=NULL;direct=0;while(1)printf(-资源分配-n);printf(*1.初始化请求 I/O 表 *n);printf(*2.进行磁盘调度 *n);printf(*3.插入一个新的请求 *n);printf(请根据提示选择选择:n);scanf(%d,&n);switch(n)case 1:printf(请输入要创建进程的个数:n);scanf(%d,&r);a=NULL;f=0;a=create(a);名

14、师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 15 页 -showpcb(a);printf(-n);break;case 2:a=scancal(a);printf(-n);break;case 3:a=insert(a);r+;showpcb(a);printf(-n);break;default:return;(2)运行结果名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 15 页 -图 1 初始化请求i/o表 并进行一次调度图 2 随机插入进程插入一个进程并运行名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 15 页 -图 3 再随机插入进程插入几个进程并运行名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 15 页 -图 4 随机插入进程,运行后发现方向变化四、实验总结名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 15 页 -六、教师评语及成绩评语:成绩:年月日名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 15 页 -

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 初中教育

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