5. 输入/输出(I/O管理)
I/O系统管理的主要对象是I/O设备和相应的设备控制器。其主要的任务是,完成用户提出的I/O请求,提高I/O速率,以及提高设备的利用率,并能为更高层的进程方便地使用这些设备提高手段。
5.1 I/O管理概述
5.1.1 I/O设备
1. 什么是I/O设备
“I/O” 就是 “输入/输出”(Input/Output)。
I/O 设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。
![在这里插入图片描述](https://img-blog.csdnimg.cn/25f3fba988924970b0a935a889956510.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/041ef03a2c5a46f6be8851a490372e73.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
2. I/O设备的分类——按使用特性
![在这里插入图片描述](https://img-blog.csdnimg.cn/018162c5cf6c4fa5b19d62ae81abc955.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
3. I/O设备的分类——按传输速率分类
![在这里插入图片描述](https://img-blog.csdnimg.cn/3526f9cbf38c46a7bca9b24083d3200d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
字节多路通道用做连接低速或中速的I/O设备。
4. I/O设备的分类——按信息交换的单位分类
![在这里插入图片描述](https://img-blog.csdnimg.cn/9de8242db9684b239459e2bd9fe7b8ad.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
5.1.2 I/O控制器
![在这里插入图片描述](https://img-blog.csdnimg.cn/d9fb3737c2084c768b8a3f8eb7f4880b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
1. I/O设备的机械部件
I/O设备的机械部件主要用来执行具体I/O操作。
如我们看得见摸得着的鼠标/键盘的按钮;显示器的LED屏;移动硬盘的磁臂、磁盘盘面。
2. I/O设备的电子部件(I/O控制器)
I/O设备的电子部件通常是一块插入主板扩充槽的印刷电路板。
CPU无法直接控制I/O设备的机械部件,因此I/O设备还要有一个电子部件作为CPU和I/O设备机械部件之间的“中介”,用于实现CPU对设备的控制。这个电子部件就是I/O控制器,又称设备控制器。CPU可控制I/O控制器,又由I/O控制器来控制设备的机械部件。
![在这里插入图片描述](https://img-blog.csdnimg.cn/00b94efaefb04b5bad59cdd1a5d174af.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
3. I/O控制器的组成
由于I/O控制器位于CPU和设备之间,它既要与CPU通信,又要与设备通信,还应具有按照CPU所发来的命令去控制设备工作的功能,因此,现有的大多数控制器都是由设备控制器与处理机的接口、设备控制器与设备的接口和I/O逻辑三部分组成。
![在这里插入图片描述](https://img-blog.csdnimg.cn/238707c5fc98424699b8508c81063d40.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
由于I/O设备的速率较低,而CPU和内存的速率却很高,故在控制器中必须设置一个数据缓冲区。在输出时,用此缓冲区暂存在主机高速传来的数据,然后才以与I/O设备所匹配的速率将缓冲器中的数据传送给I/O设备。在输入时,缓冲区则用于暂存从I/O设备送来的数据,待接收到一批数据后,再将缓冲区中的数据高速地传送给主机。
值得注意的小细节:
- 一个I/O控制器可能会对应多个设备;
- 数据寄存器、控制寄存器、状态寄存器可能有多个(如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便CPU操作。有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/O;另一些计算机则采用I/O专用地址,即寄存器独立编址。
4. 内存映像I/O v.s. 寄存器独立编址
![在这里插入图片描述](https://img-blog.csdnimg.cn/76d44f00498e49ceacaad233928027ed.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
5.1.3 I/O控制方式
在I/O控制方式的整个发展过程中,始终贯穿着这样一条宗旨,即尽量减少主机对I/O控制的干预,把主机从繁杂的I/O控制事务中解脱出来,以便更多地去完成数据处理任务。
设备管理的主要任务之一是控制设备和内存或处理机之间的数据传送。外围设备和内存之间的输入/输出控制方式有4中。
![在这里插入图片描述](https://img-blog.csdnimg.cn/2fde70cdf8474239a22078e7143c096d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
1. 程序直接控制方式
![在这里插入图片描述](https://img-blog.csdnimg.cn/738f2e59d6db45f897dba69ea5b251fe.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/d8915a516c294fb38bcc6b10d1ae2ac4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
- CPU干预的频率
很频繁,I/O操作开始之前、完成之后需要CPU介入,并且在等待I/O完成的过程中CPU需要不断地轮询检查。
- 数据传送的单位
每次读/写一个字。
- 数据的流向
读操作(数据输入):I/O设备→CPU(指的是CPU的寄存器)→内存
写操作(数据输出):内存→CPU→I/O设备
每个字的读/写都需要CPU的帮助
- 主要缺点和主要优点
优点:实现简单。在读/写指令之后,加上实现循环检查的一系列指令即可(因此才称为“程序直接控制方式”)
缺点:CPU和I/O设备只能串行工作,CPU需要一直轮询检查,长期处于“忙等”状态 ,CPU利用率低。
2. 中断驱动方式
引入中断机制。由于I/O设备速度很慢,因此在CPU发出读/写命令后,可将等待I/O的进程阻塞,先切换到别的进程执行。当I/O完成后,控制器会向CPU发出一个中断信号,CPU 检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断。处理中断的过程中,CPU从I/O控制器读一个字的数据传送到CPU寄存器,再写入主存。接着,CPU恢复等待I/O的进程(或其他进程)的运行环境,然后继续执行。
注意: ①CPU会在每个指令周期的末尾检查中断;
②中断处理过程中需要保存、恢复进程的运行环境,这个过程是需要一定时间开销的。可见,如果中断发生的频率太高,也会降低系统性能。
![在这里插入图片描述](https://img-blog.csdnimg.cn/65e2e306598f4f9481cd14cce1b3962a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
- CPU干预的频率
每次I/O操作开始之前、完成之后需要CPU介入。
等待I/O完成的过程中CPU可以切换到别的进程执行。
- 数据传送的单位
每次读/写一个字
- 数据的流向
读操作(数据输入):I/O设备→CPU→内存
写操作(数据输出):内存→CPU→I/O设备
- 主要缺点和主要优点
优点:与“程序直接控制方式”相比,在“中断驱动方式”中,I/O控制器会通过中断信号主动报告I/O已完成,CPU不再需要不停地轮询。CPU和I/O设备可并行工作,CPU利用率得到明显提升。
缺点:每个字在I/O设备与内存之间的传输,都需要经过CPU。而频繁的中断处理会消耗较多的CPU时间。
3. DMA方式
与“中断驱动方式”相比,DMA方式( Direct Memory Access,直接存储器存取。主要用于块设备的I/O控制)有这样几个改进:
①数据的传送单位是“块”。不再是一个字、一个字的传送;
②数据的流向是从设备直接放入内存,或者从内存直接到设备。不再需要CPU作为“快递小哥”。
③仅在传送一个或多个数据块的开始和结束时,才需要CPU干预。
![在这里插入图片描述](https://img-blog.csdnimg.cn/278eeb27d29542ddb3798f803b38bb7f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
DMA控制器的组成:
![在这里插入图片描述](https://img-blog.csdnimg.cn/ab41d5a9c3284a6688a00c9ac8345745.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
命令/状态寄存器控制DMA的工作模式并给CPU反映它当前的状态,地址寄存器存放DMA作业时的源地址和目标地址,数据寄存器存放要DMA转移的数据。
DMA方式是在I/O设备与主存之间建立一条直接数据通路。是一种不经过CPU而直接从主存存取数据的数据交换模式,不过这条数据通路只是逻辑上的,实际并未直接建立一条物理线路,而通常是通过总线进行的。
- CPU干预的频率
仅在传送一个或多个数据块的开始和结束时,才需要CPU干预。
- 数据传送的单位
每次读/写一个或多个块(注意:每次读写的只能是连续的多个块,且这些块读入内存后在内存中也必须是连续的)。
- 数据的流向(不再需要经过CPU)
读操作(数据输入):I/O设备→内存
写操作(数据输出):内存→I/O设备
- 主要缺点和主要优点
优点:数据传输以“块”为单位,CPU介入频率进一步降低。数据的传输不再需要先经过CPU再写入内存,数据传输效率进一步增加。CPU和I/O设备的并行性得到提升。
缺点:CPU每发出一条I/O指令,只能读/写一个或多个连续的数据块。
如果要读/写多个离散存储的数据块,或者要将数据分别写到不同的内存区域时,CPU要分别发出多条I/O指令,进行多次中断处理才能完成。
4. 通道控制方式
通道:一种硬件,可以理解为是 “弱鸡版的CPU”(与CPU相比,通道可以执行的指令很单一,并且通道程序是放在主机内存中的,也就是说通道与CPU共享内存。)通道可以识别并执行一系列通道指令。
![在这里插入图片描述](https://img-blog.csdnimg.cn/363700e8df854d86ad11942f802d0143.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
编制好的通道程序是存放在主存中的。
来自通道的I/O中断事件由设备管理负责处理。
![在这里插入图片描述](https://img-blog.csdnimg.cn/09477fafaa324d728bc7b8e0ce7e58b4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/26ba4afb11674f5290a180cb266c97e0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
CPU启动通道时不管成功与否,通道都要回到CPU,通道在执行通道程序的过程中,CPU与通道并行,通道完成同道程序的执行后,便发I/O中断向CPU报告。
设置通道后,CPU只需向通道发送一条I/O指令。通道在收到该指令后,便从内存中取出本次要执行的通道程序,然后执行该通道程序,仅当通道完成规定的I/O任务后,才向CPU发出中断信号。因此通道用于完成内存与外设的信息交换。
- CPU干预的频率
极低,通道会根据CPU的指示执行相应的通道程序,只有完成一组数据块的读/写后才需要发出中断信号,请求CPU干预。
- 数据传送的单位
每次读/写一组数据块。
- 数据的流向(在通道的控制下进行)
读操作(数据输入):I/O设备→内存
写操作(数据输出):内存→I/O设备
- 主要缺点和主要优点
缺点:实现复杂,需要专门的通道硬件支持。
优点:CPU、通道、I/O设备可并行工作,资源利用率很高。
![在这里插入图片描述](https://img-blog.csdnimg.cn/d5ff0dca742a45ac839dbd3d7130e802.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
5.1.4 I/O子系统的层次结构
为了使复杂的I/O软件具有清晰的结构、良好的可移植性和适应性,在I/O软件中普遍采用了层次式结构,将系统输入/输出功能组织成一系列的层次,每层都利用其下层提供的服务,完成输入/输出功能中的某些子功能,并屏蔽执行功能实现的细节,向高层提供服务。在层次式结构的I/O软件中,只要层次间的接口不变,对某一层次中的软件的修改都不会引起其下层或高层代码的变更,仅最底层才涉及硬件的具体特性。
![在这里插入图片描述](https://img-blog.csdnimg.cn/93bb3db0d8724e7580e172780a3ee4ce.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
1. 用户层软件
![在这里插入图片描述](https://img-blog.csdnimg.cn/6f7d2812b97a4667b3fee8359aee01da.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
一般而言,大部分的I/O软件都在操作系统的内部,但仍有一小部分在用户层,包括与用户程序链接在一起的库函数,以及完全运行于内核之外的一些程序。用户层软件必须通过一组系统调用来获取操作系统服务。
2. 设备独立性软件
设备独立性软件,又称设备无关性软件。与设备的硬件特性无关的功能几乎都在这一层实现。
这一层主要实现的功能:
-
向上层提供统一的调用接口(如 read/write 系统调用)。
-
设备的保护。(原理类似与文件保护。设备被看做是一种特殊的文件,不同用户对各个文件的访问权限是不一样的,同理,对设备的访问权限也不一样)。
-
差错处理。(设备独立性软件需要对一些设备的错误进行处理)。
-
设备的分配与回收。
-
数据缓冲区管理。(可以通过缓冲技术屏蔽设备之间数据交换单位大小和传输速度的差异)
-
建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序。(用户或用户层软件发出I/O操作相关系统调用的系统调用时,需要指明此次要操作的I/O设备的逻辑设备名(eg:去学校打印店打印时,需要选择 打印机1/打印机2/打印机3 ,其实这些都是逻辑设备名);设备独立性软件需要通过“逻辑设备表(LUT,Logical UnitTable)”来确定逻辑设备对应的物理设备,并找到该设备对应的设备驱动程序)。
![在这里插入图片描述](https://img-blog.csdnimg.cn/881008cb962e42689c76fbb8b32f0286.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
操作系统系统可以采用两种方式管理逻辑设备表(LUT):
第一种方式,整个系统只设置一张LUT,这就意味着所有用户不能使用相同的逻辑设备名,因此这种方式只适用于单用户操作系统。
第二种方式,为每个用户设置一张LUT,各个用户使用的逻辑设备名可以重复,适用于多用户操作系统。系统会在用户登录时为其建立一个用户管理进程,而LUT就存放在用户管理进程的PCB中。
思考:为什么不同类型的I/O设备需要有不同的驱动程序处理?
各式各样的设备,外形不同,其内部的电子部件(I/O控制器)也有可能不同
![在这里插入图片描述](https://img-blog.csdnimg.cn/87ccd4e773494e858116ee04d5e13258.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/9079b896ee44444f8f25799dec418468.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
不同设备的内部硬件特性也不同,这些特性只有厂家才知道,因此厂家须提供与设备相对应的驱动程序,CPU执行驱动程序的指令序列,来完成设置设 备寄存器,检查设备状态等工作。
系统只要按设备类型配置设备驱动程序即可,即每类设备只需一个设备驱动程序。
3. 设备驱动程序
![](https://img-blog.csdnimg.cn/882d9ee7eaab43d58b7ec9d94267d2f6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
与硬件直接相关,负责具体实现系统对设备发出的操作指令,驱动I/O设备工作的驱动程序。
4. 中断处理程序
当I/O任务完成时,I/O控制器会发送一个中断信号,系统会根据中断信号类型找到相应的中断处理程序并执行。中断处理程序的处理流程如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/b1bd9987669b4761a68fa055c9e7f8a6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/bcbe70476ce843ecb2375fd706718618.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
5.1.5 补充
- 可寻址是块设备的基本特征。共享设备必须是可寻址的和可随机访问的设备。分配共享设备是不会引起进程死锁的。
- 虚拟设备是指把一个物理设备变换成多个对应的逻辑设备。不允许用户使用比系统中具有的物理设备更多的设备。
- 磁盘设备的I/O控制主要采用DMA方式。因为磁盘是典型的块设备,而DMA方式主要用户块设备。
- 为了便于上层软件的编制,设备控制器通常需要提供控制寄存器、状态寄存器和控制命令。控制寄存器和状态寄存器分别用于接收上层发来的命令并存放设备状态信号,是设备控制器与上层的接口;至于控制命令,每种设备对应的设备控制器都对应一组相应的控制命令,CPU通过控制命令控制设备控制器。而中断寄存器是位于计算机主机,不存在I/O地址寄存器。
- 在设备控制器中用于实现设备控制功能的是I/O逻辑。而接口是用来传输信号的。
- 在设备管理中,设备映射表(DMT)的作用是建立逻辑设备与物理设备的对应关系。
- 通道是一种特殊的处理器,所以属于硬件技术。SPOOLing、缓冲池、内存覆盖都是在内存的基础上通过软件实现的。
-
设备分配时应考虑设备的固有属性、设备独立性和设备安全性,一般不需要考虑及时性。设备的固有属性决定了设备的使用方式,设备独立性可以提高设备分配的灵活性和设备的利用率,设备安全性可以保证分配设备时不会导致永久阻塞。
- 计算机系统为每台设备确定一个编号以便区分和识别设备,这个确定的编号称为设备的绝对号。
- 关于通道、设备控制器和设备之间的关系是,通道控制设备控制器,设备控制器控制设备。
- 所有设备的启动工作都由系统统一来做。
- 本地用户通过键盘登录系统时,首先获得键盘输入信息的程序是中断处理程序。键盘是典型的通过中断I/O方式工作的外设,当用户输入信息时,计算机响应中断并通过中断处理程序获得输入信息。
- 将系统调用参数翻译成设备操作命令的工作由设备无关的操作系统软件完成。系统调用命令是操作系统提供给用户程序的通用接口,不会因为具体设备的不同而改变。而设备驱动程序负责执行操作系统发出的I/O命令,它因设备不同而不同。
- 计算磁盘号、磁头号和扇区号的工作是由设备驱动程序完成的。
- DMA控制方式与中断控制方式的主要区别如下:
1)中断控制方法在每个数据传送完成后中断CPU,而DMA控制方式则在所要求传送的一批数据全部传送结束时中断CPU。
2)中断控制方式的数据传送在中断处理时由CPU控制完成,而DMA控制方式则在DMA控制器的控制下完成。不过,在DMA控制方式中,数据传送的方向、存放数据的内存始址及传送数据的长度等仍然由CPU控制。
3)DMA方式以存储器为核心,中断控制方式以CPU为核心。因此DMA方式能与CPU并行工作。
4)DMA方式传输批量的数据,中断控制方式的传输则以字节为单位。
- DMA方式与通道方式的主要区别是什么?
在DMA控制方式中,在DMA控制器控制下设备和主存之间可以成批地进行数据交换而不用CPU干预,这样既减轻了CPU的负担,又大大提高了I/O数据传送的速度。通道控制方式与DMA控制方式类似,也是一种以内存为中心实现设备与内存直接交换数据的控制方式。不过在通道控制方式中,CPU只需发出启动指令,指出通道相应的操作和I/O设备,该指令就可以启动通道并使通道从内存中调出相应的通道程序执行。与DMA控制方式相比,通道控制方式所需的CPU干预更少,并且一个通道可以控制多台设备,进一步减轻了CPU的负担。另外,对通道来说,可以使用一些指令灵活改变通道程序,这一点DMA控制方式无法做到。
5.2 I/O核心子系统
5.2.1 I/O子系统概述
由于I/O设备种类繁多,功能和传输速率差异巨大,因此需要多种方法来进行设备控制。这些方法共同组成了操作系统内核的I/O子系统,它将内核的其他方面从繁重的I/O设备管理中解放出来。I/O核心子系统提供的服务主要有I/O调度、缓冲与高速缓存、设备分配与回收、假脱机、设备保护和差错处理等。
![在这里插入图片描述](https://img-blog.csdnimg.cn/2052944ccdcf4f5d8962ad62defd784b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
这些功能在哪一层实现?
![在这里插入图片描述](https://img-blog.csdnimg.cn/557bce7c723e4ce0a03d70890503adcf.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
设备保护:
操作系统需要实现文件保护功能,不同的用户对各个文件有不同的访问权限(如:只读、读和写等)。
在UNIX系统中,设备被看做是一种特殊的文件,每个设备也会有对应的FCB。当用户请求访问某个设备时,系统根据FCB中记录的信息来判断该用户是否有相应的访问权限,以此实现“设备保护”的功能。(参考“文件保护”小节)
5.2.2 I/O调度概念
I/O调度:用某种算法确定一个好的顺序来处理各个I/O请求。
如:磁盘调度(先来先服务算法、最短寻道优先算法、SCAN算法、C-SCAN算法、LOOK算法、C-LOOK算法)。当多个磁盘I/O请求到来时,用某种调度算法确定满足I/O请求的顺序。
同理,打印机等设备也可以用先来先服务算法、优先级算法、短作业优先等算法来确定I/O调度顺序。
5.2.3 高速缓存与缓冲区
1. 缓冲区的概念和作用
缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区。
使用硬件作为缓冲区的成本较高,容量也较小,一般仅用在对速度要求非常高的场合(如存储器管理中所用的联想寄存器,由于对页表的访问频率极高,因此使用速度很快的联想寄存器来存放页表项的副本)
一般情况下,更多的是利用内存作为缓冲区,“设备独立性软件”的缓冲区管理就是要组织管理好这些缓冲区。
![在这里插入图片描述](https://img-blog.csdnimg.cn/ef3cc9ac60bc47768061be96b7177223.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
2. 单缓冲
假设某用户进程请求某种块设备读入若干块的数据。若采用单缓冲的策略,操作系统会在主存中为其分配一个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)。
注意:当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出。
![在这里插入图片描述](https://img-blog.csdnimg.cn/2de3dc5473854fd1acbb231e4d25f3a9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
1)假设T>C
![在这里插入图片描述](https://img-blog.csdnimg.cn/d9fec362bfa4491fb43d6d54adef05f5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
2)假设T<C
![在这里插入图片描述](https://img-blog.csdnimg.cn/699c3ff8f7de4e5dbfe2b8df79c6cd16.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/9496578e58854733b334dfeca61c05f8.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
3. 双缓冲
假设某用户进程请求某种块设备读入若干块的数据。若采用双缓冲的策略,操作系统会在主存中为其分配两个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)
双缓冲题目中,假设初始状态为:工作区空,其中一个缓冲区满,另一个缓冲区空。
1)假设T>C+M
![在这里插入图片描述](https://img-blog.csdnimg.cn/876595e665a74fceb90cf9ead4c8c438.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
2)假设T<C+M
![在这里插入图片描述](https://img-blog.csdnimg.cn/f2dc5823ff9c41bb960e5a0f5f0d082c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
结论:采用双缓冲策略,处理一个数据块的平均耗时为 Max (T, C+M)。
4. 使用单/双缓冲在通信时的区别
两台机器之间通信时,可以配置缓冲区用于数据的发送和接受。
![在这里插入图片描述](https://img-blog.csdnimg.cn/ad457ba183064fc3a037b1cbda10dda1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
显然,若两个相互通信的机器只设置单缓冲区,在任一时刻只能实现数据的单向传输。
![在这里插入图片描述](https://img-blog.csdnimg.cn/a5453cf067ea4b1c97069993d52f080d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
若两个相互通信的机器设置双缓冲区,则同一时刻可以实现双向的数据传输。
注:管道通信中的“管道”其实就是缓冲区。要实现数据的双向传输,必须设置两个管道=。
5. 循环缓冲区
将多个大小相等的缓冲区链接成一个循环队列。
注:以下图示中,橙色表示已充满数据的缓冲区,绿色表示空缓冲区。
![在这里插入图片描述](https://img-blog.csdnimg.cn/9649ff5553844eb79ae2cb9dc981818d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
6. 缓冲池
缓冲池由系统中共用的缓冲区组成。这些缓冲区按使用状况可以分为:空缓冲队列、装满输入数据的缓冲队列(输入队列)、装满输出数据的缓冲队列(输出队列)。
另外,根据一个缓冲区在实际运算中扮演的功能不同,又设置了四种工作缓冲区:用于收容输入数据的工作缓冲区(hin)、用于提取输入数据的工作缓冲区(sin)、用于收容输出数据的工作缓冲区(hout)、用于提取输出数据的工作缓冲区(sout)。
![在这里插入图片描述](https://img-blog.csdnimg.cn/c3ac51f2afd7493db68e76aa21e1860f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/06dc35e0bb224bb09c0bbeb5cc977b0b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/0c8b6800926d4a7b893052e54336ac6a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/01c33ecaf11a4ebcbf02c09322885e68.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
5.2.4 设备分配与回收
设备分配是根据用户的I/O请求分配所需的设备。分配的总原则是充分发挥设备的使用效率,尽可能地让设备忙碌,又要避免由于不合理的分配方式造成进程死锁。
1. 设备分配时应考虑的因素
![在这里插入图片描述](https://img-blog.csdnimg.cn/ef48f3c5f41344abb6e3ef4d8e1e850b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
1)设备的固有属性
设备的固有属性可分为三种:独占设备、共享设备、虚拟设备。
独占设备——一个时段只能分配给一个进程(如打印机)
共享设备——可同时分配给多个进程使用(如磁盘),各进程往往是宏观上同时共享使用设备,而微观上交替使用。
虚拟设备——采用 SPOOLing 技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用(如采用 SPOOLing 技术实现的共享打印机)
2)设备分配算法
设备的分配算法:
先来先服务
优先级高者优先
短任务优先
……
3)设备分配中的安全性
从进程运行的安全性上考虑,设备分配有两种方式:
安全分配方式:为进程分配一个设备后就将进程阻塞,本次I/O完成后才将进程唤醒。(eg:考虑进程请求打印机打印输出的例子)
一个时段内每个进程只能使用一个设备。
优点:破坏了“请求和保持”条件,不会死锁。
缺点:对于一个进程来说,CPU和I/O设备只能串行工作。
不安全分配方式:进程发出I/O请求后,系统为其分配I/O设备,进程可继续执行,之后还可以发出新的I/O请求。只有某个I/O请求得不到满足时才将进程阻塞。
一个进程可以同时使用多个设备。
优点:进程的计算任务和I/O任务可以并行处理,使进程迅速推进。
缺点:有可能发生死锁(死锁避免、死锁的检测和解除)。
2. 静态分配和动态分配
静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源。破坏了“请求和保持”条件,不会发生死锁。
动态分配:进程运行过程中动态申请设备资源。
3. 设备分配管理中的数据结构
“设备、控制器、通道”之间的关系:
![在这里插入图片描述](https://img-blog.csdnimg.cn/19e77f1b2f5342499a8aa864faf3d5d2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
一个通道可控制多个设备控制器,每个设备控制器可控制多个设备。
1)设备控制表(DCT)
设备控制表(DCT):系统为每个设备配置一张DCT,用于记录设备情况。
![在这里插入图片描述](https://img-blog.csdnimg.cn/609ebba5f5384706a78ae30ee582e88a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
2)控制器控制表(COCT)
控制器控制表(COCT):每个设备控制器都会对应一张COCT。操作系统根据COCT的信息对控制器进行操作和管理。
![在这里插入图片描述](https://img-blog.csdnimg.cn/fd37e6bb7ced40439a09290d995e8e53.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
3)通道控制表(CHCT)
通道控制表(CHCT):每个通道都会对应一张CHCT。操作系统根据CHCT的信息对通道进行操作和管理。
![在这里插入图片描述](https://img-blog.csdnimg.cn/1a41b193cf4e4dbea5b7a2df48e75f33.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
4)系统设备表(SDT)
系统设备表(SDT):记录了系统中全部设备的情况,每个设备对应一个表目。
![在这里插入图片描述](https://img-blog.csdnimg.cn/3e70a7aa28bd462788a2cc33531d06ff.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
4. 设备分配的步骤
- 根据进程请求的物理设备名查找SDT(注:物理设备名是进程请求分配设备时提供的参数)
- 根据SDT找到DCT,若设备忙碌则将进程PCB挂到设备等待队列中,不忙碌则将设备分配给进程。
- 根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程。
- 根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程。
注:只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可启动I/O设备进行数据传送。
缺点:
①用户编程时必须使用“物理设备名”,底层细节对用户不透明,不方便编程。 ②若换了一个物理设备,则程序无法运行。
③若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待。
改进方法:建立逻辑设备名与物理设备名的映射机制,用户编程时只需提供逻辑设备名。
5. 设备分配步骤的改进
- 根据进程请求的逻辑设备名查找SDT(注:用户编程时提供的逻辑设备名其实就是“设备类型”)
- 查找SDT,找到用户进程指定类型的、并且空闲的设备,将其分配给该进程。操作系统在逻辑设备表(LUT)中新增一个表项。
- 根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程。
- 根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程。
![在这里插入图片描述](https://img-blog.csdnimg.cn/286956629fb14607b6e8c52b212f03ac.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
逻辑设备表(LUT)建立了逻辑设备名与物理设备名之间的映射关系。
某用户进程第一次使用设备时使用逻辑设备名向操作系统发出请求,操作系统根据用户进程指定的设备类型(逻辑设备名)查找系统设备表,找到一个空闲设备分配给进程,并在LUT中增加相应表项。
如果之后用户进程再次通过相同的逻辑设备名请求使用设备,则操作系统通过LUT表即可知道用户进程实际要使用的是哪个物理设备了,并且也能知道该设备的驱动程序入口地址。
逻辑设备表的设置问题:
整个系统只有一张LUT:各用户所用的逻辑设备名不允许重复,适用于单用户操作系统。
每个用户一张LUT:不同用户的逻辑设备名可重复,适用于多用户操作系统
5.2.5 SPOOLing技术(假脱机技术)
1. 脱机技术的概念
![在这里插入图片描述](https://img-blog.csdnimg.cn/ec939c85254445b2a925456645a3c1d3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
手工操作阶段:主机直接从 I/O设备获得数据,由于设备速度慢,主机速度很快。人机速度矛盾明显,主机要浪费很多时间来等待设备。
![在这里插入图片描述](https://img-blog.csdnimg.cn/39800027e30b4ac597d61764b494687f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
批处理阶段引入了脱机输入/输出技术(用磁带完成)。
2. 假脱机技术——输入井和输出井
“假脱机技术”,又称“SPOOLing 技术”是用软件的方式模拟脱机技术。SPOOLing 系统的组成如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/4aa5160c7f0c447184612a0f6d62910c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
用户的打印结果首先是送到位于磁盘固定区域的输出井。
![在这里插入图片描述](https://img-blog.csdnimg.cn/c155feacebc94eb38fd306961e2b9418.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
3. 假脱机技术——输入进程和输出进程
![在这里插入图片描述](https://img-blog.csdnimg.cn/589dc0e532224ec8a9acd683f5862b79.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
要实现SPOOLing 技术,必须要有多道程序技术的支持。系统会建立 “输入进程”和 “输出进程”。
![在这里插入图片描述](https://img-blog.csdnimg.cn/682f7ce0bb554e958b4363e3635882a2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
输入进程模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区再送到输入井。当 CPU 需要输入数据时,直接将数据从输入井读入内存。输出进程模拟脱机输出时的外围控制机,把用户要求输出的数据先从内存送到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区送到输出设备。
4. 假脱机技术——输入/输出缓冲区
![在这里插入图片描述](https://img-blog.csdnimg.cn/c9c98b9c3c1f438da39bb00e02408731.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
5. 共享打印机原理分析
独占式设备——只允许各个进程串行使用的设备。一段时间内只能满足一个进程的请求。
共享设备——允许多个进程“同时”使用的设备(宏观上同时使用,微观上可能是交替使用)。可以同时满足多个进程的使用请求。
![在这里插入图片描述](https://img-blog.csdnimg.cn/bcb79e666e474bdaae114d5843d61bd5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/daab6d4e66a94ac1922d02f1d31093a7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
当多个用户进程提出输出打印的请求时,系统会答应它们的请求,但是并不是真正把打印机分配给他们,而是由假脱机管理进程为每个进程做两件事:
- 在磁盘输出井中为进程申请一个空闲缓冲区(也就是说,这个缓冲区是在磁盘上的),并将要打印的数据送入其中;
- 为用户进程申请一张空白的打印请求表,并将用户的打印请求填入表中(其实就是用来说明用户的打印数据存放位置等信息的),再将该表挂到假脱机文件队列上。当打印机空闲时,输出进程会从文件队列的队头取出一张打印请求表,并根据表中的要求将要打印的数据从输出井传送到输出缓冲区,再输出到打印机进行打印。用这种方式可依次处理完全部的打印任务。
虽然系统中只有一个台打印机,但每个进程提出打印请求时,系统都会为在输出井中为其分配一个存储区(相当于分配了一个逻辑设备),使每个用户进程都觉得自己在独占一台打印机,从而实现对打印机的共享。
SPOOLing 技术可以把一台物理设备虚拟成逻辑上的多台设备,可将独占式设备改造成共享设备。
![在这里插入图片描述](https://img-blog.csdnimg.cn/ebd78630aeb24fd4b2e5d6391c25ae26.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aO5772e,size_20,color_FFFFFF,t_70,g_se,x_16)
5.2.6 补充
- 什么是设备的独立性?引入设备的独立性有什么好处?
设备独立性是指用户在编程序时使用的设备与实际设备无关。一个程序应独立于分配给它的某类设备的具体设备,即在用户程序中只指明I/O使用的设备类型即可。
设备独立性有以下优点:
①方便用户编程。
②使程序运行不受具体机器环境的限制。
③便于程序移植。
- 磁盘属于共享设备。共享设备是指在一个时间间隔内可被多个进程同时访问的设备。
打印机和磁带机都不属于。打印机在一个时间间隔内被多个进程访问时打印出来的文档就会乱;磁带机旋转到所需的读写位置需要较长时间,若一个时间间隔内被多个进程访问,磁带机就只能一直旋转,没时间读写。
- 程序员利用系统调用打开I/O设备时,通常使用的设备标识是逻辑设备名。用户程序对I/O设备的请求采用逻辑设备名,而程序实际执行时使用物理设备名,它们之间的转换是由设备无关软件层完成的。
- 可以改善磁盘I/O性能的是重排I/O请求次序、预读和滞后写、优化文件物理块的分布。重排I/O请求次序是进行I/O调度,使进程之间公平地共享磁盘访问,减少I/O完成所需要的平均等待时间;缓冲区结合预读和滞后写技术对于具有重复性及阵发性的I/O进程改善磁盘I/O性能很有帮助;优化文件物理块的分布可以减少寻找时间与延迟时间,从而提高磁盘性能。
- 为了使并发进程能有效地进行输入和输出,最好采用缓冲池结构的缓存技术。缓冲池是系统的共用资源,可供多个进程共享。
- 输入井和输出井是在磁盘上开辟的存储空间,而输入/输出缓冲区则是在内存中开辟的。所以缓冲技术的缓冲区是在内存中的。
- 若I/O所花费的时间比CPU的处理时间短得多,则缓冲区几乎无效。因为缓冲区主要解决输入/输出速度比CPU处理的速度满而造成数据积压的矛盾。
- 缓冲区管理要重要考虑的问题是实现进程访问缓冲区的同步。在缓冲机制中,无论是单缓冲、多缓冲还是缓冲池,由于缓冲区是一种临界资源,所以在使用缓冲区时都有一个申请和释放(及互斥)的问题需要考虑。
- 提高单机资源利用率的关键技术是多道程序设计技术。在单机系统中,最关键的资源是处理机资源,最大化地提高处理机利用率,技术最大化地提高系统效率。多道程序设计技术是提高处理机利用率的关键技术。
- SPOOLing技术可将独占设备改造为共享设备,其主要目的是提高系统资源/独占设备的利用率。
- SPOOLing技术需要使用磁盘空间(输入井和输出井)和内存空间(输入/输出缓冲区),并不需要外围计算机的支持。
- 在SPOOLing系统中,用户进程实际分配到的是外存区,即虚拟设备。
- SPOOLing技术是操作系统中采用的以空间换取时间的技术。
- 在SPOOLing系统中,设备与输入井/输出井之间数据的传送是由系统实现的。
其他章节:
操作系统王道考研复习——第一章(计算机系统概述)
操作系统王道考研复习——第二章(进程管理) 上
操作系统王道考研复习——第二章(进程管理) 下
操作系统王道考研复习——第三章(内存管理/存储器管理)
操作系统王道考研复习——第四章(文件管理)