实验七磁盘调度探究.doc

实验七 磁盘调度 实验目的: 磁盘是高速、大容量、旋转型、可直接存取的存储设备。它作为计算机系统的辅助存储器,担负着繁重的输入输出工作,在现代计算机系统中往往同时会有若干个要求访问磁盘的输入输出要求。系统可采用一种策略,尽可能按最佳次序执行访问磁盘的请求。由于磁盘访问时间主要受寻道时间T的影响,为此需要采用合适的寻道算法,以降低寻道时间。本实验要求模拟设计一个磁盘调度程序,观察调度程序的动态运行过程。通过实验来理解和掌握磁盘调度的职能。 实验内容: 分别模拟如下电梯调度算法,对磁盘进行移臂操作: 先来先服务算法 最短寻道优先算法 电梯算法 实验要求: 假设磁盘只有一个盘面,并且磁盘是可移动头磁盘。 磁盘是可供多个进程共享的存储设备,但一个磁盘每个时刻只能为一个进程服务。当有进程在访问某个磁盘时,其它想访问该磁盘的进程必须等待,直到磁盘一次工作结束。当有多个进程提出输入输出请求而处于等待状态时,可用磁盘调度算法从若干个等待访问者中选择一个进程,让它访问磁盘。为此设置“驱动调度”进程。 由于磁盘与处理器是并行工作的,所以当磁盘在为一个进程服务时,占有处理器的其它进程可以提出使用磁盘(这里我们只要求访问磁道),即动态申请访问磁道,为此设置“接受请求”进程。 为了模拟以上两个进程的执行,可以考虑使用随机数来确定二者的允许顺序,参考程序流程图。 “接受请求”进程建立一张“进程请求I/O”表,指出等待访问磁盘的进程要求访问的磁道,表的格式如下: 进程名 要求访问的磁道号 磁盘调度的功能是查“请求I/O”表,当有等待访问的进程时,按磁盘调度算法从中选择一个等待访问的进程,按其指定的要求访问磁道。流程图中的“初始化”工作包括:初始化“请求I/O”表,设置当前移臂方向;当前磁道号。并且假设程序运行前“请求I/O”表中已有若干进程(4~8个)申请访问相应磁道。 程序流程图: 五.参考程序代码: #include stdlib.h #includeiostream.h #includecmath typedef struct node { int data; struct node *next; }Node; void main() { void fcfs(Node *,int,int);//声明先来先服务函数FCFS void sstf(Node *,int,int);//声明最短寻道时间优先函数SSTF void scan(Node *,int,int);//声明扫描函数SCAN void print(Node *); //输出链表函数 Node *head,*p,*q; //建立一个链表 int it,c=0,f,s; //c为链表长度,f是开始的磁道号,s是选择哪个算法 head=(Node *)malloc(sizeof(Node)); head-next=NULL; q=head; cout /**************磁盘调度算法***************/endl; coutendl; cout新建一个单链表,以0作为结束标志:; cinit; while(it!=0) { p=(Node *)malloc(sizeof(Node)); p-next=NULL; p-data=it; q-next=p; q=p; cinit; c++; } cout从几号磁道开始:; cinf; //f为磁道号 print(head); cout链表长度为:cendl; cout1、先来先服务算法FCFSendl; cout2、最短寻道时间优先算法SSTFendl; cout3、电梯调度算法(扫描算法SCAN)endl; cout0、退出endl; cout请选择:; cins; while(s!=0) { switch(s) { case 1:cout你选择了:先来先服务算法FCFSendl; fcfs( head,c,f); break; case 2:cout你选择了:最短寻道时间优先算法SSTFendl; sstf( head,c,f); break; case 3:cout你选择了:电梯调度算法(扫描算法SCAN)endl; scan( head,c,f); break; } cout退出请选0,继续请选1,2,3:; cins; } } /****************************************************

文档评论(0)

1亿VIP精品文档

相关文档