浅谈磁盘调度算法

         在去年的操作系统考试和今年的软考中,多次提到磁盘调度问题,在此做个总结:

         磁盘调度在多道程序设计的计算机系统中,各个进程可能会不断提出不同的对磁盘进行读/写操作的请求。由于有时候这些进程的发送请求的速度比磁盘响应的还要快,因此我们有必要为每个磁盘设备建立一个等待队列,常用的磁盘调度算法有以下四种:

        1、先来先服务算法(FCFS),

        2、最短寻道时间优先算法(SSTF),

        3、扫描算法(SCAN),

        4、循环扫描算法(CSCAN)

例:假定某磁盘共有200个柱面,编号为0-199,如果在为访问143号柱面的请求者服务后,当前正在为访问125号柱面的请求服务,同时有若干请求者在等待服务,它们每次要访问的柱面号为  
86,147,91,177,94,150,102,175,130

         1、先来先服务算法(FCFS)First Come First Service

这是一种比较简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。

                                     先来先服务 (125)86.147.91.177.94.150.102.175.130

          2、最短寻道时间优先算法(SSTF) Shortest Seek Time First

         该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变化幅度很大。在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。

                                    最短寻道时间优先(125)130.147.150.175.177.102.94.91.86 

          3、扫描算法(SCAN)电梯调度

         扫描算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。例如,当磁头正在自里向外移动时,扫描算法所选择的下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。这时,同样也是每次选择这样的进程来调度,即其要访问的磁道,在当前磁道之内,从而避免了饥饿现象的出现。由于这种算法中磁头移动的规律颇似电梯的运行,故又称为电梯调度算法。此算法基本上克服了最短寻道时间优先算法的服务集中于中间磁道和响应时间变化比较大的缺点,而具有最短寻道时间优先算法的优点即吞吐量较大,平均响应时间较小,但由于是摆动式的扫描方法,两侧磁道被访问的频率仍低于中间磁道。

           电梯调度(125)102.94.91.86.130.147.150.175.177

         4、循环扫描算法(CSCAN)

        循环扫描算法是对扫描算法的改进。如果对磁道的访问请求是均匀分布的,当磁头到达磁盘的一端,并反向运动时落在磁头之后的访问请求相对较少。这是由于这些磁道刚被处理,而磁盘另一端的请求密度相当高,且这些访问请求等待的时间较长,为了解决这种情况,循环扫描算法规定磁头单向移动。例如,只自里向外移动,当磁头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道,即将最小磁道号紧接着最大磁道号构成循环,进行扫描。强调单向!!

循环扫描 (125)130.147.150.175.177.86.91.94.102   

       那么CSCAN与SCAN有什么区别呢?

       SCAN的扫描方式:
起点→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→终点(就是下一个起点)
终点←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←起点
起点→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→终点
。。。。。。

        CSCAN的扫描方式:
起点→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→终点(不是下一个起点,下一个起点还是原来的起点)
←▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬(此时不扫描,只是为了回到原起点)
起点→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→终点
←▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬(此时不扫描,只是为了回到原起点)
起点→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→终点     

        用实例对比如下:

       

          

 

时间: 2024-08-01 14:02:22

浅谈磁盘调度算法的相关文章

浅谈iOS Crash(一)

本文讲的是浅谈iOS Crash(一),一.捕获iOS Crash 1.设置异常断点并运行 设置异常断点.png 说明:设置Xcode异常断点后运行程序,发生Crash时,断点会定位到出错的代码行,但仅适用于开发阶段.线上APP的Crash还需要通过收集Crash机制来捕获Crash并记录在日志中. 2.Mach异常 和 Unix信号 iOS Crash发生时,先产生Mach异常(最底层的内核级异常),然后Mach异常在host层被ux_exception转换为相应的Unix信号,并通过thre

浅谈数据库连接

原文:浅谈数据库连接 必须澄清,虽然文章是我总结整理的,但是很多知识的确不是我能研究分析得出来,通过听培训.看书.实践所总结得出,一方面为了给自己备用,以便以后出现问题能解决,另一方面也希望遇到相同问题的朋友能从中得到一些启示.所以文章里面的知识可能会在很多地方都出现. 我们经常会遇到很多连接问题,同时程序员往往也认为连接数据库只需要简单地连接→openconnection→操作→close,但是一个简单的连接动作,背后往往带有很多东西,充分理解,会对开发及管理有很大的帮助,毕竟连不上服务器其他

Core Data浅谈系列之十 : 关于数据模型中实体的属性

之前写了<Core Data浅谈系列汇总>,今天稍微回顾了下,做些补充. 在这个系列的第一篇<基础结构>中(2013年1月份的文章,时间过得好快啊!),有简单带过Entity的Attribute: 数据类型.布尔值统一用NSNumber来表示: 字符串类型用NSString表示: 时间类型用NSDate表示: 二进制数据类型用NSData表示: 非标准类型用Transformable来表示: 而Attribute还有其自身的Properties,比如Transient表示不用持久化

浅谈SQL Server中的快照

原文:浅谈SQL Server中的快照 简介     数据库快照,正如其名称所示那样,是数据库在某一时间点的视图.是SQL Server在2005之后的版本引入的特性.快照的应用场景比较多,但快照设计最开始的目的是为了报表服务.比如我需要出2011的资产负债表,这需要数据保持在2011年12月31日零点时的状态,则利用快照可以实现这一点.快照还可以和镜像结合来达到读写分离的目的.下面我们来看什么是快照.   什么是快照     数据库快照是 SQL Server 数据库(源数据库)的只读静态视图

浅谈web网站架构演变过程

原文:浅谈web网站架构演变过程 前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变.   该系统具备的功能:   用户模块:用户注册和管理 商品模块:商品展示和管理 交易模块:创建交易和管理    阶段一.单机构建网站 网站的初期,我们经常会在单机上跑我们所有的程序和软件.此时我们使用一个容器,如tomcat.jetty.jboos,然后直接使用JSP/servlet技术,或者使用一些开源的框架如maven+spring+struct+hibernate.

浅谈云计算在大型企业研发信息化中的应用

本文讲的是浅谈云计算在大型企业研发信息化中的应用,[IT168 资讯]虽然IT行业对云计算(Clouding Computing)有不同的看法,但它仍然是近几年最热的IT词汇之一.究竟什么是云计算,它对我们所关注的企业研发信息化有何帮助呢? 比较通俗的说法,云计算就是硬件+软件+服务.这三者并不是简单的相加,对于研发信息化而言,云计算应该定义为,适应研发需求的硬件与软件合理搭配,并为研发提供易用.高效.低成本的信息服务. 对于企业内部来讲,"私有云"是现代企业研发信息化发展的趋势之一.

Dockerfile之优化经验浅谈

本文讲的是Dockerfile之优化经验浅谈,[编者的话]本文主要讲述如何优化Dockerfile,来缩短docker镜像构建需要的时间,以及Dockerfile的一些编辑规范,推荐所有的Docker爱好者阅读,非常基础的文章,本文也许会给你一些启发和指导. 优化您的Dockerfiles Docker镜像应该是小而快的.然而,假设你在BusyBox镜像中预编译GO二进制文件,他们就会变得又大又复杂.如果不能构建一个良好的Dockerfile来帮助你提高构建缓存命中率,那么你的镜像构建过程将会变

游戏云间之浅谈游戏运维

浅谈游戏运维--游戏云间系列三 一款游戏产品上线,仅仅从技术角度来讲,分为软件层次的游戏代码研发,及硬件层次的代码部署上线.劈开代码研发方面不讲,游戏的部署上线,成为我们一个很头疼的问题.为什么头疼?从一些报告显示,大部分的游戏生命周期仅有3个月.按照正规的上线流程,从买服务器,装环境,进IDC机房这么下来,刚把游戏上线,可是游戏却不给力.这样折腾下来,浪费了多少我们的青春?浪费了多少我们的血汗钱? 一般游戏的部署有以下几种方式: 1.托管IDC机房部署. 2.代理商部署. 3.租用vps环境部

浅谈Oracle数据库的建模与设计_oracle

正在看的ORACLE教程是:浅谈Oracle数据库的建模与设计.要开发一个基于数据库的应用系统,其中最关键的一步就是整个系统所依据的数据库的建模设计,从逻辑的到物理的,一个环节疏于设计,整个的应用系统便似建立在危房之上,随着开发过程的不断深入,它要随时面临着各种难  以预料的风险,开发者要为修改或重新设计没有设计好的数据库系统而付出难以预料的代价.所以,一个良好的数据库设计是高效率的系统所必须的.  一.逻辑建模  数据库设计的方法因具体数据库而异,但是建模阶段的相同的,所以可以用一些通用的工具