操作系统概念_第十二章_大容量存储器的结构

概述

文件系统的最底层:次级和三级存储结构。

基本名词

  • 磁盘
  • 磁壁
  • 磁道
  • 扇区
  • 柱面
  • 传输速率
  • 定位时间 / 随机访问时间
  • 寻道时间
  • 旋转等待时间
  • 磁头碰撞
  • 软盘
  • IO总线
    • EIDE
    • ATA
  • 磁带

这里写图片描述

磁盘结构

现代磁盘驱动器可以看为是一个一维的逻辑块的数组,其按顺序映射到磁盘的扇区。扇区0是最外柱面的第一个磁道的第一个扇区。

逻辑块的映射顺序:先按磁道内的扇区顺序,再按柱面内的磁道顺序,再按柱面从外到内的顺序。

逻辑块是最小的传输单位。

常量线性速度:使用该种介质,扇区的位密度在每个磁道是均匀的。因此由外到内,驱动器会增加速度以保证数据速率稳定。

恒定圆角速度:使用该种介质,扇区的位密度随着由内向外不断降低,以保证数据速率稳定。

磁盘附属

主机附属存储:

  • IDE、ATA
  • -

网络附属存储:
NAS

这里写图片描述

磁盘调度

名词解释:

  • 寻道时间:磁臂将磁头移动到包含目标扇区的柱面的时间。
  • 旋转延迟:磁盘将目标扇区移动到磁头下的时间。
  • 磁盘带宽:传递的总字节数 ÷ 从服务请求开始到结束的时间

访问时间主要包括寻道时间和旋转延迟,提高调度性能,需要从这两个方面考虑。

FCFS调度

先到先服务算法

这里写图片描述

会出现大摆动问题(122->14->124)

SSTF调度

最短寻道时间优先算法(shortest-seek-time-first ,SSTF)

选择距离当前磁头位置判定的最短寻道的位置。

这里写图片描述

是一种最短作业优先调度(SJF),可能会导致饥饿现象。

SCAN调度

也被称为电梯调度,磁臂从一端到另一端移动,处理经过的所有请求,随后改变移动方向,继续处理。

这里写图片描述

可能会导致另一端的请求虽然很多,但等待时间过长

C-SCAN调度

C-SCAN(circular SCAN)是SCAN调度的一个变种,将柱面当做环,每次从一端到另一端后,马上返回到磁盘开始,从头开始处理请求。

这里写图片描述

LOOK调度和C-LOOK调度

SCAN和C-SCAN是在整个磁盘范围内移动,但实际上只需要在有请求的最大区间范围内移动即可。

在向一个方向移动时判断是否有请求,并根据请求的边界来放置磁头,这种形式的SCAN调度被称为LOOK调度(同样C-LOOK对应C-SCAN)

如何选择磁盘调度

对于任何调度算法,其性能主要依赖于请求的数量类型

磁盘服务请求很大程度上受文件分配方法所影响。程序在读一个连续分配文件时会产生数个在磁盘上相近位置的请求,因而产生有限的磁头移动。

  • SSTF较为普通且很有吸引力,因为它比FCFS的性能要好。

  • SCANC-SCAN对于磁盘符合较大的系统会执行得更好,这是因为它不可能产生饿死问题。

目录和索引块的位置也很重要。由于文件必须打开后才能使用,打开文件要求搜索目录结构,目录会被经常访问。

在内存中缓存目录和索引块有助于降低磁头移动,尤其是对于读请求

由于选择需要考虑的因素比较复杂,磁盘调度算法应该作为一个操作系统的独立模块,用于方便替换。

SSTFLOOK是比较合理的默认算法

磁盘管理

磁盘格式化

在磁盘能存储数据之前,它必须分成扇区以便磁盘控制器能读和写,这个过程称为低级格式化(或物理格式化)

为了使用磁盘存储文件,操作系统还需要将自己的数据结构记录在磁盘上。这分为两步:

  • 将磁盘分为一个或多个柱面组成的分区。

    操作系统可以将每个分区作为一个独立的磁盘

  • 逻辑格式化(创建文件系统)。操作系统将初始的文件系统数据结构存储到磁盘上。这些数据结构包括空闲和已分配的空间(FAT或者inode)和一个初始为空的目录

为了提高效率,大多数操作系统将块集中到一大块,通常称作簇(cluster)。磁盘IO通过块完成,但是文件系统IO通过簇完成。

这样有效确保了IO可以进行更多的顺序存取和更少的随机存取。

引导块

初始化自举程序初始化系统的各个方面,随后启动操作系统。

对绝大多数计算机,自举程序保存在ROM中。因为改变自举程序需要改变ROM硬件芯片,因此绝大多数系统只在启动ROM中保留一个很小的自举加载程序,其作用是进一步从磁盘上调入更为完整的自举程序,方便修改

实例:Windows2000

Windows2000系统将启动代码放在硬盘的第一个扇区(被称为主引导记录(master boot record),或MBR)。此外,Windows2000中允许硬盘分为一个或多个分区,一个分区为引导分区(boot partition),包含操作系统和设备驱动程序。

Windows2000系统通过运行系统ROM上的代码,开始启动。此代码指示系统从MBR读取引导代码。

MBR中还包含一个硬盘分区列表和一个说明系统引导分区的标志。

这里写图片描述

坏块

比较常见的磁盘问题是一个或多个扇区坏掉,绝大多数磁盘从工厂里出来时就有坏块。

根据所使用的磁盘和控制器,对这些块有多种处理方式。

对于复杂的磁盘,通常采用扇区备用(sector sparing)/ 转寄(forwarding):

  • 磁盘的控制器维护一个磁盘坏块链表,该链表在低级格式化时已经初始化,并在磁盘整个使用过程中不断更新。
  • 低级格式化时将一些块放在一边作为备用,操作系统看不到这些备用的块。控制器可以用备用块来逻辑地替代坏块。

交换空间管理

当物理内存的数量到达临界低点,进程(通常选择最不活跃的进程)从内存转移到交换空间以释放内存空间。

实际上,现代操作系统大多是将交换与虚拟内存技术以及交换页结合起来。

交换空间管理是操作系统的另一底层任务。虚拟内存使用磁盘空间作为内存的扩充。交换空间设计和实现的主要目的是为虚拟内存提供最佳吞吐量。

由于磁盘访问比内存访问要慢很多,所以使用交换空间会严重影响系统性能。

交换空间的使用

不同的操作系统有不同的使用方式,如:

  • 保存整个进程映像
  • 换页系统可能只用交换空间以存储换出内存的页
  • 有的操作系统允许使用多个交换空间。

对交换空间数量的高估比低估更为安全,高估浪费空间,低估则容易造成系统崩溃

交换空间的位置

交换空间可以有两个位置:

  • 在普通文件系统上创建
  • 在一个独立的磁盘分区上进行(更常见)

这种方式实现简单但是效率较低

另一种方法是将交换空间创建在独立的生(raw)磁盘分区上。这里不需要文件系统和目录结构,只需要一个独立交换空间存储管理器以分配和释放块。

实例:Linux

Linux中,交换空间仅用于匿名内存或几个进程的共享内存区。Linux允许建立一个或多个交换区。

交换区可以是普通文件系统的交换文件或原始交换分区。

每个交换区包含一系列4KB的页槽,同时也对应一个交换映射(Swap map)——整数计数器数组。如果计数器值为0,对应页槽可用;大于0则表示页槽被交换页占据。

计数器的值表示交换页的映射数目。

这里写图片描述

RAID结构

一个系统可以安装多个磁盘,这可以改善数据读写速度(因为磁盘操作可并行进行);另一方面这种设置可以使系统有机会改善数据存储的可靠性,因为可以在多个磁盘上存储冗余信息。

这种多种磁盘组织技术,通常称为磁盘冗余阵列(RAID)技术,用于提高性能和可靠性

可靠性

一个磁盘出错会导致大量数据损坏,这是难以忍受的。

而可靠性问题的解决方法,就是引入冗余。存储平常不需要的额外信息,在出错时,可以使用冗余来重新修补损坏信息。因此,即使磁盘损坏,数据也不会损坏。

最为简单(但最为昂贵)的引入冗余的方法是复制每个磁盘。这种技术称为镜像

磁盘并行

对于多个磁盘,通过在多个磁盘上分散数据,可以改善传输率。最简单的形式是数据分散,即在多个磁盘上分散每个字节的各个位,这种分散称为位级分散

磁盘系统并行访问有两个主要目的:

  • 通过负荷平衡,增加了多个小访问(即页访问)的吞吐量。
  • 降低大访问的响应时间。

RAID级别

镜像提供高可靠性,但昂贵,分散提供了高数据传输率,但并未改善可靠性,不同的方案有不同的性价比,可分为不同级别,称为RAID级别。

RAID被分为6种不同的级别,详情参考P406
这里写图片描述

猜你喜欢

转载自blog.csdn.net/sailist/article/details/80491040