I/O系统管理的主要对象: I/O设备,设备控制器。
I/O系统的主要任务: 完成用户提出的I/O请求; 提高I/O速率; 提高设备的利用率;为更高层的进程方便地使用这些设备提供手段;
I/O设备的类型非常多,且彼此间在多方面都有差异,诸如它们 接收和产生数据的速度,传输方向、粒度、数据的表示形式及可靠 性等方面。
隐藏物理设备的细节,在早期的OS中就已实现,它可方便用户 对设备的使用。与设备的无关性是在较晚时才实现的,这是在隐藏 物理设细节的基础上实现的。
要尽可能地让处理机和I/O设备并行操作,以提高它们的利用率: ①处理机能快速响应用户的I/O请求,使I/O设备尽快地运行起来; ②尽量减少在每个I/O设备运行时处理机的干预时间。
对I/O设备进行控制是驱动程序的功能,目前有四种控制方式: ① 采用轮询的可编程I/O方式; ② 采用中断的可编程I/O方式; ③ 直接存储器访问方式; ④ I/O通道方式。
从设备的共享属性上,可将系统中的设备分为如下两类: (1) 独占设备:进程应互斥地访问这类设备。如:打印机、磁带机等。 (2) 共享设备:在一段时间内允许多个进程同时访问的设备,如磁盘。
由于设备包括了较多的机械和电气部分,运行时容易出现错误和故障。从 处理的角度,可将错误分为临时性错误和持久性错误。对于临时性错误,可通过 重试操作来纠正,只有在发生了持久性错误时,才需要向上层报告。
I/O请求生存周期
块设备:指数据的存储和传输都是以数据块为单位的设备,常见的是磁盘。磁盘的地址需要用磁道号和扇区号表示,当上层发来读命令的时候,该接口会将抽象的命令转换为磁盘的盘面,磁道和扇区。
字符设备:数据的存储和传输都是以字节为单位的设备,常见的是键盘,打印机。字符设备通常设立一个字符缓冲区,I/O字符流顺序的进入字符缓冲区,顺序的送出
直接与硬件交换,当有中断信号来时,中断处理程序首先保存被中断进场的CPU环境,然后转入相应的设备中断程序处理,处理完后恢复现场。
驱动程序是进程和设备控制器直接的通信程序,将上层发来的抽象I/O请求转换为对I/O设备的具体命令和参数,并把它装入到设备控制器中的命令和参数寄存器。
实现与设备无关,I/O软件独立与具体使用的物理设备
I/O系统是适用于实现数据输入、输出及数据存储的系统。在 I/O系统中除了需要直接用于I/O和存储信息的设备外,还需要有 相应的设备控制器和高速总线。在有的大、中型计算机系统中, 还配置了I/O通道和I/O处理机.。
通常设备并不是直接与CPU进行通信,而是与设备控制器通信,在设备 与设备控制器之间有一接口,有三种类型的信号,各对应一条信号线。
磁盘设备可包括一个或多个物理盘片,每个磁盘片分一个或两个存储面(Surface,每个盘面上有若干个磁道(Track) 。为使处理简单起见,在每条磁道上可存储相同数目的二进制位。读取或写入时,磁头必须被定位在期望的磁道,并从所期望的柱面和扇区的开始。
寻道时间: 定位到期望的磁道所花费的时间
旋转延迟: 从零扇区开始处到达目的地花费的时间
平均旋转延迟时间::磁盘旋转一周时间的一半
磁盘I/O传输时间: T_a = T_s + \frac{1}{2r} + \frac{b}{rN} 其中 T_s 表示寻道时间,与磁盘转速有关,\frac{1}{2r} 表示旋转延时,\frac{b}{rN} 表示传输时间,b表示单次传输的字节数,N表示一个磁道的字节数,r表示磁盘转速。寻道时间和传输时间只能通过硬件层面进行优化,但是我们可以通过优化磁盘访问请求顺序来缩短寻道时间,从而提高磁盘访问性能。
原理: 按顺序处理请求,公平对待所有进程,在有很多进程的情况下,接近随机调度的性能。
原理: 选择从磁臂当前位置需要移动最少的I/O请求,总是选择最短寻道时间。
SSTF算法的实质是基于优先级的调度算法,因此就可能导致优先级低的进程发生“饥饿”(Starvation)现象。因为只要不断有新进程的请求到达,且其所要访问的磁道与磁头当前所在磁道的距离较近,这种新进程的I/O请求必然优先满足。在对SSTF算法略加修改后,则可防止低优先级进程出现“饥饿”现象。
原理: 磁臂在一个方向上移动,访问所有未完成的请求,直到磁臂到达该方向上最后的磁道后调换方向,也称为电梯算法(elevator algorithm)
SCAN算法既能获得较好的寻道性能,又能防止“饥饿”现象,故被广泛用于大、中、小型机器和网络中的磁盘调度。但也存在这样的问题:当磁头刚从里向外移动而越过了某一磁道时,恰好又有一进程请求访问此磁道,这时,该进程必须等待,待磁头继续从里向外,然后再从外向里扫描完处于外面的所有要访问的磁道后,才处理该进程的请求,致使该进程的请求被大大地推迟。
C-SCAN 原理: 限制了仅在一个方向上扫描当最后一个磁道也被访问过了后,磁臂返回到磁盘的另外一端再次进行
磁头粘着(Arm Stickiness)现象 SSTF、SCAN及CSCAN等算法中,可能出现磁头停留在某处不动的情况。 如:进程反复请求对某一磁道的I/O操作。 N步扫描算法 将磁盘请求队列分成长度为N的子队列,按FIFO算法依次处理所有子队列,扫描算法处理每个队列。 N值取得很大时,其性能接近SCAN算法;N=1时,则退化为FCFS算法。
FSCAN算法是N步扫描算法的简化,FSCAN只将磁盘请求队列分成两个子队列 FSCAN算法: 把磁盘I/O请求分成两个队列,交替使用扫描算法处理一个队列,新生成的磁盘I/O请求放入另一队列中,所有的新请求都将被推迟到下一次扫描时处理。