实验七 磁盘调_第1页
实验七 磁盘调_第2页
实验七 磁盘调_第3页
实验七 磁盘调_第4页
实验七 磁盘调_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、实验七 磁盘调度一、 实验目的:磁盘是高速、大容量、旋转型、可直接存取的存储设备。它作为计算机系统的辅助存储器,担负着繁重的输入输出工作,在现代计算机系统中往往同时会有若干个要求访问磁盘的输入输出要求。系统可采用一种策略,尽可能按最佳次序执行访问磁盘的请求。由于磁盘访问时间主要受寻道时间T的影响,为此需要采用合适的寻道算法,以降低寻道时间。本实验要求模拟设计一个磁盘调度程序,观察调度程序的动态运行过程。通过实验来理解和掌握磁盘调度的职能。二、 实验内容:分别模拟如下电梯调度算法,对磁盘进行移臂操作:l 先来先服务算法l 最短寻道优先算法l 电梯算法三、 实验要求:1、 假设磁盘只有一个盘面,并

2、且磁盘是可移动头磁盘。2、 磁盘是可供多个进程共享的存储设备,但一个磁盘每个时刻只能为一个进程服务。当有进程在访问某个磁盘时,其它想访问该磁盘的进程必须等待,直到磁盘一次工作结束。当有多个进程提出输入输出请求而处于等待状态时,可用磁盘调度算法从若干个等待访问者中选择一个进程,让它访问磁盘。为此设置“驱动调度”进程。3、 由于磁盘与处理器是并行工作的,所以当磁盘在为一个进程服务时,占有处理器的其它进程可以提出使用磁盘(这里我们只要求访问磁道),即动态申请访问磁道,为此设置“接受请求”进程。4、 为了模拟以上两个进程的执行,可以考虑使用随机数来确定二者的允许顺序,参考程序流程图。5、 “接受请求”

3、进程建立一张“进程请求I/O”表,指出等待访问磁盘的进程要求访问的磁道,表的格式如下:进程名要求访问的磁道号6、 磁盘调度的功能是查“请求I/O”表,当有等待访问的进程时,按磁盘调度算法从中选择一个等待访问的进程,按其指定的要求访问磁道。流程图中的“初始化”工作包括:初始化“请求I/O”表,设置当前移臂方向;当前磁道号。并且假设程序运行前“请求I/O”表中已有若干进程(48个)申请访问相应磁道。四、 程序流程图:开始初始化磁盘调度随机数1/2继续?接受请求输入在0,1区间内的随机数结束五参考程序代码:#include <stdlib.h> #include<iostream.

4、h>#include<cmath>typedef struct nodeint data;struct node *next;Node;void main()void fcfs(Node *,int,int);/声明先来先服务函数FCFSvoid sstf(Node *,int,int);/声明最短寻道时间优先函数SSTFvoid scan(Node *,int,int);/声明扫描函数SCANvoid print(Node *); /输出链表函数Node *head,*p,*q; /建立一个链表int it,c=0,f,s; /c为链表长度,f是开始的磁道号,s是选择哪个算

5、法head=(Node *)malloc(sizeof(Node);head->next=NULL;q=head;cout<<" /*磁盘调度算法*/"<<endl;cout<<endl;cout<<"新建一个单链表,以0作为结束标志:"cin>>it;while(it!=0)p=(Node *)malloc(sizeof(Node);p->next=NULL;p->data=it;q->next=p;q=p;cin>>it;c+;cout<<&q

6、uot;从几号磁道开始:"cin>>f; /f为磁道号print(head);cout<<"链表长度为:"<<c<<endl;cout<<"1、先来先服务算法FCFS"<<endl;cout<<"2、最短寻道时间优先算法SSTF"<<endl;cout<<"3、电梯调度算法(扫描算法SCAN)"<<endl;cout<<"0、退出"<<endl

7、;cout<<"请选择:"cin>>s;while(s!=0) switch(s) case 1:cout<<"你选择了:先来先服务算法FCFS"<<endl;fcfs( head,c,f);break; case 2:cout<<"你选择了:最短寻道时间优先算法SSTF"<<endl;sstf( head,c,f);break; case 3:cout<<"你选择了:电梯调度算法(扫描算法SCAN)"<<endl;sc

8、an( head,c,f);break; cout<<"退出请选0,继续请选1,2,3:" cin>>s;/*/void fcfs(Node *head,int c,int f)/先来先服务算法void print(Node *);Node *l;/*m,*n;float num=0; /num为平均寻道长度 l=head->next;for(int i=0;i<c;i+)num+=abs(l->data-f);f=l->data;l=l->next;num=num/c;cout<<"先来先服务的寻

9、道顺序是:"<<endl;print(head);cout<<"平均寻道长度:"<<num<<endl;/*/void sstf(Node *head,int c,int f)/最短寻道时间优先算法void print(Node *);Node *p,*q,*r,*s,*l,*m;l=(Node *)malloc(sizeof(Node);l->next=NULL;m=l;q=head;p=head->next;s=head;r=head->next;float num=0;for(int i=0;

10、i<c;i+)int min=abs(f-r->data);for(int j=0;j<c-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;cout<

11、;<"最短寻道时间优先顺序是:"<<endl;print(l);cout<<"平均寻道长度:"<<num<<endl;/*/void scan(Node *head,int c,int f)/扫描算法(电梯调度算法)void print(Node *);int min,max,i=0,j=0;float num=0;Node *p,*q,*r,*s,*m,*n,*x,*y; r=(Node *)malloc(sizeof(Node);/存放比开始磁道小的磁道r->next=NULL;s=r;m=

12、(Node *)malloc(sizeof(Node);/存放比开始磁道大的磁道m->next=NULL;n=m;x=(Node *)malloc(sizeof(Node);x->next=NULL;y=x;q=head;p=head->next;while(p->next!=NULL)if(p->data-f>0)q->next=p->next;p->next=NULL;n->next=p;n=p;p=q->next;i+;elseq->next=p->next;p->next=NULL;s->next

13、=p;s=p;p=q->next;j+;if(p->data>=f)n->next=p;n=p;i+;elses->next=p;s=p;j+;q=r; /对比开始磁道小的磁道排序p=r->next;while(q->next->next!=NULL)q=q->next;p=q->next;max=q->data;while(p->next!=NULL)if(p->data>max)max=p->data;p->data=q->data;q->data=max;max=q->dat

14、a;p=p->next;if(p->data>max)max=p->data;p->data=q->data;q->data=max;max=q->data;/print(r);q=m;p=m->next;while(q->next->next!=NULL)q=q->next;p=q->next;min=q->data;while(p->next!=NULL)if(p->data<min) min=p->data; p->data=q->data; q->data=mi

15、n; min=q->data;p=p->next;if(p->data<min)min=p->data;p->data=q->data;q->data=min;min=q->data;/print(m);x=m;p->next=r->next;y=x->next;while(y->next!=NULL)num+=abs(f-y->data);f=y->data;y=y->next;num+=abs(f-y->data);num=num/c;cout<<"扫描算法的顺序是:"<<endl;print(x);cout<<"平均寻道长度为:"<<num<<endl;/*/void print(Node *head) /输出链表Node *p;p=head->next;cout<<"单链表显示:"if(p=NULL)cout<<"单链表为空:"else if(p->next=NULL)cout<<p->data;elsewhile(p->next!=NULL

温馨提示

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

评论

0/150

提交评论