存储管理
存储管理
存储介质
存储介质可以分为磁盘(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:先镜像,再分条。