I/O管理和磁盘调度

执行I/O的三种技术:

1)可编程I/O:处理器代表一个进程给I/O模块发送一个I/O命令;该进程进入忙等待,直到操作完成才可以继续执行。
2)中断驱动I/O:处理器代表进程向I/O模块发出一个I/O命令。有两种可能性:如果来自进程的I/O指令是非阻塞的,那么处理器继续执行发出I/O命令的进程的后续指令。如果I/O指令是阻塞的,那么处理器执行的下一条指令则来自操作系统,它将当前的进程设置为阻塞态并调度其他进程。
3)直接储存器访问(DMA):一个DMA模块控制内存和I/O模块之间的数据交换。为传送一块数据,处理器给DMA模块发请求,并且只有当整个数据块传送结束后,它才被中断。

I/O功能的逻辑解构

逻辑I/O:逻辑I/O模块把设备当作一个逻辑资源来处理,它并不关心实际控制设备的细节。逻辑I/O模块代表用户进程管理的一般I/O功能,允许用户进程根据设备标识符以及诸如打开、关闭、读、写之类的简单命令与设备打交道。
设备I/O:请求的操作和数据被转换成适当的I/O指令序列,通道命令和控制器命令。
调度和控制:I/O操作的排队、调度实际发生在这一层。因此在这一层处理终端,收集并报告I/O状态。这一层是与I/O模块和设备硬件真正发生交互的软件层。
I/O管理和磁盘调度

I/O缓冲
 在讨论各种缓冲方法时,有时候需要区分两类I/O设备:面向块的I/O设备和面向流的I/O设备。
 面向块的设备将信息保存在块中,块的大小通常是固定的,传输过程中一次传送一块。通常可以通过快号访问数据。如磁盘和USB智能卡。
面向流的设备以字节流的方式输入输出数据,没有块结构。如终端、打印机、通信端口、鼠标等。
I/O管理和磁盘调度


磁盘调度

I/O管理和磁盘调度

 磁盘调度策略

先进先出(FIFO):按照先来先服务的顺序处理队列中的项目。

最短服务时间优先(SSTF):选择使磁头臂从当前位置开始移动最少的磁盘I/O请求。

扫描法(SCAN):磁头臂仅仅沿一个方向移动,并在途中满足所有未完成的请求,直到它到达这个方向上最后一个磁道,或者在这个方向上没有其他请求为止。接着反转服务方向,沿相反方向扫描,同样按顺序完成所有请求。

循环扫描法(C-SCAN):类似于SCAN,但到达这个方向上的最后一个磁道时,不反向扫描,而是继续从起点扫描。


RAID

一共有0~6一共7种,这其中RAID 0、RAID1、RAID 5和RAID6比较常用。
RAID 0:如果你有n块磁盘,原来只能同时写一块磁盘,写满了再下一块,做了RAID 0之后,n块可以同时写,速度提升很快,但由于没有备份,可靠性很差。n最少为2。
RAID 1:正因为RAID 0太不可靠,所以衍生出了RAID 1。如果你有n块磁盘,把其中n/2块磁盘作为镜像磁盘,在往其中一块磁盘写入数据时,也同时往另一块写数据。坏了其中一块时,镜像磁盘自动顶上,可靠性最佳,但空间利用率太低。n最少为2。
RAID 3:为了说明白RAID 5,先说RAID 3.RAID 3是若你有n块盘,其中1块盘作为校验盘,剩余n-1块盘相当于作RAID 0同时读写,当其中一块盘坏掉时,可以通过校验码还原出坏掉盘的原始数据。这个校验方式比较特别,奇偶检验,1 XOR 0 XOR 1=0,0 XOR 1 XOR 0=1,最后的数据时校验数据,当中间缺了一个数据时,可以通过其他盘的数据和校验数据推算出来。但是这有个问题,由于n-1块盘做了RAID 0,每一次读写都要牵动所有盘来为它服务,而且万一校验盘坏掉就完蛋了。最多允许坏一块盘。n最少为3.
RAID 5:在RAID 3的基础上有所区别,同样是相当于是1块盘的大小作为校验盘,n-1块盘的大小作为数据盘,但校验码分布在各个磁盘中,不是单独的一块磁盘,也就是分布式校验盘,这样做好处多多。最多坏一块盘。n最少为3.
I/O管理和磁盘调度
RAID 6:在RAID 5的基础上,又增加了一种校验码,和解方程似的,一种校验码一个方程,最多有两个未知数,也就是最多坏两块盘。
总体来说,

I/O管理和磁盘调度

来源引自知乎:https://www.zhihu.com/question/20131784/answer/28026813