第六讲磁盘调度算法.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六讲磁盘调度算法剖析

* 计算机科学与技术学院 操作系统实验 实验安排 序号 实验项目名称 实验学时 实验要求 完成要求 1 实验环境的使用 2 熟悉操作系统集成实验环境OS Lab的基本使用方法。 必做 2 操作系统的启动 6 了解操作系统的启动过程。 必做 3 进程的创建 6 掌握创建进程的方法,理解进程和程序的区别;了解进程的创建过程,理解进程是资源的分配单位。 必做 4 进程的同步 4 理解进程同步的意义;理解进程同步的原理。 选做 5 物理存储器与进程 逻辑地址空间的管理 6 掌握进程逻辑地址空间的管理方法,掌握物理存储器的管理方法。 必做 本次 磁盘调度算法 8 掌握磁盘调度算法执行的条件和时机,了解常用的磁盘调度算法,加深对各种扫描算法的理解。 必做 1.实 验 目 的 通过学习EOS实现磁盘调度算法的机制,掌握磁盘调度算法执行的条件和时机。 观察EOS实现的FCFS、SSTF和SCAN磁盘调度算法,了解常用的磁盘调度算法。 编写CSCAN和N-Step-SCAN磁盘调度算法,加深对各种扫描算法的理解。 2.多线程并发访问软盘 磁盘调度算法在EOS中的位置 磁盘调度算法 执行的条件、执行的时机、操作的对象 当多个线程并发访问磁盘时,只能有一个线程访问磁盘(独占磁盘),而其它的线程会被阻塞,待独占磁盘的线程结束访问操作后,才能唤醒一个阻塞的线程,令其继续独占访问磁盘。 这里提到的唤醒一个阻塞的线程的过程,就是磁盘调度算法工作的过程。可能会有多个线程由于并发访问磁盘而被阻塞,磁盘调度算法就是根据不同的策略,从中选择一个合适的线程来唤醒。 准确的说,磁盘调度算法操作的对象是——由于并发访问同一个磁盘设备而被阻塞的多个线程。 执行的条件、执行的时机、操作的对象 条件:多个线程并发访问同一个磁盘设备才会触发磁盘调度算法。单个线程访问磁盘不会触发磁盘调度算法。 时机:将阻塞线程唤醒时执行调度,而不是将线程阻塞时执行调度。 对象:由于并发访问同一个磁盘设备而被阻塞的多个线程。 3.EOS中实现的磁盘调度算法 目前EOS只管理了一个块设备——软盘驱动器,为了尽量简单,EOS只考虑对这个唯一的块设备进行磁盘调度。 为每个访问磁盘的线程创建一个对应的请求,并将这些请求放入一个请求队列中。 在块设备读写函数IopReadWriteSector中依次处理请求队列中的请求,各个请求被处理的顺序由磁盘调度算法决定。 在函数IopDiskSchedule中实现各种磁盘调度算法。 控制台命令“ds”专门用来测试磁盘调度算法。 4.专门用来测试磁盘调度算法的控制台命令“ds” 该控制台命令是在ke/sysproc.c文件中的ConsoleCmdDiskSchedule函数内实现的。在该函数执行的过程中,首先让当前线程访问一次磁盘上的某个磁道,从而设置磁头的初始位置,然后将磁盘设备的状态设置为忙,并创建多个访问不同磁道的线程。由于磁盘设备忙,这些线程的请求都会被放入请求队列中,直到被磁盘调度算法选中后才会被处理。最后触发磁盘调度算法,按照调度策略依次处理请求队列中的所有请求。 优点: 方便指定线程的数量、各个线程要访问的磁道号以及线程被阻塞的顺序。 与磁盘上使用的文件系统无关。 ke/sysproc.c文件中的ConsoleCmdDiskSchedule函数 PRIVATE VOID ConsoleCmdDiskSchedule( IN HANDLE StdHandle ) { PREQUEST pNextRequest; extern BOOL IsDeviceBusy; ULONG StartCylinder = 10; AccessCylinderThread((PVOID)StartCylinder); //初始化访问第10号柱面 fprintf(StdHandle, Start Cylinder: %d\n, StartCylinder); IsDeviceBusy = TRUE; NewThreadAccessCylinder(StdHandle, 8); //被阻塞的线程 NewThreadAccessCylinder(StdHandle, 21); …… NewThreadAccessCylinder(StdHandle, 10); pNextRequest = IopDiskSchedule(); //运行磁盘调度算法 PsSetEvent(pNextRequest-Event); } FCFS算法磁头移动的轨迹 总寻道数360 寻道次数 10 平均寻道数 36 当前磁头停留在10磁道,请求

文档评论(0)

1520520 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档