IO设备
IO设备就是可以将数据输入到计算机,或者可以接受计算机输出数据的外部设备,属于计算机中的硬件设备。
IO设备的分类
按使用特性
人机交互类外部设备。例如鼠标、键盘、打印机等——用于人机交互
存储设备。例移动硬盘、光盘等——用于数据存储
网络通信设备。调制解调器等——用于网络通信
按传输速率
低速设备。例如鼠标、键盘等——传输速率为每秒几个到几百字节。
中速设备。如激光打印机等——传输速率为每秒数千至上万个字节。
高速设备。如硬盘等——传输速率为每秒数千字节至千兆字节。
按信息交换的单位分类
块设备。传输速率较高,可寻址,即对它可随机地读/写任一块,如磁盘等。
字符设备。传输速率较慢,不可寻址,在输入/输出时常采用中断驱动方式,如鼠标、键盘等。
IO控制方式
程序直接控制方式
从计算机外部设备读取的每个字,CPU需要对外设状态进行循环检查,直到确定该字已经在IO控制器的数据寄存器中。
优点:实现简单。在读/写指令之后,加上实现循环检查的一系列指令即可。
缺点:CPU和IO设备只能串行工作,CPU需要一直轮询检查,长期处于“忙等”状态,CPU利用率低。
中断驱动方式
引入中断机制。由于IO设备速度要远慢于CPU速度,因此在CPU发出读写命令后,可将等待IO的进程阻塞,先切换到别的进程指向。当IO完成后,控制器会向CPU发出一个中断信号,CPU检测到中断信号后,会保存当前进程运行环境,转去执行中断处理程序处理该中断。
优点:与程序直接控制方式相比,在中断驱动方式中,IO控制器会通过中断信号主动报告IO已完成,CPU不再需要不停地轮询。CPU和IO设备可以并行工作,CPU利用率得到明显提升。
缺点:每个字在IO设备与内存之间的传输,都需要经过CPU,而频繁的中断处理会消耗较多的CPU时间。
DMA方式
DMA(Direct Memory Access,直接存储器存取)方式主要用于块设备的IO控制,对于中断驱动方式有以下几点改进:
- 数据的传输单位是“块”,一次可以传输多个字。
- 数据的流向是从设备直接放入内存,或从内存直接到设备,无需经历CPU中转。
DMA方式中会从IO中读入的数据线存入到DR(数据寄存器)中,然后再根据MAR(内存地址寄存器)来将IO读入的数据放到内存相应地址中。
优点:传输以块为单位,CPU介入频率进一步降低。数据传输效率进一步增加。CPU和IO设备的并行性得到提升。
缺点:CPU每发出一条IO指令,只能读写一个或多个连续的数据块。
SPOOLing技术(假脱机技术)
假脱机技术是为了缓和CPU的高速性和IO设备低速性之间的矛盾,该技术利用专门的外围控制机,将低速IO设备上的数据传送到高速磁盘上,或者相反。
系统会在磁盘开辟出输入井和输出井两个存储区域。
“输入井”模拟脱机输入时的磁带,用于收容IO设备输入的数据,“输出井”模拟脱机输出时的磁带,用于收容用户进程输出的数据。
然后通过内存的输入缓冲区和输出缓冲区作为中转,来实现磁盘与输入输出设备的交互。
SPOOLing技术是必须要有多道程序技术的支持,系统会建立输入进程和输出进程。
缓冲区管理
缓冲区是一个存储区域,是用于缓和CPU与IO设备之间速度不匹配的矛盾,减少对CPU的中断频率,放宽对CPU中断相应时间的限制,解决数据粒度不匹配的问题,并提高CPU与IO之间的并行性。
缓冲区的实现方法:
- 采用硬件缓冲区,用一个寄存器或其他部件来作为数据间的缓冲区,但由于成本太高,一般不建议采用硬件缓冲区。
- 采用内存缓冲区。将内存一部分空间作为缓冲区使用。
根据系统设置缓冲器的个数,缓冲技术可以分为以下几种:
单缓冲
操作系统会在主存中为其分配一个缓冲区。当设备和处理机交换数据时,会先将数据写入缓冲区,然后需要数据的设备或处理机从缓冲区取走数据,在缓冲区写入或取出时,其他需要使用的设备要等待。
采用单缓冲策略,处理一块数据平均耗时为Max(输入时间,处理时间)+传送时间。
双缓冲
采用双缓冲策略,操作系统会在主存中为其分配两个缓冲区。
若假设初始状态为:工作区空,其中一个缓冲区满,另一个缓冲区空
假设输入时间<处理时间+传送时间
由此可得处理一块数据所消耗的时间,只有当回到初始状态才算数据处理完成,所以首先会经历M传送时间,然后再经历C处理时间,同步地再从工作区读入一块数据,输入时间为T,由于输入时间<处理时间+传送时间,所以处理一块数据所消耗的时间为T。
循环缓冲区
循环缓冲区是将内存中多个大小相等的缓冲区链接成一个循环队列。
磁盘与固态硬盘
磁盘就是由表面涂有磁性物质的物理盘片,通过一个称为磁头的导体线圈从磁盘存取数据。
磁盘进行读写操作时,磁头固定,磁盘再下面高速旋转。
由上图可得,可以通过柱面号,盘面号,扇区号来定位任意一个“磁盘块”。在“文件的物理结构”中存放在外存中的几号块,就可以转换成柱面号,盘面号,扇区号的地址形式。
磁盘按不同的形式可分为若干类型:
磁头相对于盘片的径向方向固定的称为固定头磁盘,每个磁道对应一个磁头。(磁头不可移动)
磁头可移动的,称为活动头磁盘,磁头臂可来回伸缩定位磁道;
磁盘永久固定在磁盘驱动器内的,称为固定盘磁盘;
可移动和替换的,称为可换盘磁盘。
磁盘调度算法
磁盘调度算法了解前需要知道相关判断算法好坏的指标:
寻找时间(寻道时间)$T_s$:在读/写数据前,将磁头移动到指定磁道所花的时间。
延迟时间$T_R$:通过旋转磁盘,使磁头定位到目标扇区所需要的时间,设磁盘转速为r(单位:转/秒),则平均所需的延迟时间
$$
T_R=(1/2)*(1/r)=1/2r
$$传输时间$T_t$:从磁盘读出或向磁盘写入数据所经历的时间,假设磁盘转速为r,此次读写的字节数为b,每个磁道上的字节数为N,则传输时间
$$
T_t=\frac{1}{r}*\frac{b}{N}=\frac{b}{rN}
$$
先来先服务算法(FCFS)
根据进程请求访问磁盘的先后顺序进行调度。
假设磁头初始位置是100号磁道
55、58、39、18、90、160、150、38、184号磁道陆续来访问,
根据FCFS的规则,根据请求到达的顺序来响应。
最短寻找时间优先(SSTF)
SSTF会优先处理磁道是与当前磁头最近的磁道。可以保证每次的寻道时间最短,但是并不能保证总的寻道时间最短。
假设磁头初始位置是100号磁道
55、58、39、18、90、160、150、38、184号磁道陆续来访问,
根据SSTF的规则,根据离磁头初始位置最近的磁道来响应。
扫描算法(SCAN)
扫描算法规定只要磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外移动。也称电梯算法。
假设某磁盘的磁道为0~200号,磁头的初始位置是100号磁道,且此时磁头正在往磁道号增大的方向移动,有多个进程先后陆续地请求访问
55、58、39、18、90、160、150、38、184号磁道
LOOK调度算法
LOOK调度算法在如果磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向。
假设某磁盘的磁道为0~200号,磁头的初始位置是100号磁道,且此时磁头正在往磁道号增大的方向移动,有多个进程先后陆续地请求访问
55、58、39、18、90、160、150、38、184号磁道
循环扫描算法(C-SCAN)
C-SCAN算法规定只要磁头朝某个特定方向移动时才处理磁道访问请求,而返回时直接快速移动至起始端而不处理任何请求。
假设某磁盘的磁道为0~200号,磁头的初始位置是100号磁道,且此时磁头正在往磁道号增大的方向移动,有多个进程先后陆续地请求访问
55、58、39、18、90、160、150、38、184号磁道
C-LOOK调度算法
C-LOOK调度算法主要是用于解决C-SCAN算法需要到达最边上的磁道时才能改变磁头移动方向的缺点,用C-LOOK算法如果磁头移动的方向上已经没有磁道访问请求了,就可以立即让磁头返回,并且磁头只需要返回到有磁道访问请求的位置即可。
假设某磁盘的磁道为0~200号,磁头的初始位置是100号磁道,且此时磁头正在往磁道号增大的方向移动,有多个进程先后陆续地请求访问
55、58、39、18、90、160、150、38、184号磁道