大容量存储器:【操作系统】第十二章大容量存储器的结构

12.1大容量存储器结构简介

12.1.1磁盘

  • 常用磁盘片的直径为1.8~5.25英寸。
  • 每个磁盘片的两面都涂着磁质材料。
  • 相关概念:磁头、磁臂、磁道、扇区、柱面。
  • 常用磁盘驱动器的容量是按照GB来算的。
  • 大多数驱动器,磁盘每秒可转动60~200圈。
  • 传输速率(每秒数兆)
  • 定位时间(随机访问时间):寻道时间+旋转等待时间(毫秒)。
    这里写图片描述
  • 磁头碰撞:磁头接触到磁盘面而损坏磁盘。

12.1.2磁带

访问速度慢常用于备份数据。

12.2磁盘结构

  • 现代磁盘驱动器可以看做一个一维的逻辑块的数组,逻辑块是最小的传输单位。逻辑块的大小通常为 512 B。
  • 扇区0是最外面柱面的第一个磁道的第一个扇区。该映射是先按磁道内扇区顺序,再接柱面内磁道顺序,最后接从外到内的柱面顺序来排序的。
  • 通过映射,至少从理论上能将逻辑块号转换为由磁盘内的柱面号、柱面内的磁道号、磁道内的扇区号所组成的老式磁盘地址。
  • 事实上,执行这种转换并不容易,这有两个理由:
    • 第一,绝大多数磁盘都有一些缺陷扇区,因此映射必须用磁盘上的其他空闲扇区来替代这些缺陷扇区。
    • 第二,对有些磁盘,每个磁道的扇区数并不是常量。
  • 常量线性速度:每个磁道的位密度是均匀的,从外到内时,每个磁道的扇区数也会减少。随着磁头由外移到内,驱动器会增加速度以保持磁头续写的数据速率恒定。
  • 恒定圆角速度:磁盘转动速度可以保持不变,因此内磁道到外磁道的位密度要不断降低以保持数据率不变。这种方法被用在硬盘中。

12.3磁盘附属

  • 计算机访问磁盘存储有两种方式:
    • 一种方式是通过I/O 端口(或主机附属存储 (hostattached storage) ) ,小系统常采用这种方式。
    • 另一方式是通过分布式文件系统的远程主机,这称为网络附属存储 (network-attached storage) 。

12.4磁盘调度

FCFS

按照请求到达顺序进行访问。
统计总的走过的柱面数,柱面数越多,所需时间越长。
缺点:花费时间太长
这里写图片描述

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

寻找离当前位置最近的磁道访问。
缺点:有可能位置较远的请求永远得不到响应。
这里写图片描述

SCAN(电梯算法)

  • 磁臂从磁盘的一端向另一端移动,同时当磁头移过每个柱面时,处理位于该柱面上的服务请求。当到达另一端时,磁头改变移动方向,处理继续。磁头在磁盘上来回扫描。
  • 缺点:假设磁盘服务请求均匀地分布在各个柱面上, -f面来研究一下当磁头移到磁盘一端并掉转方向时请求的分布情况。这时,紧靠磁头之前的请求只有少数,因为这些柱面上的请求刚刚处理过。而在磁盘的另一端的请求密度却最大。这些请求等待时间最长,那么为什么不首先去那里处理呢?这就是下一算法的思想。
    这里写图片描述

C-SCAN(circular SCAN)

C-SCAN (circular SCAN, C-SCAN) 调度是 SCAN 调度的变种,主要提供一个更为均匀的等待时间。与 SCAN →样, C-SCAN 将磁头从磁盘一端移到磁盘的另一端,随着移动不断地处理请求。不过,当磁头移到另一端时,它会马上返回到磁盘开始,返回时并不处理请求(参见图 12.7)0 C-SCAN 调度算法基本上将柱面当做一个环链,以将最后的柱面和第一个柱面相连。
这里写图片描述

C-LOOK

正如以上所述, SCAN 和 C-SCAN 使磁头在整个磁盘宽度内进行移动。事实上,这两个算法都不是这么实现的。通常,磁头只移动到一个方向上最远的请求为止。接着,它马上回头,而不是继续到磁盘的尽头。这种形式的 SCAN 和 C-SCAN 称为 LOOK 和 C-LOOK调度,这是因为它们在朝一个方向移动会看 (look) 是否有请求(见图 12.8) 。
这里写图片描述

12.5磁盘管理

12.5.1磁盘格式化

  • 低级格式化为磁盘的每个扇区采用特别的数据结构。每个扇区的数据结构通常由头、数据区域(通常为 512 B 大小)和尾部组成。头部和尾部包含了一些磁盘控制器所使用的信息,如扇区号码和纠错代码( error-correcting code, ECC) 。
  • 为了使用磁盘存储文件,操作系统还需要将自己的数据结构记录在磁盘上。这分为两步。
    • 第一步是将磁盘分为由一个或多个柱面组成的分区。操作系统可以将每个分区作为一个独立的磁盘。例如,一个分区可以用来存储操作系统的可执行代码,而其他分区用来存储用户数据。
    • 在分区之后,第二步是逻辑格式化(创建文件系统)。在这→步,操作系统将初始的文件系统数据结构存储到磁盘上。这些数据结构包括空闲和己分配的空间 (FAT 或者 inode) 和-个初始为壁的目录。
  • 为了提高效率,大多数操作系统将块集中到一大块,通常称作簇 (cluster)。磁盘I/O通过块完成,但是文件系统I/O 通过簇完成,这样有效确保了 IO可以进行更多的顺序存取和更少的随机存取。
  • 有的操作系统允许特别程序将磁盘分区作为一个逻辑块的大顺序数组,而没有任何文件系统数据结构。该数组有时称为生磁盘 (raw disk) ,对该数组的I/O 称为生 I/O(raw I/O) 。

12.5.2引导块

  • 对绝大多数计算机,自举程序保存在只读存储器(ROM) 中,由于 ROM 不需要初始化且位于固定位置,这便于处理器在打开电源或重启时开始执行。行。而且,由于 ROM 是只读的,所以不会受计算机病毒的影响。
  • 绝大多数系统只在启动ROM 中保留一个很小的自举加载程
    序,其作用是进一步从磁盘上调入更为完整的自举程序。这一更为完整的自举程序可以容易地进行修改:新版本可写到磁盘上。这个完整的自举程序保存在磁盘的启动块上,启动块位于磁盘的固定位置。拥有启动分区的磁盘称为启动磁盘 (boot disk) ,或系统磁盘(systemdisk) 。
  • 启动 ROM 中的代码引导磁盘控制器将启动块读入到内存(这时尚没有装入设备驱动程序),并开始执行代码。完整自举程序比启动ROM 内的自举加载程序更加复杂,它能从磁盘非固定位置中装入整个操作系统,并开始运行。即使如此,完整的自举程序仍可能很小。
  • 主记录: Windows 2000 系统将其启动代码放在硬盘上的第一个扇区(被称为主引导记录(master boot record) ,或 MBR)。
  • 引导分区:Windows 2000中允许硬盘分成一个或多个分区,一个分区为引导分区 (boot partition) 。
  • 引导扇区:系统一且确定引导分区,它读取该分区的第一个扇区(即所谓的引导扇区 (boot sector) ) 。

12.5.3坏块

  • 对于简单磁盘,如使用 IDE 控制器的磁盘,可手工处理坏扇区。
  • 一个典型的坏扇区事务处理(扇区备用)可能如下:
    • 操作系统试图访问逻辑块 87 。
    • 控制器计算 ECC 的值,发现该块是坏的,它将此结果通知操作系统。
    • 下次操作系统重启时,可以运行一个特殊程序以告诉 SCSI 控制器用备用块替代坏块。
    • 之后,每当系统试图访问逻辑块 87 时,这一请求就转换成控制器所替代的扇区的地址。
  • 这种控制器所引起的重定向可能会使操作系统的磁盘调度算法无效。为此,绝大多数磁盘在格式化时为每个柱面都留了少量的备用块,还保留了一个备用柱面当坏块需要重新映射时,控制器就尽可能使用同一柱面的备用扇区。
  • 作为扇区备用的另一方案,有的控制器采用扇区滑动 (sector slipping) 来替换坏扇区。
  • 所谓扇区滑动类似于在数组中间插入一个记录,将后面记录一一向后移动。

12.6交换空间管理

  • 交换空间设计和实现的主要目的是为虚拟内存提供最佳吞吐量。

12.6.1交换空间的使用

  • 不同操作系统根据所实现的内存管理算法,可按不同方式来使用交换空间。
  • 统所需交换空间的量因此会受以下因素影响:
    物理内存的多少、所支持虚拟内存的多少、内存使用方式等。它可以是数 MB 到数 GB 的磁盘空间。
  • 注意,对交换空间数量的高估要比低估更为安全。这是因为如果系统使用完了交换空间,那么可能会中断进程或使整个系统死机。

12.6.2交换空间的位置

  • 交换空间可有两个位置:
    交换空间在普通文件系统上加以创建,或者是在一个独立的磁盘分区上进行。

12.7RAID结构

  • 磁盘冗余阵列技术:通常用于提高性能和可靠性。

12.7.1通过冗余改善可靠性

  • 可靠性问题的解决办法是引入冗余。
  • 最简单(最昂贵)的引入冗余的方法是复制每个磁盘。这种技术称为镜像
    (mrroring)。
  • 电源掉电是最为常见的出错情况,此时可以有两种办法解决:
    • ①先写一个副本,在写下一个,这样两个总是一致的。
    • ②可以把非易失的RAM加到RAID队列,当电源掉电时,写回高速缓存就会受到保护。从而防止数据丢失。

12.7.2通过并行处理改善性能

  • 对于镜像磁盘,读请求处理的速度可以加倍。每个读的传输率与单个磁盘系统一样,但是单位时间内读数量加倍了。
  • 位级分散:数据分散是在多个磁盘上分散每个字节的各个位。
  • 对于位级分散结构,每个磁盘都参与每次访问(读或写),这样每秒所能处理的访问数与单个磁盘的一样,但每次访问可在同样时间内读相当于单个磁盘系统 8 倍的数据
  • 位级分散可扩展到其他数量的磁盘,只要该数量为 8 的倍数或能除以 8。
  • 另外,分散不必在字节的位级上进行:例如,对于块级分散,一个文件的块可分散在多个磁盘上;对于 n 个磁盘,一个文件的块 i 可存在磁盘(i mod n) +1 。块级分散是最常见的
  • 总之,磁盘系统井行访问有两个主要目的:
    • ①通过负荷平衡,增加了多个小访问(即页访问)的吞吐量。
    • ②降低大访问的响应时间。

12.7.3 RAID级别

  • 镜像提供高可靠性,但昂贵;分散提供了高数据传输率,但并未改善可靠性。
  • 下面图中,P表示差错纠正位,C表示数据第二副本
    这里写图片描述
    这里写图片描述
  • RAID 级别0: RAID 级指按块级别分散的磁盘阵列,但没有冗余。
  • RAID 级别1: RAID 级别 1 指磁盘镜像
  • RAID 级别 2: RAID 级别 2 也称为内存方式的差错纠正代码结构。用了海明码。k表示数据位数,r表示冗余位。则有 2r>=K+r+1 2 r >= K + r + 1 ,所以4位数据需要有3位纠错码。所以四个数据盘就需要3个额外盘存储纠错码。
  • RAID 级别 3 或基于位交织奇偶结构对级别2 做了改进。与内存系统
    不同,磁盘控制器能检测到一个扇区是否正确读取,这样单个奇偶位就可用于差错检测和差错纠正。
    RAID3 的另一性能问题(其他奇偶检验RAID 级别也有)是: 需要计算和写奇偶。与其他非奇偶检验RAID 相比,这种额外开销会导致写更慢。为了减少这种性能损失,计算机RAID 存储阵列包括一个具有专用奇偶计算硬件的控制器。这将CPU 奇偶计算转移到RAID阵列。这种阵列也有非易失性随机存储器(NVRAM),以在计算奇偶时存储块,以及缓存从控制器到磁盘的数据。这些措施使得奇偶RAID 与非奇偶 RAID 几乎一样快。事实上,缓存的奇偶 RAID 可比非缓存的非奇偶的RAID 要快。
  • RAID 级别 4 或块交织奇偶结构采用与 RAID 0 一样的块级分散,另外在一独立磁盘上保存其他 N 个磁盘相应块的奇偶块。写数据时数据和奇偶可以并行写。单个写需要 4 次磁盘访问:两次读入旧块,两次写入新块。
  • RAID5**块交织分布奇偶结构**同于级别 4 ,它是将数据和奇偶分布在所有 N+l 块磁盘上,而不是将数据存在 N 个磁盘上而奇偶存在单个磁盘上。
    对于每一块,一个磁盘存储奇偶,而其他的存储数据。
  • RAID6称为* P+Q 冗余方案*,与 RAID 级别 5 很类似,但是保存了额外冗余信息以防止多个磁盘出错。不是使用奇偶校验,而是使用了差错纠正码如Read-Solomon 码。
  • RAID1+0:先镜像,后分散。
  • RAID0+1:先分散,后镜像。
  • 热备份:不用于存储数据,配置成替换出错磁盘。

12.7.4RAID级别的选择

  • 其中要考虑的就是重建性能。
  • 对于 RAID 级别 1,重建较为容易,因为可从另一磁盘上复制数据;
  • 于其他级别,需要读入所有阵列中的其他磁盘以重建出错磁盘上的数据。
  • RAID 级别 0 用于数据损失并不关键的高性能应用。 RAID 级别 1 用于需要高可靠性和快速恢复的应用。RAlD 0+1 和 RAID 1+0 用于性能和可靠性都重要的应用,例如小型数据库。由于 RAID 1 的高空间开销, RAID 5 通常用于存储量大的数据。级别 6 并不为许多RAID 实现所支持,但它应该能比RAID5 提供更高的可靠性。

12.7.6RAID的问题

  • 所有块的内部校验和。

12.8稳定存储实现

  • 根据定义,存储在稳定存储上的数据是放远不会丢失的。
  • 磁盘写可能有三种情况:
    • 成功完成:数据正确写到磁盘上。
    • 部分差错:在传输中出现差错,这样有些扇区写上了新数据,而在差错发生时正在写的扇区已损坏。
    • 完全差错:在磁盘开始写之前发生差错,这样磁盘原来数据值没有变化。

当在写一块时发生差错,系统应检测到,并调用恢复程序使数据块恢复到一致状态。
为此,系统必须为每个逻辑块维护两个物理副本。输出操作可按如下方式执行:

  • ①将信息写到第一物理块上。
  • ②当第一次写成功完成时,再将同样信息写到第二物理块上。
  • ③只有在第二次写成功完成时,才声明写操作成功完成。

在从差错中恢复时,每对物理块都要检查。如果两个块相同且没有检测到差错,那么无需采取任何动作。如果一块检测有差错,那么用另一块的值来替代它。如果两块检测没有差错但内容不同,那么用第二块的内容替代第一块的内容。这种恢复程序确保对稳定存储的写要么完全成功,要么一点未做。
- 因为等待磁盘写(同步I/O) 操作的完成是费时的,许多存储阵列增加了 NVRAM 作为缓存。由于这种内存是非易失性的(通常它用电池作为该单元电源的后备电源) ,所以可以相信它能够存储磁盘上的数据。

相关推荐

相关文章