磁盘调度算法

          一次磁盘读写操作的时间由寻找(寻道)时间延迟时间传输时间决定。

          (1)、寻找时间Ts : 活动头磁盘在读写信息前,将磁头移动到指定磁道所需的时间。这个时间除跨越 n 条磁道的时间外,还包括启动磁臂的时间 s ,

               即   Ts = m * n + s 

                     备注:m 是与磁盘驱动器速度有关的常数,约为 0.2ms ,磁臂的启动时间约为 2ms

          (2)、延迟时间 Tr :磁头定位到某一磁道的扇区(块号)所需要的时间,设磁盘的旋转速度为 r ,则

                    Tr = 1 / 2r 

                     对于硬盘,典型的旋转速度为  5400 r/m ,相当于一周 11.1 ms ,则 Tr 为 5.55 ms ;对于软盘,其旋转速度在 300 ~ 600 r/m之间,则  Tr 为

              50 ~ 100 ms

          (3)、传输时间 Tt :从磁盘读出或向磁盘写入数据所经历的时间的,这个时间取决于每次所读 / 写 的字节数 b 和i磁盘的旋转速度:

                    Tt = b / rN

                   备注:r 为磁盘每秒钟的转数;N 为一个磁道上的字节数


                   在磁盘存取时间的计算中,寻道时间和磁盘调度算法相关,下面将介绍分析几种算法,而延迟时间和传输时间都与磁盘旋转速度相关,且为线性

               相关,所以在硬件上,转速是磁盘性能的一个非常重要的参数。

                    总平均存取时间   Ta 可以表示为:

                          Ta = Ts + 1 / 2r + b / rN

                    虽然这里给出了总平均存取时间的公式,但是这个平均值是没有太大的实际意义的,因为在实际的磁盘 I / O 操作中,存取时间和磁盘调度算法

                 密切相关。调度算法直接决定寻找时间,从而决定了总的存取时间

          ---------------------------------------------------------------------------------------------------------------

         目前常用的磁盘调度算法有以下几种:

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

                FCFS 算法根据进程请求访问磁盘的先后顺序进行调度,这是一种最简单的调度算法。该算法的优点是具有公平性。如果只有少量进程需要访问,且大部分

         请求都是访问簇聚的文件扇区,则有望达到较好的性能;如果有大量进程竞争使用磁盘,那么这种算法在性能上往往接近于随机调度。所以,实际磁盘调度中

         考虑一些更为复杂的调度算法。 

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

                 SSTF算法选择调度处理的磁道是与当前磁头所在磁道距离最近的磁道,以使每次的寻找时间最短。当然,总是选择最小寻找时间并不能保证平均寻找

           时间最小,但是能提供比 FCFS 算法更好的性能。这种算法会产生“饥饿”现象。

         (3)、扫描(SCAN)算法(又称为电梯算法)

                     SCAN算法在磁头当前移动方向上选择与当前磁头所在磁道最近的请求作为下一次服务的对象,实际上就是在最短寻道时间优先算法的基础上规定了磁头

           运动的方向。

                     由于磁头移动规律与电梯运行相似,又称为电梯调度算法。SCAN 算法对最近扫描过的区域不公平,因此,它在访问局部性方面不如 FCFS 算法和SSTF

           算法好。

                    补充:采用 SCAN 算法时,不但要知道磁头的当前位置,还要知道磁头的移动方向。

         (4)、循环扫描(C-SCAN)算法

                    在扫描算法的基础上规定磁头单向移动来提供服务,回返时直接快速移动至起始端而不是服务任何请求。由于SCAN 算法偏向于处理那些接近最里或最外

           的磁道的访问请求,所以使用改进型的 C-SCAN 算法来避免这个问题。

                    采用 SCAN 算法和 C-SCAN 算法时磁头总是严格地遵循从盘面的一端到另一端,显然,在使用时还可以改进,即磁头移动只需要到达最远端的一个请求

          即可返回,不需要到达磁盘端点。这种形式的 SCAN 算法和 C-SCAN 算法称为 LOOK 和 C-LOOK 调度。这是因为它们在朝一个给定方向前会查看是否有请求。

          注意,若无特别说明,也可以默认 SCAN 算法和 C-SCAN 算法为LOOK 和 C-LOOK 调度。

         ------------------------------------------------------------------------------------------------------------------------

                 对于操作系统整体框架不太熟悉的读者经常会混淆磁盘调度算法中的循环扫描算法和页面调度算法中的 CLOCK 算法,请读者注意区分。

                对比以上几种磁盘调度算法,FCFS 算法过于简单,性能较差,仅在请求队列长度接近于 1 时才较为合理;SSTF 算法较为通用和自然;SCAN 算法和 C-SCAN

         算法在磁盘负载较大时比较占优势,它们之间的比较见下表:

                 磁盘调度算法_第1张图片

                  除了减少寻找时间外,减少延迟时间也是提高磁盘传输效率的重要因素。可以对磁盘扇区进行交替编号,对磁盘片组中的不同盘面错位命名

                  磁盘是连续自转设备,磁头读 / 写一个物理块后,需要警告过短暂的处理时间才能开始读 / 写下一块。假设逻辑记录数据连存放在磁盘空间中,

           若在盘面上按扇区交替编号连续存放,则连续 读 / 写多少个记录时能减少磁头的延迟时间;同柱面不同盘面的扇区若能错位编号,连续 读 / 写 相邻

           两个盘面的逻辑记录时也能减少磁头延迟时间。

                  磁盘寻块时间分为三部分,寻道时间、延迟时间和传输时间,寻道时间和延迟时间属于“找”的时间,凡是“找”的时间都可以通过一定的方法削减,但

           传输时间是磁盘本身性能所决定的,不能通过一定的措施减少。         

                     

                 


                    

           

              

          

你可能感兴趣的:(操作系统)