存储管理

存储管理

存储介质

​ 存储介质可以分为磁盘(hard disk)、固态磁盘(Solid-State Disk)、磁带(magnetic tape)。

磁盘调度

  • 寻道时间:磁臂移动磁头到包含目标扇区的柱面的时间。
  • 旋转延迟时间:磁盘旋转目标扇区到磁头下的时间。
  • 磁盘带宽:传输字节的总数除以服务时间。

先来先服务调度(First come first served,FCFS)

​ 顾名思义

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

​ 优先选择离当前磁头近的请求,本质上是一种最短作业优先调度,会导致请求饥饿。

扫描算法(SCAN algorithm)

​ 磁臂从磁盘的一端开始向另一端移动,到达一端后磁头反转。有时候也被称为电梯算法(elevator algorithm)

循环扫描算法(circular SCAN, C-SCAN)

​ 如果请求是均匀的,SCAN在扫描的时候,当前所在位置的处理因为刚扫过,所以附近的请求数较少,而相反另一端请求数肯定较多。于是就衍生出了C-SCAN。即扫到一端后立即返回,但是不处理任何请求,然后又重新开始扫。

LOOK调度与C-LOOK调度

​ 类似于SCAN和C-SCAN,但是它不移动整个磁盘宽度,而是移动到最远的一个请求为止。

磁盘管理

磁盘格式化

  • 低级格式化/物理格式化:将空白磁盘分成扇区,并使用特殊数据结构填充(其中包括ECC(纠错码),用以校对和修复错误字节)
  • 分区:将磁盘分为由柱面组成的分区,不同分区上可以装不同的操作系统。
  • 逻辑格式化:即创建文件系统。

引导块

​ bootstrap程序(处于ROM中)找到磁盘上的引导块,将其加载入内存,然后该引导块的代码找到操作系统所在分区,并将操作系统加载入内存。

坏块

​ 磁盘上一般有备用块作为坏块的备份,当某些块损坏时候,磁盘可以利用这些备用块进行补充。

交换空间管理

交换空间可分为文件或者交换分区。

  • 文件:位于普通文件系统之上,但是效率低,因为需要访问磁盘目录等结构,需要额外的时间,同时可能需要遍历文件系统。
  • 交换分区:在单独的原始分区上创建交换空间,不存在文件系统,但是可能会增加内部碎片。

Linux 的交换空间仅用于匿名内存(即堆,栈,进程未初始化数据等区域),而代码等本来是从磁盘上读的,可以直接丢弃。而别的部分通过交换映射进行交换。交换映射为一个数组,数组中内容表示该对应的交换页由多少进程使用(可能有共享内存,导致数组值大于1,为0则表明空闲)

磁盘冗余阵列(Redundant Arrays of Independent Disk,RAID)

磁盘的并行可以加速文件的读取,比如同时有8个盘,可以同时读取,每个盘上读取一位则形成了一个字。

  • RAID0:有多个磁盘,但是没有冗余数据。
  • RAID1:镜像磁盘,即每个磁盘有一个一模一样的镜像磁盘,需要两倍大小存储空间。
  • RAID2:内存方式的差错纠正组织。用多个额外的位用于奇偶校验位,当奇偶校验位出错时候,可以由内存系统检测。由此在一定程度上可以修复单个位出错(奇变偶,偶变奇)。如第一个磁盘存储第一个字节,第二个磁盘存储第二个字节。。。然后剩下几个磁盘存储奇偶校验位。比RAID1稍微节约了空间。
  • RAID3:位交错奇偶校验位结构。只有一个额外的磁盘作为校验位,类似于RAID2,但是磁盘控制器来检测扇区读取是否正确。
  • RAID4:块交错奇偶校验位结构。
  • RAID5:块交错分布奇偶校验结构。将数据和奇偶校验分散在每一个磁盘上,而RAID4和3是用一个单独的磁盘存储奇偶校验。(最为常见)
  • RAID6:P+Q冗余方案。类似RAID5,但是保存了额外的冗余信息,可以容忍两个磁盘故障。
  • RAID0+1:0和1组合,先分条,再镜像。
  • RAID1+0:先镜像,再分条。