磁盘是计算机系统中最重要的存储设备,其中含有绝大部分文件。对文件的操作直接涉及到磁盘的访问,磁盘IO的速度效率和可靠性将直接影响系统的性能。因此,好的磁盘调度算法、优越的冗余技术,都是提高磁盘系统性能的切入点。
磁盘调度算法
1.先来先服务:按照进程访问磁盘的先后顺序进行调度。
优点:公平、简单
缺点:效率低,平均寻道时间较长
2.最短寻道时间优先:要求访问磁道与当前磁头的磁道距离最近。
优点:相比于先来先服务,明显减少平均寻道长度
缺点:磁头可能在一个小的范围内一直寻到,造成远处请求不满足而饥饿
3.扫描算法:又称电梯调度算法,像电梯一样上下连续来回寻道
优点:避免了“饥饿”现象
缺点:对于刚刚经过的磁道又来了新的请求,再次访问要最多等2个磁道长度
4.循环扫描算法:磁头单向移动,其余和扫描算法一样
优点:解决了可能的错过型请求的双倍延迟
缺点:浪费一个磁头的移动次数,什么都没做
5.NStepSCAN算法:磁盘请求分成N个队列,队列间用先来先服务处理,队列内用扫描算法处理
优点:避免新请求带来的粘着问题
缺点:N值很大时,接近于扫描算法;N=1时,就是先来先服务
6.FSCAN算法:磁盘请求只分成两个队列,一个是当前请求队列,一个是未来请求队列,当前队列按照扫描算法处理,当前队列处理完就处理另一个,此时另一个为当前队列,已经处理完的是未来请求队列
优点:简化NStepSCAN算法
缺点:所有新来的请求都在下次扫描时再处理,对于紧急的高优先级的请求也要放到下次
提高磁盘IO速度
一、磁盘高速缓存
在内存中开辟一块单独或和页面内存共享一块内存区用来缓存一部分磁盘区域。
1.数据交付方式
- 数据交付:数据交付,直接给数据
- 指针交付:将数据块的地址交给进程
2.置换算法
- 访问频率高的保留
- 可预见性
- 数据的一致性
3.周期性写回磁盘:LRU算法
- 防止数据意外丢失
二、预读数据
对于顺序读取的文件,可以提前将要读取的数据取出保存在缓存中,减少IO次数。
三、延迟写入
利用磁盘缓存,将缓存看成集装箱,数据线写入缓存,缓存满后,整体送到磁盘。若文件足够小,能直接写入缓存,则直接先写入缓存,然后进程返回,由缓存和磁盘慢慢交互。
四、优化物理块分布
以簇为单位分配磁盘空间,可以减少磁头移动距离。
五、虚拟盘
虚拟化技术产生的内存盘,将内存虚拟化为一块磁盘。
廉价磁盘冗余阵列(RAID)
1.并行交叉存取
有多个磁盘时,将一块数据分成若干份存放在不同的磁盘上的相同位置上,读取时,多个磁盘同时工作输出,产生巨大吞吐量的同时,提高输出速度。
2.RAID等级
- RAID 0:仅提供交叉存取,访问速度很快,无冗余校验,一个损坏,数据就丢了
- RAID 1:磁盘镜像功能,55分,一半数据盘,一半镜像盘。可靠性好,但磁盘利用率仅50%
- RAID 3:并行传输磁盘阵列,用一块磁盘作为校验,其余作为数据盘,利用率:(n-1)/n
- RAID 5:独立传送功能。每个驱动器有自己的的独立数据通道,独立IO,无校验盘,校验信息螺旋散布在所有数据盘上
- RAID 6 和 RAID 7:结合RAID 3和RAID 5的优点,但性能更优的阵列,价格更贵,RAID 7性能最好、价格最贵。
3.RAID的优点
- 可靠性高:除RAID 0外,其他都有容错技术
- IO速度高:并行交叉,速度提升N-1倍
- 性价比高:RAID的体积和相同容量的大型存储系统相比,仅为后者1/3,价格也为1/3,可靠性也不错