![实验三___驱动调度_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-6/7/fe31c931-9454-4cd1-ae76-452258c1fa0f/fe31c931-9454-4cd1-ae76-452258c1fa0f1.gif)
![实验三___驱动调度_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-6/7/fe31c931-9454-4cd1-ae76-452258c1fa0f/fe31c931-9454-4cd1-ae76-452258c1fa0f2.gif)
![实验三___驱动调度_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-6/7/fe31c931-9454-4cd1-ae76-452258c1fa0f/fe31c931-9454-4cd1-ae76-452258c1fa0f3.gif)
![实验三___驱动调度_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-6/7/fe31c931-9454-4cd1-ae76-452258c1fa0f/fe31c931-9454-4cd1-ae76-452258c1fa0f4.gif)
![实验三___驱动调度_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-6/7/fe31c931-9454-4cd1-ae76-452258c1fa0f/fe31c931-9454-4cd1-ae76-452258c1fa0f5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验三 驱动调度一、实验内容模拟电梯调度算法,实现对磁盘的驱动调度。二、实验目的 磁盘是一种高速、大容量、旋转型、可直接存取的存储设备。它作为计算机系统的辅助存储器,担负着繁重的输入输出任务、在多道程序设计系统中,往往同时会有若干个要求访问磁盘的输入输出请求等待处理。系统可采用一种策略,尽可能按最佳次序执行要求访问磁盘的诸输入输出请求。这就叫驱动调度,使用的算法称为驱动调度算法。驱动调度能降低为若干个输入输出请求服务所需的总时间,从而提高系统效率。本实验要求学生模拟设计一个驱动调度程序,观察驱动调度程序的动态运行过程。通过实验使学生理解和掌握驱动调度的职能。三、实验题目模拟电梯调度算法,对磁盘
2、进行移臂和旋转调度。提示:(1)磁盘是可供多个进程共享的存储设备,但一个磁盘每时刻只能为一个进程服务。当有进程在访问某个磁盘时,其他想访问该磁盘的进程必须等待,直到磁盘一次工作结束。当有多个进程提出输入输出要求而处于等待状态时,可用电梯调度算法从若干个等待访问者中选择一个进程,让它访问磁盘。选择访问者的工作由“驱动调度”进程来完成。 由于磁盘与处理器是可以并行工作的、所以当磁盘在作为一个进程服务时,占有处理器的另一进程可以提出使用磁盘的要求,也就是说,系统能动态地接收新的输入输出请求。为了模拟这种情况,在本实验中设置了一个“接收请求”进程。“驱动调度”进程和“接收请求”进程能否占有处理器运行,
3、取决于磁盘的结束中断信号和处理器调度策略。在实验中可用随机数来模拟确定这两个进程的运行顺序,以代替中断处理和处理器调度选择的过程。因而,程序的结构可参考图31初始化输入在0,1区间内的一个随机数随机数>1/2开始驱动调度接受请求继续?结束是是否否图31 程序结构(2)“接收请求”进程建立一张“请求I/O”表,指出访问磁盘的进程要求访问的物理地址,表的格式为:进程名柱面号磁道号物理记录号 假定某个磁盘组共有200个柱面,由外向里顺序编号(0199),每个柱面上有20个磁道,编号为019,每个磁道分成8个物理记录,编号07。进程访问磁盘的物理地址可以用键盘输入的方法模拟得到。图32是“接收请
4、求”进程的模拟算法。 开始有请求?输入:进程名物理地址进程排入等待队列登记“请求I/O表返回是否 图 32 “接收请求”模拟算法在实际的系统中必须把等待访问磁盘的进程排入等待列队,由于本实验模拟驱动调度,为简单起见,在实验中可免去队列管理部分,故设计程序时可不考虑“进程排入等待队列”的工作。(3)“驱动调度”进程的功能是查“请求I/O”表,当有等待访问磁盘的进程时,按电梯调度算法从中选择一个等待访问者,按该进程指定的磁盘物理地址启动磁盘为其服务。对移动臂磁盘来说,驱动调度分移臂调度和旋转调度。电梯调度算法的调度策略是与移动臂的移动方向和移动臂的当前位子有关的,所以每次启动磁盘时都应登记移动臂方
5、向和当前位子。电梯调度算法是一种简单而实用的驱动调度方法,这种调度策略总是优先选择与当前柱面号相同的访问请求,从这些请求中再选择一个能使旋转距离最短的等待访问者。如果没有与当前柱面号相同的访问请求,则根据移臂方向来选择,每次总是沿臂移动方向选择一个与当前柱面号最近的访问请求,若沿这个方向没有访问请求时,就改变臂的移动方向。这种调度策略能使移动臂的移动频率极小,从而提高系统效率。用电梯调度算法实现驱动调度的模拟算法如图33。(4)图31中的初始化工作包括,初始化“请求I/O”表,置当前移臂方向为里移;置当前位置为0号柱面,0号物理记录。程序运行前可假定“请求I/O”表中已经有如干个进程等待访问磁
6、盘。在模拟实验中,当选中一个进程可以访问磁盘时,并不实际地启动磁盘,而用显示:“请求I/O”表;当前移臂方向;当前柱面号,物理记录号来代替图33中的“启动磁盘”这项工作。置当前移臂方向为向外移置当前移臂方向为向外移从大于当前柱面号的访问请求中选择一个最小者从小于当前柱面号的访问请求中选择一个最大者登记当前位置;柱面号;物理记录号;启动磁盘被选者退出“请求I/O”表返回开 始否否查“请求I/O表”有等待访问者?返回有与当前柱面号相同的访问者?是否否否是是是是选择能使旋转距离最短的访问者当前移臂方向是向里?有比当前柱面号大的访问请求?有比当前柱面号小的访问请求?图33 电梯调度模拟算法四、实验报告
7、(1)实验题目。(2)程序中使用的数据结构及其说明。(3)打印一份源程序并附上注释。(4)打印驱动调度进程每次选择访问请求前的“请求I/O”表以及每次选中的进程名、访问的柱面号、物理记录号和当前移臂方向(用up代表里移,down代表外移。打印格式为:“请求I/O”表进程名 柱面号 物理记录号 方向五、数据结构/请求I/O表struct Requie_I_Ostring Pro_Name;/进程名int Cy_Num;/柱面号int Track_Num;/磁道号int Phy_Re_Num;/物理记录号char *Direction;/方向I_O100, a100;/定义两个变量数组,代表等待访
8、问磁盘的若干个进程struct Requie_I_O Cur_Location;/当前位置int last;/最后一个等待访问磁盘的进程的下标六、源代码#include<iostream>#include<string>#include<ctime>using namespace std;/请求I/O表struct Requie_I_Ostring Pro_Name;/进程名int Cy_Num;/柱面号int Track_Num;/磁道号int Phy_Re_Num;/物理记录号char *Direction;/方向I_O100, a100;/定义两个变量
9、数组,代表等待访问磁盘的若干个进程struct Requie_I_O Cur_Location;/当前位置int last;/最后一个等待访问磁盘的进程的下标/初始化请求I/O表void Init_I_O()Cur_Location.Cy_Num = 0;/当前柱面号Cur_Location.Phy_Re_Num = 0;/当前物理记录号Cur_Location.Direction = "up"/当前方向/已有的若干个(5个)等待访问磁盘的进程I_O0.Pro_Name = "P0" I_O0.Cy_Num = 145; I_O0.Track_Num =
10、 36; I_O0.Phy_Re_Num = 6;I_O1.Pro_Name = "P1" I_O1.Cy_Num = 126; I_O1.Track_Num = 97; I_O1.Phy_Re_Num = 1;I_O2.Pro_Name = "P2" I_O2.Cy_Num = 67; I_O2.Track_Num = 23; I_O2.Phy_Re_Num = 5;I_O3.Pro_Name = "P3" I_O3.Cy_Num = 99; I_O3.Track_Num = 0; I_O3.Phy_Re_Num = 4;I_O4.
11、Pro_Name = "P4" I_O4.Cy_Num = 3; I_O4.Track_Num = 63; I_O4.Phy_Re_Num = 7;I_O5.Pro_Name = "P5" I_O5.Cy_Num = 100; I_O5.Track_Num = 19; I_O5.Phy_Re_Num = 2;last = 5;/接收请求void Accept_Request()char ans;cout << "请问是否有请求?(Y/N)n"cin >> ans;if (ans = 'Y')la
12、st+;cout << "请输入进程名物理地址:进程名、柱面号(0-199)、磁道号(0-99)、物理记录号(0-7)n"cin >> I_Olast.Pro_Name >> I_Olast.Cy_Num >> I_Olast.Track_Num >> I_Olast.Phy_Re_Num;/有请求所以登记请求I/O表/驱动调度void Driven_Scheduling()Cur_Location.Cy_Num = 160;Cur_Location.Phy_Re_Num = 13;Cur_Location.Dir
13、ection = "up"if (last < 0) cout << "无等待访问磁盘的进程!" << endl;/无等待访问所以返回else int count0 = 0;/与当前柱面号相同的访问进程数for (int i = 0; i < last + 1; i+)if (I_Oi.Cy_Num = Cur_Location.Cy_Num)/判断是否有与当前柱面号相同的访问者acount0 = I_Oi; count0+;if (-count0 > 0)/有与当前柱面号相同的访问者0 = 0;/未完成/当前移
14、臂方向为向里else if (string(Cur_Location.Direction) = string("up")int flag=0,m,n=0,temp;/flag=1的时候判断是否满足条件for (int i = 0; i < last + 1; i+)if (I_Oi.Cy_Num > Cur_Location.Cy_Num)flag = 1; n = i; break;temp = I_On.Cy_Num;/将第一个满足条件的值保存在tempif (flag = 1)/有比当前柱面号大的访问者if (last = 0) m = n; /当只有一个
15、元素时,该元素就是我么要找寻的else/在大于当前柱面号的访问者中选择一个最小者for (int i = n; i < last + 1; i+)if (I_Oi.Cy_Num > Cur_Location.Cy_Num)if (temp > I_Oi.Cy_Num) temp = I_Oi.Cy_Num; m = i; /登记当前位置,柱面号、物理记录号Cur_Location.Cy_Num = I_Om.Cy_Num; Cur_Location.Phy_Re_Num = I_Om.Phy_Re_Num;/启动磁盘cout << "请求I/O表n&qu
16、ot;cout << "当前移臂方向为:" << Cur_Location.Direction << endl;cout << "当前柱面号为:" << Cur_Location.Cy_Num << endl;cout << "当前物理记录号为:" << Cur_Location.Phy_Re_Num << endl;for (int i = m; i < last + 1; i+)I_Oi = I_Oi + 1;/被选者
17、退出last-;/数组元素减一else/没有比当前柱面号大的访问请求Cur_Location.Direction = "down"int temp = I_O0.Cy_Num, p = 0;for (int j = 1; j < last + 1; j+)/从小于当前柱面号的访问请求中选择一个最大者if (temp < I_Oj.Cy_Num)temp = I_Oj.Cy_Num;p = j;Cur_Location.Cy_Num = I_Op.Cy_Num; Cur_Location.Phy_Re_Num = I_Op.Phy_Re_Num;cout <
18、< "请求I/O表n"cout << "当前移臂方向为:" << Cur_Location.Direction << endl;cout << "当前柱面号为:" << Cur_Location.Cy_Num << endl;cout << "当前物理记录号为:" << Cur_Location.Phy_Re_Num << endl;for (int i = p; i < last + 1; i+
19、)I_Oi = I_Oi + 1;last-;else/当前移臂方向为向外int flag=0, m, n;for (int i = 0; i < last + 1; i+)if (I_Oi.Cy_Num < Cur_Location.Cy_Num)flag = 1; n = i;break;if (flag=1)/有比当前柱面号小的访问请求int temp = I_On.Cy_Num;for (int i = n ; i < last + 1;i+)if (I_Oi.Cy_Num < Cur_Location.Cy_Num)if (temp <= I_Oi.Cy
20、_Num) temp = I_Oi.Cy_Num; m = i; Cur_Location.Cy_Num = I_Om.Cy_Num; Cur_Location.Phy_Re_Num = I_Om.Phy_Re_Num;cout << "请求I/O表n"cout << "当前移臂方向为:" << Cur_Location.Direction << endl;cout << "当前柱面号为:" << Cur_Location.Cy_Num << endl
21、;cout << "当前物理记录号为:" << Cur_Location.Phy_Re_Num << endl;for (int i = m; i < last + 1; i+)I_Oi = I_Oi + 1;last-;else/没有比当前柱面号小的访问请求Cur_Location.Direction = "up"int temp = I_O0.Cy_Num, p;if (last = 0) p = last; elsefor (int i = 1; i < last + 1; i+)if (temp &
22、gt; I_Oi.Cy_Num) temp = I_Oi.Cy_Num; p = i; Cur_Location.Cy_Num = I_Op.Cy_Num; Cur_Location.Phy_Re_Num = I_Op.Phy_Re_Num;cout << "请求I/O表n"cout << "当前移臂方向为:" << Cur_Location.Direction << endl;cout << "当前柱面号为:" << Cur_Location.Cy_Num << endl;cout << "当前物理记录号为:" << Cur_Location.Phy_Re_Num << endl;for (int i = p; i < last + 1; i+)I_Oi = I_Oi + 1;last-;void main()double number;/double类型的随机数char ans;cout << "-START-n"Init_I_O();/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海股权转让合同模板
- 450亿广告投放框架合同正式签署
- 人力资源和社会保障局与劳动合同法改革探讨
- 个体户全职员工标准劳动合同合同范本
- 个人小型店面租赁合同样本
- 个体药店并购转让合同及附件
- 产业合作投资合同
- 交通事故赔偿合同范本大全
- 个人家政服务劳务合同
- 丧葬礼仪服务合同模板
- 班级管理交流-班主任工作经验交流课件(共28张ppt)
- 建筑装饰工程计量与计价试题一及答案
- 简易劳务合同电子版
- 明代文学绪论
- 通用税务自查情况说明报告(7篇)
- 体育赛事的策划、组织与实施 体育赛事利益相关者
- 分析化学(高职)PPT完整版全套教学课件
- 晚熟的人(莫言诺奖后首部作品)
- m拱顶储罐设计计算书
- 2023外贸业务协调期中试卷
- 新人教鄂教版(2017)五年级下册科学全册教学课件
评论
0/150
提交评论