操作系统概念_第十二章_大容量存储器的结构
概述
文件系统的最底层:次级和三级存储结构。
基本名词
- 磁盘
- 磁壁
- 磁道
- 扇区
- 柱面
- 传输速率
- 定位时间 / 随机访问时间
- 寻道时间
- 旋转等待时间
- 磁头碰撞
- 软盘
- 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
的性能要好。SCAN
和C-SCAN
对于磁盘符合较大的系统会执行得更好,这是因为它不可能产生饿死问题。
目录和索引块的位置也很重要。由于文件必须打开后才能使用,打开文件要求搜索目录结构,目录会被经常访问。
在内存中缓存目录和索引块有助于降低磁头移动,尤其是对于读请求。
由于选择需要考虑的因素比较复杂,磁盘调度算法应该作为一个操作系统的独立模块,用于方便替换。
但
SSTF
或LOOK
是比较合理的默认算法
磁盘管理
磁盘格式化
在磁盘能存储数据之前,它必须分成扇区以便磁盘控制器能读和写,这个过程称为低级格式化(或物理格式化)
为了使用磁盘存储文件,操作系统还需要将自己的数据结构记录在磁盘上。这分为两步:
-
将磁盘分为一个或多个柱面组成的分区。
操作系统可以将每个分区作为一个独立的磁盘
逻辑格式化(创建文件系统)。操作系统将初始的文件系统数据结构存储到磁盘上。这些数据结构包括空闲和已分配的空间(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