ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:35.93KB ,
资源ID:4162104      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4162104.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(模拟电梯调度算法实现对磁盘的驱动调度.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

模拟电梯调度算法实现对磁盘的驱动调度.docx

1、模拟电梯调度算法实现对磁盘的驱动调度操作系统实验(第三次)一、实验内容模拟电梯调度算法,实现对磁盘的驱动调度。二、实验目的 磁盘是一种高速、大容量、旋转型、可直接存取的存储设备。它作为计算机系统的辅 助存储器, 担负着繁重的输入输出任务、 在多道程序设计系统中, 往往同时会有若干个要求 访问磁盘的输入输出请求等待处理。 系统可采用一种策略, 尽可能按最佳次序执行要求访问 磁盘的诸输入输出请求。 这就叫驱动调度, 使用的算法称为驱动调度算法。 驱动调度能降低 为若干个输入输出请求服务所需的总时间, 从而提高系统效率。 本实验要求学生模拟设计一 个驱动调度程序, 观察驱动调度程序的动态运行过程。

2、通过实验使学生理解和掌握驱动调度 的职能。三、实验题目模拟电梯调度算法,对磁盘进行移臂和旋转调度。提示:(1)磁盘是可供多个进程共享的存储设备,但一个磁盘每时刻只能为一个进程服务。 当有进程在访问某个磁盘时,其他想访问该磁盘的进程必须等待,直到磁盘一次工作结束。 当有多个进程提出输入输出要求而处于等待状态时, 可用电梯调度算法从若干个等待访问者 中选择一个进程,让它访问磁盘。选择访问者的工作由“驱动调度”进程来完成。由于磁盘与处理器是可以并行工作的、所以当磁盘在作为一个进程服务时,占有处理 器的另一进程可以提出使用磁盘的要求,也就是说,系统能动态地接收新的输入输出请求。为了模拟这种情况,在本实

3、验中设置了一个“接收请求”进程。“驱动调度”进程和“接收请求”进程能否占有处理器运行,取决于磁盘的结束中断信号和处理器调度策略。 在实验中可用随机数来模拟确定这两个进程的运行顺序, 以代替中断四、 处理和处理器调度选择的过程。因而,程序的结构可参考图 31(2)“接收请求”进程建立一张“请求 I/O”表,指出访问磁盘的进程要求访问的物理地址,表的格式为:1进程名柱面号雄道号物理记求号假定某个磁盘组共有 200个柱面,由外向里顺序编号(0 199),每个柱面上有20个 磁道,编号为0 19,每个磁道分成 8个物理记录,编号 07。进程访问磁盘的物理地址 可以用键盘输入的方法模拟得到。图 32是“

4、接收请求”进程的模拟算法。在实际的系统中必须把等待访问磁盘的进程排入等待列队,由于本实验模拟驱动调度,为简单起见,在实验中可免去队列管理部分, 故设计程序时可不考虑“进程排入等待队列”的工作。(3)“驱动调度”进程的功能是查“请求 I/O ”表,当有等待访问磁盘的进程时,按 电梯调度算法从中选择一个等待访问者,按该进程指定的磁盘物理地址启动磁盘为其服务。对移动臂磁盘来说,驱动调度分移臂调度和旋转调度。电梯调度算法的调度策略是与移动臂的移动方向和移动臂的当前位子有关的, 所以每次启动磁盘时都应登记移动臂方向和 当前位子。 电梯调度算法是一种简单而实用的驱动调度方法, 这种调度策略总是优先选择与

5、当前柱面号相同的访问请求, 从这些请求中再选择一个能使旋转距离最短的等待访问者。 如 果没有与当前柱面号相同的访问请求, 则根据移臂方向来选择, 每次总是沿臂移动方向选择 一个与当前柱面号最近的访问请求,若沿这个方向没有访问请求时,就改变臂的移动方向。 这种调度策略能使移动臂的移动频率极小, 从而提高系统效率。 用电梯调度算法实现驱动调 度的模拟算法如图 3 3。(4)图 3 1 中的初始化工作包括,初始化“请求 I/O ”表,置当前移臂方向为里移;置当前位置为 0 号柱面, 0 号物理记录。程序运行前可假定 “请求 I/O ”表中已经有如干个 进程等待访问磁盘。在模拟实验中,当选中一个进程可

6、以访问磁盘时,并不实际地启动磁盘,而用显示: “请 求 I/O ”表;当前移臂方向;当前柱面号,物理记录号来代替图 3 3 中的“启动磁盘”这项工作。 3-3电梯训哎樓扣算住(1)程序中使用的数据结构及其说明。(2) const int PCB=100; ylinder != NULL i+)(4)(5)cout i pcbspcbs_num.Cylinder pcbspcbs_num.Track pcbspcbs_ num.Record;(9)pcbs_ num+;(10) (11) int Cylinder_e() ylinder =(12)return i;(13)(14)return

7、0;(15)(16) int Cylinder_near( int cylinder , int record ) ylinder = cylinder )(17)(18)a = pcbsi.Record - record ;(19)if (a0) a = a + 8; (20)if (at)(21)(22)t = a; k = i;(23)(24)(25)(26)return k;cylinder )(28) int Cylinder_max( int cylinder ) ylinder -cylinder )(29)(30)t = abs(pcbsi.Cyli nder -cylinde

8、r );(31)(32)num = cyli nder + t; yli nder=num &pcbsi.Record t)(33)(34)t = pcbsi.Record; a = i;(35)(36)(37)return a;(38)(39)int Cylinder_max1( int cylinder )(40)(41)int t = 199, i, b = 0, c = 0;(42)for (i = 0; ib & pcbsi.Cylinder cylinder )(45)(46)b = abs(pcbsi.Cyli nder -cylinder );(47)(48)(49)retur

9、n b;(50)(51)int Cylinder_min( int cylinder ) ylinder - cylinder )t & pcbsi.Cylinder cylinder )(53)t = abs(pcbsi.Cyli nder -cylinder );(54)(55)(56)num=cyli nder - t; t = 8; yli nder =num & pcbsi.Record t)(57)(58)t = pcbsi.Record; a = i;(59)(60)(61)return a; name setfill() setw(8) pcbsi.Cylinder setfi

10、ll( ) setw(8) pcbsi.Track setfill() setw(10) pcbsi.Record en dl;(62)(63) (64) void print_scan( bool x)(65) (66)cout 选中的: endl; cout 进程名 柱面号 磁道号物理记录号 方向 endl; cout setfill() setw(6) setfill() setw(8) setfill( ) setw(10) setfill( ) setw(10) setfill( ) setw(6) x endl; |(67) (68) intSCAN() ylinder = yli

11、 nderv(69)(70)way = 0;(71)(72)else way = 1;(74)else(75)(76)if (way = 1) |(77)(78)scan = Cylinder_max; /选择比当前柱面号大的请求中物理块号最小的(79)sca n1 = Cyli nder_max1;(80)if (scan = scan1)(81)(82)北的sca n = Cyli nder_mi n;(83)way = 0;(84)(85)(86)else(87)(88)sca n = Cyli nder_mi n;(89)if (scan = 0)(90)(91)sca n = Cyl

12、i nder_max;(92)way = 1;(93)口冃 号最/选择比当前柱面号小的请求中物理块(95) a = pcbssca n;(97)pr in t_sca n( way);/打印(98)return 1;(99)(100)(101)void work() / 初始化(102)(103)float n; char y = y ; while (y = y | y = Y)(104)(105)cout 输入在0 , 1区间内的一个随机数 n;(107)if (n(108)(109)SCAN(); /驱动调度(110)(111)else(112)(113)accept。; /接受请求(114)(115)cout 继续?( y/n ) y;(117)(118)(119)void main()(120)(121)work();(4)打印驱动调度进程每次选择访问请求前的“请求I/O ”表以及每次选中的进程名、访问的柱面号、物理记录号和当前移臂方向(用 up代表里移,dow n代表外移

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1