《2022年操作系统磁盘调度 .pdf》由会员分享,可在线阅读,更多相关《2022年操作系统磁盘调度 .pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验四磁盘调度一、实验目的:磁盘是高速、大容量、旋转型、可直接存取的存储设备。它作为计算机系统的辅助存储器,担负着繁重的输入输出工作,在现代计算机系统中往往同时会有若干个要求访问磁盘的输入输出要求。系统可采用一种策略, 尽可能按最佳次序执行访问磁盘的请求。由于磁盘访问时间主要受寻道时间T 的影响,为此需要采用合适的寻道算法,以降低寻道时间。本实验要求学生模拟设计一个磁盘调度程序,观察调度程序的动态运行过程。通过实验让学生理解和掌握磁盘调度的职能。二、实验题目:模拟电梯调度算法,对磁盘进行移臂操作三、提示及要求:1、 假设磁盘只有一个盘面,并且磁盘是可移动头磁盘。2、 磁盘是可供多个进程共享的存
2、储设备,但一个磁盘每个时刻只能为一个进程服务。当有进程在访问某个磁盘时,其它想访问该磁盘的进程必须等待,直到磁盘一次工作结束。当有多个进程提出输入输出请求而处于等待状态时,可用电梯调度算法从若干个等待访问者中选择一个进程,让它访问磁盘。为此设置“驱动调度”进程。3、 由于磁盘与处理器是并行工作的,所以当磁盘在为一个进程服务时,占有处理器的其它进程可以提出使用磁盘(这里我们只要求访问磁道),即动态申请访问磁道,为此设置“接受请求”进程。4、 为了模拟以上两个进程的执行,可以考虑使用随机数来确定二者的允许顺序,程序结构图参考附图:5、 “接受请求”进程建立一张“进程请求I/O”表,指出等待访问磁盘
3、的进程要求访问的磁道,表的格式如下:进程名要求访问的磁道号6、“磁盘调度”的功能是查“请求I/O”表,当有等待访问的进程时,按电梯调度算法(SCAN 算法)从中选择一个等待访问的进程,按其指定的要求访问磁道。SCAN算法参考课本第九章。算法模拟框图略。7、 图 1 中的“初始化”工作包括:初始化“请求I/O”表,设置置 当前移臂方向;当前磁道号 。并且假设程序运行前“请求I/O”表中已有若干进程(48 个)申请访问相应磁道。四、实验报告:1、 实验题目。2、 程序中用到的数据结构及其说明。3、 打印源程序并附注释。4、 实验结果内容如下:打印“请求I/O”表,当前磁道号,移臂方向,被选中的进程
4、名和其要求访问的磁道,看是否体现了电梯调度(SCAN )算法。5、 体会与问题。五、流程图:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - 六程序代码:#include #include using namespace std; typedef struct node int data; struct node *next; Node; void main() void fcfs(Node *,int,int); void ss
5、tf(Node *,int,int); void scan(Node *,int,int); void print(Node *); Node *head,*p,*q; int it,c=0,f,s; head=(Node *)malloc(sizeof(Node); head-next=NULL; q=head; cout /*磁盘调度算法 */endl; coutendl; coutit; 开始初始化磁盘调度随机数 1/2 继续?接受请求输入在 0,1区间内的随机数结束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心
6、整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - while(it!=0) p=(Node *)malloc(sizeof(Node); p-next=NULL; p-data=it; q-next=p; q=p; cinit; c+; coutf; print(head); cout 链表长度为 :cendl; cout1 、先来先服务算法FCFSendl; cout2 、最短寻道时间优先算法SSTFendl; cout3 、电梯调度算法(扫描算法 SCAN)endl; cout0 、退出 endl; couts; while(s!=0) swit
7、ch(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; couts; void fcfs(Node *head,int c,int f)/先来先服务算法 void print(Node *); Node *l;/*m,*n; float num=0; 名师资料总结 - - -精
8、品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - l=head-next; for(int i=0;idata-f); f=l-data; l=l-next; num=num/c; cout 先来先服务的寻道顺序是:endl; print(head); cout 平均寻道长度 :numnext=NULL; m=l; q=head; p=head-next; s=head; r=head-next; float num=0; for(int i=0;idat
9、a); for(int j=0;jnext; q=q-next; if(abs(f-p-data)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; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页 - - - - - - - - - q=head; p=head-next; s=head; r=head-next; num=num/c;
10、cout 最短寻道时间优先顺序是:endl; print(l); cout 平均寻道长度 :numnext=NULL; s=r; m=(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-f0) q-next=p-next; p-next=NULL; n-next=p; n=p; p=q-next; i+; else q-next=p-next; p-nex
11、t=NULL; s-next=p; s=p; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - p=q-next; j+; if(p-data=f) n-next=p; n=p; i+; else s-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-da
12、tamax) max=p-data; p-data=q-data; q-data=max; max=q-data; p=p-next; if(p-datamax) max=p-data; p-data=q-data; q-data=max; max=q-data; /print(r); q=m; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - p=m-next; while(q-next-next!=NULL) q=q-next
13、; p=q-next; min=q-data; while(p-next!=NULL) if(p-datadata; p-data=q-data; q-data=min; min=q-data; p=p-next; if(p-datadata; 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 平均寻道长度为:numnext; cout 单链表显示 :; if(p=NULL) coutnext=NULL) coutdata; else while(p-next!=NULL) coutdata; p=p-next; coutdataendl; 七运行结果:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -
限制150内