一、磁盘结构和管理
1.磁盘结构
- 磁盘可以移动
- 盘片:
- 存储数据的介质
- 正反两面可以存储数据
- 磁头:
- 读写数据,沿磁盘半径移动
- 有多少盘面就有多少磁头
- 主轴:
- 马达驱动,使盘片旋转
- 固定速度旋转
- 接口
- 磁盘控制器
- 控制磁盘的读写等操作
- 缓冲区
- 利用磁盘缓冲区来暂存数据
- 磁盘示意图:
1-1.盘片结构
- 无特殊说明,每个盘面都有磁头
- 外道(盘片靠近边缘的一侧)低地址,内道(盘片靠近中心的一侧)高地址
- 磁道:
- 磁头在盘片表面划出的圆形
- 盘面划分为数目相等的磁道
- 从盘面外缘“0”开始编号
- 扇区:
- 磁道被等分为若干个弧段
- 扇区大小一般为:512字节
- 柱面:
- 具有相同编号的磁道形成一个的圆柱
- 有几个磁道就有几个柱面
1-2.地址映射关系
- 块号:LBA
- 磁盘地址(CHS):(C,H,S)
- Cylinder(柱面/道C)
- Head(磁头/面H)
- Sector(扇区S)
- SPT:每个磁道最大扇区数
- HPC:最大磁头(盘面)数
1-3.磁盘访问时间
- 磁盘旋转速度:60 – 250转/秒
- RPM:每分钟旋转次数
- 定位时间/随机访问时间:
- 寻道时间:移动磁臂到所需磁道时间
- 平均寻道时间:1/3磁道移动(1-4ms)
- 旋转延迟:等待扇区移动到磁头下时间
- 平均旋转1/2圈时间:1/(2*RPM/60)
- 寻道时间:移动磁臂到所需磁道时间
- 传输时间:
- 传输率:传输总字节数除以传输时间
- 例:
2.磁盘管理
- 低级格式化(物理格式化):
- 将磁盘分成扇区,以便磁盘控制器读写
- 分区:
- 将磁盘分成分区
- 主分区和扩展分区
- 高级格式化:
- 逻辑格式化,创建文件系统
- 引导块:
- 自举程序保存在ROM中
- 自举程序装载引导块程序,引导块程序存储在磁盘固定位置上的“启动块”
- 引导ROM内的代码指示磁盘控制器将引导块读入到内存(这时不加载设备驱动程序),然后开始执行代码
二、磁盘调度
1.基本概念
- 目标:减少磁盘访问时间;磁头移动距离最小,寻道时间最短;提高文件系统的效率
- 访问时间:
- 寻道时间:磁头移动到访问扇区所在磁道的时间
- 旋转延迟时间:将访问扇区转到磁头下的时间
- 传输时间:将数据从磁盘送到内存的时间
- 寻道时间最小化
- 寻道时间约等于寻道距离
2.先来先服务算法(FCFS)
- 按照请求提交时间访问
- 先提交先访问
- 后提交后访问
- 优点:简单、公平;易实现
- 缺点:寻道时间长
- 例:
3.最短寻道时间优先算法(SSTF)
- 每次移动到离现在位置最近的磁道
- 最短寻道时间
- 本质上是一种最短作业优先(SJF)调度
- 优点:寻道距离短
- 缺点:
- 存在饥饿
- 磁头频繁变换移动方向
- 增加寻道时间
- 例:
4.扫描算法(SCAN)
- 磁头从磁盘一端向另一段移动,沿途响应服务请求
- 到达另一端时,磁头改变移动方向,继续处理
- 磁头在磁盘上来回扫描
- 有时称为电梯算法
- 优点:同一方向扫描,寻道时间短;改变磁头方向少
- 缺点:有的请求等待时间长
- 例:
5.循环扫描算法(C-SCAN)
- 单向处理请求
- 磁头从磁盘外道(0道)移到内道过程中处理请求
- 内道移动到外道的过程中不处理请求
- 优点:更均匀的等待时间
- 例:
6.Look算法(LOOK)和循环Look算法(C-LOOK)
- SCAN和C-SCAN的变形
- 磁头只移动到一个方向上最远请求为止,而不是继续到磁盘尽头
- C-LOOK例:
7.磁盘调度算法的选择
- 性能主要依赖于请求的数量和类型
- 磁盘服务请求很大程度上受文件分配方法影响
- SSTF较为普遍且很有吸引力
- SCAN和C-SCAN适合磁盘大负荷系统
- SSTF或LOOK是比较合理的缺省算法
三、RAID
1.基本概念
- 目的:引入RAID技术的目的是为了增强数据的可靠性和访问的并行性
- RAID把很多价格较便宜的磁盘组合成一个大容量的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能和可靠性
- 级别:RAID0-RAID7(除RAID0外都有检错能力)
2.RAID性能
- 可靠性:
- 磁盘可靠性:要求存储在磁盘上的数据不易丢失
- 引入冗余,如:镜像
- 性能:数据分散,并行读写
- 位级分散:数据每个字节的各个位分散在多个磁盘上
- 块级分散:数据以块为单位分散在多个磁盘上
- 例:
3.RAID级别
- RAID 0:
- 数据分散在多个磁盘上
- 条状分散技术
- 提高读写性能
- RAID 1:
- 磁盘镜像
- 提高可靠性
- RAID 5:
- 分散+校验
- 校验信息分散在各个磁盘,避免对单个校验磁盘的过度使用
- RAID(0+1):
- 先做分散,再镜像
- 性能好
- 但是一个磁盘的故障会导致一条磁盘带不能访问
- RAID(1+0):
- 先做镜像再做分散
- 可靠性好,一个磁盘的故障不会影响其他磁盘