操作系统-设备管理
设备管理
一、I/O系统
1.1设备分类
按设备的共享属性分类:
- 独占设备:在一段时间内只允许一个用户进程使用的设备。
- 共享设备:在一段时间内允许多个进程使用的设备。
- 虚拟设备:指通过虚拟技术将一台独占设备改造成若干台逻辑设备,供若干个用户进程同时使用。通常把这种经过虚拟技术处理后的设备称为虚拟设备。
按信息交换单位分类:
- 块设备:处理信息的基本单位是字符块。一般块的大小为512B~4KB,如磁盘、磁带等是块设备。
- 字符设备:处理信息的基本单位是字符。如键盘、打印机和显示器是字符设备。
1.2 I/O控制方式
I/O控制方式发展过程中始终贯穿的宗旨是尽量减少主机对I/O控制的干预。常用的输入/输出控制方式有下述几种:
- 程序直接控制方式
- 中断控制方式
- 直接存储器访问控制方式
- 通道控制方式
1.2.1 程序直接控制方式
早期计算机系统中无中断机构,设备控制采用程序直接控制方式。程序直接控制方式也称为轮询方式。即定期对设备状态进行查询,然后做出相应的处理。
以输入为例,其过程为:
程序直接控制方式特点:工作方式简单,但CPU的利用率低。
1.2.2 中断控制方式
现代计算机系统中对设备的控制广泛采用了中断控制方式。以输入为例,其过程为:中断控制方式特点:
CPU与设备并行工作,仅当I/O结束时才需CPU花费极短时间做中断处理。CPU利用率大大提高。
1.2.3 DMA控制方式
中断方式以字节为单位中断CPU,对块设备其效率极低,为此引入了DMA。DMA控制方式的思想是——在外设与内存之间开辟直接的数据交换通路,在控制器的控制下,设备和内存之间可以成批地进行数据交换。
为实现主机与控制器之间成块数据的直接交换,必须在DMA控制器中设置如下寄存器:
- 命令/状态寄存器
CR
:存放命令及状态 - 内存地址寄存器
MAR
:存放内存起始地址 - 数据寄存器
DR
:存放传输的数据 - 数据计数器
DC
:存放要读写的字(节)数
DMA控制器的组成如下图:DMA工作过程:
DMA方式与中断方式的主要区别:
- 中断控制方式在每个数据传送完成后中断CPU,而DMA控制方式则是在所要求传送的一批数据全部传送结束时中断CPU;
- 中断控制方式的数据传送是在中断处理时由CPU控制完成,而DMA控制方式则是在DMA控制器的控制下完成。
1.2.4 通道控制方式
通道控制方式是DMA控制方式的发展,所需的CPU干预更少。因此,通道控制方式与DMA方式类似,也是一种以内存为中心,实现设备与内存直接交换数据的控制方式。
在通道控制方式中,CPU只需发出启动指令,指出要求通道执行的操作和使用的I/O设备,该指令就可以启动通道并使该通道从内存中调出相应的通道程序执行。以输入为例,其通道工作过程为:
1.3 中断技术
中断是现代操作系统的常用技术之一,是实现多道程序的必要条件。
1.3.1 中断的基本概念
中断:指计算机系统内发生了某个急需处理的事件,使CPU暂停当前正在执行的程序,转去处理相应的事件处理程序,待处理完毕后又返回原来被中断处继续执行。
1.3.2 中断处理过程
一旦CPU响应中断,系统就开始进行中断处理。中断处理过程如下:
- 保护被中断进程现场。
- 分析中断原因,转去执行相应的中断处理程序。
- 恢复被中断进程的现场,CPU继续执行原来被中断的进程。
1.4 缓冲技术管理
提高处理机与外设并行速度的另一项技术是缓冲技术。
1.4.1 缓存的引入
引入缓冲(Buffering
)的主要原因有:
- 缓和CPU与I/O设备间速度不匹配的矛盾;
- 提高CPU与I/O设备并行操作的程度;
- 减少设备对CPU的中断频率,放宽CPU对中断响应时间的限制。
缓冲的实现方法:
- 硬件缓冲器:如I/O控制器中的数据缓冲寄存器,但成本太高。
- 软件缓冲:一片内存区域,用来临时存放输入输出数据。
缓冲技术分为:
- 单缓冲
- 双缓冲
- 循环缓冲
- 缓冲池
1.4.2 单缓冲
单缓冲是在设备和处理机之间设置一个缓冲区。

单缓冲执行过程:
- 在块设备输入时,先从磁盘把一块数据输入至缓冲区,然后OS将缓冲区中的数据送到用户区;
- 在块设备输出时,先将要输出的数据从用户区复制到缓冲区,然后再将缓冲区中的数据写到设备。
- 在字符设备输入时,缓冲区用于暂存用户输入的一行数据。在输入期间,用户进程阻塞以等待一行数据输入完毕;
- 在字符设备输出时,用户进程将一行数据送入缓冲区后继续执行计算。当用户进程已有第二行数据要输出时,若第一行数据尚未输出完毕,则用户进程阻塞。
1.4.3 双缓冲
引入双缓冲,可以进一步提高处理机与设备的并行操作程度。
双缓冲的过程:
- 在块设备输入时,可先将第一个缓冲区装满,之后便装填第二个缓冲区,与此同时OS可将第一个缓冲区中的数据传到用户区;当第一个缓冲区中的数据处理完后,若第二个缓冲区已装满,则处理机又可处理第二个缓冲区中的数据,而设备又可装填第一个缓冲区。输出与此类似。
- 在字符设备输入时,若采用行输入方式和双缓冲,则用户在输入完第一行后,CPU执行第一行中的命令,而用户可以继续向第二个缓冲区中输入一行数据。
1.4.4 循环缓冲
若输入输出速度与数据处理速度相当,则双缓冲能获得较好的效果;若速度相差较大,则可以通过增加缓冲区的数量来改善性能。
循环缓冲的组成:
- 循环缓冲中包含多个大小相等的缓冲区,每个缓冲区中有一个指针指向下一个缓冲区,最后一个缓冲区的指针指向第一个缓冲区,由此构成一个环形。
- 循环缓冲用于输入/输出时,还需要两个指针
in
和out
。 - 对于输入而言,
in
指向下一个可用的空缓冲区,out
指向下一个可以提取数据的满缓冲区。显然,对输出而言正好相反。
1.4.5 缓冲池
循环缓冲适用于合作进程,当系统较大且共享缓冲区的进程较多时,这要消耗大量内存。目前广泛使用的是公用缓冲池。
缓冲池由多个缓冲区组成,其中的缓冲区可供多个进程共享,既能用于输入又能用于输出。
二、设备分配
当进程提出I/O请求时,设备分配程序便按照一定的策略为其分配设备,同时还应分配相应的控制器和通道,以保证CPU与设备之间的通信。
2.1 设备分配中的数据结构
设备分配依据的主要数据结构有:
- 设备控制表(
DCT
):系统为每个设备配置一张设备控制表,用于记录设备的特性及与I/O控制器连接的情况。 - 控制器控制表(COCT):控制器控制表也是每个控制器一张,它反映I/O控制器的使用状态以及和通道的连接情况。
- 通道控制表(CHCT):每个通道都配有一张通道控制表,它反映通道的使用状态。
- 系统设备表(SDT):系统设备表整个系统一张,它记录了系统中所有物理设备的情况,每个物理设备占一个表目。
2.2设备分配策
- 先来先服务:根据进程对某设备发出请求的先后次序,将它们排成一个设备请求队列,设备分配程序总是把设备首先分配给队首进程。
- 优先级高者优先:按对某设备提出I/O请求的进程优先级由高到低排队,对优先级相同的I/O请求,按先来先服务的算法排队,设备分配程序总是把设备首先分配给队首进程。
2.3 Spooling系统
Spooling技术是将独占设备改造为共享设备的技术。
Spooling是 Simultaneous Peripheral Operating On-Line
的缩写,意思是外部设备同时联机操作,又称假脱机操作。
在Spooling系统中,用一道程序模拟脱机输入时的外围控制机功能,把低速输入设备上的数据传送到高速磁盘上;再用另一道程序来模拟脱机输出时的外围控制机功能,把数据从磁盘传送到低速输出设备上。
Spooling系统组成图:
共享打印机:
打印机是常用的独享设备,但利用Spooling技术可以将它改造成供多个用户共享的设备。
当用户进程请求打印输出时,Spooling系统同意为它打印,但不将打印机真正分配给它,而只为它做两件事:
- 由输出进程在输出井中为之申请一空闲磁盘区,并将要打印的数据送入其中;
- 输出进程再为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入其中,再将该表挂到请求打印队列上。
- 如果打印机空闲,输出进程将从打印队列队首取出一张请求打印表,根据表中的要求将要打印的数据从输出井传送到内存缓冲区,再由打印机进行打印。
- 打印完后,再取下一张表,直至请求队列为空。此时,输出进程阻塞,当再有打印请求时,才将输出进程唤醒。
三、磁盘
3.1磁盘结构
- 盘面(Platter):一个磁盘有多个盘面;
- 磁道(Track):盘面上的圆形带状区域,一个盘面可以有多个磁道;
- 扇区(Track Sector):磁道上的一个弧段,一个磁道可以有多个扇区,它是最小的物理储存单位,目前主要有 512 bytes 与 4 K 两种大小;
- 磁头(Head):与盘面非常接近,能够将盘面上的磁场转换为电信号(读),或者将电信号转换为盘面的磁场(写);
- 制动手臂(Actuator arm):用于在磁道之间移动磁头;
- 主轴(Spindle):使整个盘面转动。

3.1磁盘调度算法
读写一个磁盘块的时间的影响因素有:
- 旋转时间(主轴转动盘面,使得磁头移动到适当的扇区上)
- 寻道时间(制动手臂移动,使得磁头移动到适当的磁道上)
- 实际的数据传输时间
其中,寻道时间最长,因此磁盘调度的主要目标是使磁盘的平均寻道时间最短。
1. 先来先服务
FCFS, First Come First Served
按照磁盘请求的顺序进行调度。
优点是公平和简单。缺点也很明显,因为未对寻道做任何优化,使平均寻道时间可能较长。
2. 最短寻道时间优先
SSTF, Shortest Seek Time First
优先调度与当前磁头所在磁道距离最近的磁道。
虽然平均寻道时间比较低,但是不够公平。如果新到达的磁道请求总是比一个在等待的磁道请求近,那么在等待的磁道请求会一直等待下去,也就是出现饥饿现象。具体来说,两端的磁道请求更容易出现饥饿现象。
3. 电梯算法
SCAN
电梯总是保持一个方向运行,直到该方向没有请求为止,然后改变运行方向。
电梯算法(扫描算法)和电梯的运行过程类似,总是按一个方向来进行磁盘调度,直到该方向上没有未完成的磁盘请求,然后改变方向。
因为考虑了移动方向,因此所有的磁盘,请求都会被满足,解决了 SSTF 的饥饿问题。