当前位置: 首页 > news >正文

操作系统导论 第37章:磁盘驱动器

        第36章介绍了 I/O 设备的一般概念,并展示了操作系统如何与这种东西进行交互。在本章中,我们将更详细地介绍一种设备:磁盘驱动器(hard disk drive)。数十年来,这些驱动器一直是计算机系统中持久数据存储的主要形式文件系统技术(即将探讨)的大部分发展都是基于它们的行为。因此,在构建管理它的文件系统软件之前,有必要先了解磁盘操作的细节

                                        关键问题:如何存储和访问磁盘上的数据

        现代磁盘驱动器如何存储数据接口是什么?数据是如何安排和访问的磁盘调度如何提高性能? 

 一、接口

        现代磁盘驱动器的接口。基本接口都非常简单。驱动器由大量扇区(512字节块)组成,每个扇区都可以读取或写入。在具有 n 个扇区的磁盘上,扇区从 0 到 n-1 编号。因此,可以将磁盘视为一组扇区,0 到 n-1 是驱动器的地址空间

         多扇区操作是可能的。实际上,许多文件系统一次读取或写入4KB(或更多)。但是,在更新磁盘时,驱动器制造商唯一保证的是单个512字节的写入是原子的(atomic,即它将完整地完成或者根本不会完成)。因此,如果发生不合时宜的掉电,则只能完成较大写入的 一部分[有时称为不完整写入(torn write)]。

         大多数磁盘驱动器的客户端都会做出一些假设,但这些假设并未直接在接口中指定。 Schlosser 和 Ganger 称这是磁盘驱动器的“不成文的合同”。具体来说,通常可以假设访问驱动器地址空间内两个彼此靠近的块将比访问两个相隔很远的块更快。人们通常也可以假设访问连续块(即顺序读取或写入)是最快的访问模式,并且通常比任何更随机的访问模式快得多。

二、基本几何形状

         现代磁盘的一些组件。我们从一个盘片(platter)开始,它是一个圆形坚硬的表面,通过引入磁性变化来永久存储数据。磁盘可能有一个或多个盘片。每个盘片有两面,每面都称为表面。这些盘片通常由一些硬质材料(如铝)制成,然后涂上薄薄的磁性层,即使驱动器断电,驱动器也能持久存储数据位

        所有盘片都围绕主轴(spindle)连接在一起主轴连接到一个电机,以一个恒定(固定)的速度旋转盘片(当驱动器接通电源时)。旋转速率通常以每分钟转数(Rotations Per Minute, RPM)来测量,典型的现代数值在7200~15000 RPM范围内。请注意,我们经常会对单次旋转的时间感兴趣,例如,以10000 RPM旋转的驱动器意味着一次旋转需要大约6ms。

         数据在扇区的同心圆中的每个表面上被编码。我们称这样的同心圆为一个磁道(track)一个表面包含数以千计的磁道,紧密地排在一起,数百个磁道只有头发的宽度。

         要从表面进行读写操作,我们需要一种机制,使我们能够感应(即读取)磁盘上的磁性图案,或者让它们发生变化(即写入)。读写过程由磁头(disk head)完成;驱动器的每个表面有一个这样的磁头。磁头连接到单个磁盘臂(disk arm)上,磁盘臂在表面上移动, 将磁头定位在期望的磁道上

三、简单的磁盘驱动器

        构建一个磁道的模型,了解磁盘是如何工作的。假设有一个单一磁道的简单磁盘。(图37.1)

        该磁道只有 12 个扇区,每个扇区的大小为512字节(典型的扇区大小), 因此用 0 到 11 的数字表示。这里的单个盘片围绕主轴旋转电机连接到主轴。当然,磁道本身并不太有趣,我们希望能够读取或写入这些扇区,因此需要一个连接到磁盘臂上的磁头,如我们现在所见(图37.2)

 

         在 图37.2 中,连接到磁盘臂末端的磁头位于扇形部分 6 的上方磁盘表面逆时针旋转

        单磁道延迟:旋转延迟

         如何在简单的单道磁盘上处理请求,假设现在收到读取块 0 的请求。磁盘应如何处理该请求

         在简单磁盘中,磁盘不必做太多工作。具体来说,它必须等待期望的扇区旋转到磁头下。这种等待在现代驱动器中经常发生,并且是 I/O 服务时间的重要组成部分,它有一个特殊的名称:旋转延迟。 (rotational delay,有时称为rotation delay)

         在这个例子中,如果完整的旋转延迟是 R,那么磁盘必然产生大约为 R/2 的旋转延迟,以等 待 0 来到读/写磁头下面(如果我们从6开始)。对这个单一磁道,最坏情况的请求是第 5 扇区,这导致接近完整的旋转延迟,才能服务这种请求。

        多磁道:寻道时间

        磁盘只有一条磁道,这是不太现实的。现代磁盘当然有数以百万计的磁道。因此,我们来看看更具现实感的磁盘表面,这个表面有3条磁道(见图37.3左图)

        在该图中,磁头当前位于最内圈的磁道上(它包含扇区24~35)。下一个磁道包含下一 组扇区(12~23),最外面的磁道包含最前面的扇区(0~11)。 

        为了理解驱动器如何访问给定的扇区,我们现在追踪请求发生在远处扇区的情况,例如,读取扇区11。为了服务这个读取请求,驱动器必须首先将磁盘臂移动到正确的磁道(在这种情况下,是最外面的磁道),通过一个所谓的寻道(seek)过程寻道,以及旋转,是最昂贵的磁盘操作之一。

         寻道有许多阶段:首先是磁盘臂移动时的加速阶段。然后随着磁盘臂全速移动而惯性滑动。然后随着磁盘臂减速而减速。最后,在磁头小心地放置在正确的磁道上时停下来。停放时间(settling time)通常不小,例如 0.5~2ms,因为驱动器必须确定找到正确的磁道。

        寻道之后,磁盘臂将磁头定位在正确的磁道上。图37.3(右图)描述了寻道。

        如你所见,在寻道过程中,磁盘臂已经移动到所需的磁道上,并且盘片当然已经开始旋转,在这个例子中,大约旋转了3个扇区。因此,扇区9 即将通过磁头下方,我们只能承受短暂的转动延迟,以便完成传输。

         当扇区11经过磁盘磁头时,I/O 的最后阶段将发生,称为传输(transfer)数据从表面读取或写入表面。因此,我们得到了完整的I/O时间图:首先寻道,然后等待转动延迟,最后传输

         一些其他细节

        磁盘驱动器操作的令人感兴趣的细节。许多驱动器采用某种形式的磁道偏斜(track skew),以确保即使在跨越磁道边界时,顺序读取也可以方便地服务。在我们的简单示例磁盘中,这可能看起来如 图37.4 所示。        

         扇区往往会偏斜,因为从一个磁道切换到另一个磁道时,磁盘需要时间来重新定位磁头(即便移到相邻磁道)。 如果没有这种偏斜,磁头将移动到下一个磁道,但所需的下一个块已经旋转到磁头下,因此驱动器将不得不等待整个旋转延迟,才能访问下一个块。

         另一个事实是,外圈磁道通常比内圈磁道具有更多扇区,这是几何结构的结果。那里空间更多。这些磁道通常被称为多区域(multi-zoned)磁盘驱动器,其中磁盘被组织成多个区域,区域是表面上连续的一组磁道。每个区域每个磁道具有相同的扇区数量,并且外圈区域具有比内圈区域更多的扇区

         最后,任何现代磁盘驱动器都有一个重要组成部分,即它的缓存(cache),由于历史原因有时称为磁道缓冲区(track buffer)。该缓存只是少量的内存(通常大约8MB或16MB), 驱动器可以使用这些内存来保存从磁盘读取或写入磁盘的数据。例如,当从磁盘读取扇区时,驱动器可能决定读取该磁道上的所有扇区并将其缓存在其存储器中。这样做可以让驱动器快速响应所有后续对同一磁道的请求

         在写入时,驱动器面临一个选择:它应该在将数据放入其内存之后,还是写入实际写入磁盘之后回报写入完成?前者被称为后写(write back)缓存(有时称为立即报告,immediate reporting),后者则称为直写(write through)。后写缓存有时会使驱动器看起来“更快”,但可能有危险。如果文件系统或应用程序要求将数据按特定顺序写入磁盘以保证正确性,后写缓存可能会导致问题。

 

 

四、I/O 时间:数学计算

        有了一个抽象的磁盘模型,就可以通过一些分析来更好地理解磁盘性能。具 体来说,现在可以将I/O时间表示为3个主要部分之和:

        执行以下计算。假设有两个工作负载。第一个工作负载称为 随机(random)工作负载,它向磁盘上的随机位置发出小的(例如4KB) 读取请求。随机工作负载在许多重要的应用程序中很常见,包括数据库管理系统。第二种称为 顺序(sequential)工作负载,只是从磁盘连续读取大量的扇区,不会跳过。顺序访问模式很常见,因此也很重要。

         为了理解随机和顺序工作负载之间的性能差异,首先需要对磁盘驱动器做一些假设。我们来看看希捷的几个现代磁盘。第一个名为 Cheetah 15K.5 [S09b],是高性能 SCSI 驱动器。第二个名为Barracuda [S09a],是一个为容量而生的驱动器。有关两者的详细信息如表37.1 所示。

         这些驱动器具有完全不同的特性,并且从很多方面很好地总结了磁盘驱动器市场的两个重要部分。首先是“高性能”驱动器市场,驱动器的设计尽可能快提供低寻道时间,并快速传输数据。其次是“容量”市场每字节成本是最重要的方面。因此, 驱动器速度较慢,但将尽可能多的数据放到可用空间中。

         平均寻道时间(4ms)就采用制造商报告的平均时间。请注意,完全寻道(从表面的一端到另一端)可能需要两到三倍的时间平均旋转延迟直接根据 RPM 计算15000 RPM 等于 250 RPS(每秒转速)。因此,每次旋转需要 4ms。平均而言,磁盘将会遇到半圈旋转, 因此平均时间为 2ms。最后,传输时间就是传输大小除以峰值传输速率。在这里它小得几乎看不见(30μs,注意,需要1000μs才是1ms!)。

         根据我们上面的公式,Cheetah 的T I/O大致等于6ms。为了计算I/O的速率,我们只需将传输的大小除以平均时间,因此得到 Cheetah 在随机工作负载下的 RI/O大约是 0.66MB/s。对 Barracuda 进行同样的计算,得到TI/O约为13.2ms,慢两倍多,因此速率约为 0.31MB/s。

        现在看看顺序工作负载。在这里我们可以假定在一次很长的传输之前只有一次寻道和旋转。简单起见,假设传输的大小为 100MB。因此,Barracuda 和 Cheetah 的TI/O分别约为800ms和950ms。因此I/O的速率几乎接近 125MB/s 和 105MB/s 的峰值传输速率, 如表37.2所示。

        表37.2 展示了一些重要的事情。第一点,也是最重要的一点,随机和顺序工作负载之 间的驱动性能差距很大,对于 Cheetah 来说几乎是200左右,而对于 Barracuda 来说差不多是300倍。因此我们得出了计算历史上最明显的设计提示。         

         第二点更微妙:高端“性能”驱动器与低端“容量”驱动器之间的性能差异很大。出于这个原因(和其他原因),人们往往愿意为前者支付最高的价格,同时尽可能便宜地获得后者。

 

五、磁盘调度

        由于 I/O 的高成本,操作系统在决定发送给磁盘的 I/O 顺序方面历来发挥作用。更具体地说,给定一组I/O请求,磁盘调度程序检查请求并决定下一个要调度的请求。

         与任务调度不同,每个任务的长度通常是不知道的,对于磁盘调度,我们可以很好地猜测“任务”(即磁盘请求)需要多长时间。通过估计请求的查找和可能的旋转延迟,磁盘调度程序可以知道每个请求将花费多长时间,因此(贪婪地)选择先服务花费最少时间的请求。因此,磁盘调度程序将尝试在其操作中遵循 SJF(最短任务优先)的原则。

         SSTF:最短寻道时间优先

        早期的磁盘调度方法被称为最短寻道时间优先(SSTF Shortest-Seek-Time-First)(也称最短寻道优先,SSF)。SSTF 按磁道对 I/O 请求队列排序选择在最近磁道上的请求先完成。例如,假设磁头当前位置在内圈磁道上,并且我们请求扇区21(中间磁道) 和2(外圈磁道),那么我们会首先发出对 21 的请求,等待它完成,然后发出对 2 的请求(见图37.5)。

         在这个例子中,SSTF 运作良好,首先寻找中间磁道, 然后寻找外圈磁道。但 SSTF 不是万能的,原因如下。① 主机操作系统无法利用驱动器的几何结构,而是只会看到一系列的块。幸运的是,这个问题很容易解决。 操作系统可以简单地实现最近块优先(Nearest-Block-First,NBF),而不是 SSTF,然后用最近的块地址来调度请求

        ② 饥饿。上面的例子中,是否有对磁头当前所在位置的内圈磁道有稳定的请求。然后,纯粹的 SSTF 方法将完全忽略对其他磁道的请求。关键问题如下:

                                        关键问题:如何处理磁盘饥饿 

        如何实现类SSTF调度,但避免饥饿?

        电梯(又称 SCAN 或 C-SCAN) 

        该算法最初称为 SCAN,简单地以跨越磁道的顺序来服务磁盘请求。我们将一次跨越磁盘称为扫一遍。因此,如果请求的块所属的磁道在这次扫一遍中已经服务过了,它就不会立即处理,而是排队等待下次扫一遍

         SCAN 有许多变种,所有这些变种都是一样的。例如,F-SCAN,它在扫一遍时冻结队列以进行维护。这个操作会将扫一遍期间进入的请求放入队列中,以便稍后处理。这样可以避免远距离请求饥饿,延迟了迟到请求的服务。

        C-SCAN 是另一种常见的变体,即 循环SCAN(Circular SCAN)的缩写。不是在一个方向扫过磁盘,该算法从外圈扫到内圈,然后从内圈扫到外圈,如此下去。这种算法有时被称为电梯算法,因为它的行为像电梯,电梯要么向上要么向下,而不只根据哪层楼更近来服务请求。试想一下,如果你从 10楼 下降到 1楼,有人在 3楼 上来并按下 4楼,那么电梯就会上升到 4楼, 因为它比 1楼 更近!如你所见,电梯算法在现实生活中使用时,可以防止电梯中发生战斗。 在磁盘中,它就防止了饥饿。

        SCAN 及其变种并不是最好的调度技术。特别是,SCAN(甚至 SSTF)实际上并没有严格遵守 SJF 的原则。具体来说,它们忽视了旋转。因此,另一个关键问题如下。 

                                        关键问题:如何计算磁盘旋转开销

        如何同时考虑寻道和旋转,实现更接近 SJF 的算法?

         SPTF:最短定位时间优先

        最短定位时间优先调度(SPTF,有时称为最短接入时间优先,SATF)。图37.6给出了一个例子。(Shortest Positioning Time First)

        在这个例子中,磁头当前定位在内圈磁道上的扇区 30 上方。因此,调度程序必须决定:下一个请求应该为安排扇区16(在中间磁道上)还是扇区8(在外圈磁道上)。接下来应该服务哪个请求?

        答案当然是”视情况而定“。这里的情况是旋转与寻道相比的相对时间。如果在我们的例子中,寻道时间远远高于旋转延迟,那么SSTF(和变体)就好了。但是,想象一下,如果寻道比旋转快得多。然后, 在我们的例子中,寻道远一点的、在外圈磁道的服务请求8,比寻道近一点的、在中间磁道的服务请求16更好,后者必须旋转很长的距离才能移到磁头下

         在现代驱动器中,正如上面所看到的,查找和旋转大致相当(当然,视具体的请求而定),因此 SPTF 是有用的,它提高了性能。然而,它在操作系统中实现起来更加困难,操作系统通常不太清楚磁道边界在哪,也不知道磁头当前的位置(旋转到了哪里)。因此,SPTF 通常在驱动器内部执行,如下所述

         其他调度问题

        在这个基本磁盘操作,调度和相关主题的简要描述中,还有很多问题我们没有讨论。 其中一个问题是:在现代系统上执行磁盘调度的地方在哪里?在较早的系统中,操作系统完成了所有的调度。在查看一系列挂起的请求之后,操作系统会选择最好的一个,并将其发送到磁盘。当该请求完成时,将选择下一个,如此下去。

         在现代系统中,磁盘可以接受多个分离的请求,它们本身具有复杂的内部调度程序(它们可以准确地实现 SPTF。在磁盘控制器内部,所有相关细节都可以得到,包括精确的磁头位置)。因此,操作系统调度程序通常会选择它认为最好的几个请求(如 16),并将它们全部发送到磁盘。磁盘然后利用其磁头位置和详细的磁道布局信息等内部知识,以最佳可能 (SPTF)顺序服务于这些请求。

         磁盘调度程序执行的另一个重要相关任务是 I/O合并(I/O merging)。例如,设想一系列请 求读取块33,然后是8,然后是34,如 图37.6 所示。在这种情况下,调度程序应该将块 33 和 34 的请求合并(merge)为单个两块请求。调度程序执行的所有请求都基于合并后的请求。合并在操作系统级别尤其重要,因为它减少了发送到磁盘的请求数量,从而降低了开销。

         代调度程序关注的最后一个问题是:在向磁盘发出I/O之前,系统应该等待多久?有人可能天真地认为,即使有一个磁盘 I/O,也应立即向驱动器发出请求。这种方法被称为工作保全(work-conserving),因为如果有请求要服务,磁盘将永远不会闲下来。然而,对预期磁盘调度的研究表明,有时最好等待一段时间,即所谓的非工作保全 (non-work-conserving)方法。通过等待,新的和“ 更好 ”的请求可能会到达磁盘,从而整体效率提高。当然,决定何时等待以及多久可能会非常棘手。

 

相关文章:

  • 脑机新手指南(一):BCILAB 脑机接口工具箱新手入门指南
  • 面试高频图论题『墙与门』:Swift BFS 解法全流程拆解
  • STM32学习第一课--工程建立(云端备份与自我复盘)
  • 回归任务损失函数对比曲线
  • git 一台电脑一个git账户,对应多个仓库ssh
  • 将can日志数据提取到excle中
  • 4. Qt对话框(1)
  • C语言Day9:C语言类型转换规则
  • ADVANTEST D3286 Error Detector OPeration Manual 爱德万测试
  • CVE-2017-12629-XXE源码分析与漏洞复现
  • 游戏中的数学计算
  • 从时间到宇宙:探索时间同步的底层奥秘与工程实践
  • javascript中运算符的优先级
  • 【时时三省】(C语言基础)函数的递归调用例题
  • Python中质数筛选及优化效率对比
  • 【笔记】修改abu量化本地部署数据文件夹目录
  • Redis集群热点Key问题解决方案
  • HTML应用指南:利用GET请求获取全国罗森门店位置信息
  • 文本编辑器vi的使用
  • 2025年软件测试面试题,精选33道,附答案
  • 桂城网站制作/百度怎么发自己的小广告
  • 健身餐的网站怎么做/seo关键词优化软件合作
  • 当今做网站的流行趋势/刘连康seo培训哪家强
  • 郑州做网站公司有多少钱/接广告推广的平台
  • 做网站建设的公司有哪些内容/长沙网动网络科技有限公司
  • 二手书网站策划书/企业官网搭建