一、磁盘
计算机是处理时需要数据的,那么数据放在哪里。总不可能全部放在计算的内存中,除了这个地方主要存储数据的媒介就是磁盘。
1.1 什么是磁盘
一般来说,就是类似于盘状一样的带有磁性存储介质,通过一个叫磁头的导体线圈从磁盘中存取数据。
1.2 磁盘结构
一个磁盘实际上并不只是一块盘片,由多个盘片组成,每块盘正反皆可以存放数据。
1)在读/写过程中,磁头固定,磁盘在底下高速旋转。
2)在磁臂运动时,所有磁头做相同运动,盘片则以常数不停旋转,速度现在一般是5400-10000+转了
1.3 盘面
扇区就是磁盘可寻址的最小存储单位,磁盘地址用“柱面号.盘面号.扇区号(或块号)”表示
2)磁盘的盘面上的数据存储在一组同心圆中,叫磁道。每个磁道与磁头一样宽。
3)一个盘面有上千个磁道。磁道又划分成几百个扇区,一个扇区固定存储大小(一般为512B),一个扇区称为一个盘块。
4)相邻的磁道以及相邻的扇区都通过一定的间隙分隔开,以避免精度错误
磁盘的存储能力受限于最内道的最大记录密度
6) 扇区(扇面)通常由三部分组成:标题(前导码)、数据、ECC纠错信息
二、磁盘访问时间:
衡量一个磁盘性能的重要表现,不仅依赖磁盘旋转速度,还依赖访问开始时读写磁头的所处位置。
1) 寻道时间:
将磁盘臂移动到适当的柱面上所需的平均时间,一般8ms~20ms。
要跨越n条磁道,m为相关参数速度,还包括启动磁臂时间s即:
T = mn+s
2)旋转延迟:
当磁头到达所需要的磁道位置后,等待所要求的扇区旋转到磁头下所需要的平均时间。
和磁盘的旋转速度r有关系
3)实际数据传输时间
总之:影响最大的就是寻道时间,从而决定总的存取时间
磁盘调度算法:
2.1 先来先服务算法(FCFS,First Come First Served)
根据进程请求访问磁盘的先后次序来进行调度。
优点:公平,简单。
缺点:未对寻道做任何优化,使平均寻道时间可能比较长。
适用:只有少量进程需要访问,且大部分请求都是访问聚簇的文件扇区,有较好的性能。
不适用:有大量进程竞争使用磁盘,那么往往就像随机调度。
如磁盘请求队列请求顺序是55、58、39、18、90、160、150、38、184,磁头初始位置100磁道
采用FCFS则是(45+3+19+21+72+70+10+112+146)=498个磁道,平均498/9=55.3
2.2 最短寻道时间优先算法(SSTF,Shortest Seek Time First)
找与当前磁头所在磁道最近的磁道,使得每次寻道时间最短
缺点:会产生“饥饿”现象。在某时刻在该磁头附近频繁添加新的请求,那么远处的磁道将无限期的延迟。
如磁盘请求队列请求顺序是55、58、39、18、90、160、150、38、184,磁头初始位置100磁道 采用SSTF则是(10+32+3+16+1+20+132+10+24)=248个磁道,平均248/9=27.5
2.3 扫描算法(SCAN,电梯算法)
在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象
当一个磁头自里向外移动时,移到最外侧会改变方向为自外向里。
2.4 循环扫描算法(CSCAN)
对SCAN进行了改动,要求磁头始终沿着一个方向移动。
| 优点 | 缺点 |
FCFS算法 | 公平,简单 | 平均寻道距离大,仅用在磁盘I/O较少的场合 |
SSTF算法 | 性能比FCFS好 | 不能保证平均寻道时间最短,可能会出现“饥饿”现象 |
SCAN算法 | 寻道性能较好,可避免“饥饿”现象 | 不利于远离磁头一端的访问请求 |
C-SCAN算法 | 消除了对两端磁道请求的不公平 | ---- |
不仅仅可以减少寻道时间,还可以减少延迟时间,这也是对磁盘传输效率提高的重要因素,而传输时间是由磁盘转速决定,所以无法通过其他方法来减少传输时间。
一般来说对盘面扇区进行交替编号,对磁盘片组中的不同盘面错位命名。假设每个盘有8个扇区,磁盘片组共有8个盘面,则采用如图所示编号:
磁盘是连续自转设备,磁头读/写一个物理块后,需要经过短暂的处理时间才能开始读/写下一块。这样交替编号,连续读/写相邻盘面或多个记录都能减少磁头的延迟时间