第 5 章 输入输出管理

1、I/O设备的基本概念和分类

1.1、思维导图

操作系统需要管理的资源

I/O 设备的基本概念和分类

1.2、什么是I/O设备

“I/O”就是“输入/输出”(Input/Output)

I/O设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。


鼠标、键盘——典型的输入型设备


显示器——输出型设备


移动硬盘——即可输入、又可输出的设备

Write操作与Read操作

UNIX系统将外部设备抽象为一种特殊的文件,用户可以使用与文件操作相同的方式对外部设备进行操作。

Write操作:向外部设备写出数据

Read操作:从外部设备读入数据

1.3、I/O设备的分类

按使用特性分类


  1. 人机交互类外设:鼠标、键盘、打印机等——用于人机交互。数据传输速度慢

  2. 存储设备:移动硬盘、光盘等——用于数据存储。数据传输速度快

  3. 网络通信设备:调制解调器等——用于网络通信。数据传输速度介于上述二者之间

按传输速率分类


  1. 低速设备:鼠标、键盘等——传输速率为每秒几个到几百字节

  2. 中速设备:如激光打印机等——传输速率为每秒数千至上万个字节

  3. 高速设备:如磁盘等——传输速率为每秒数千字节至千兆字节的设备

按信息交换的单位分类


  1. 块设备:如磁盘等——数据传输的基本单位是“块”。传输速率较高,可寻址,即对它可随机地读/写任一块

  2. 字符设备:鼠标、键盘等——数据传输的基本单位是字符。传输速率较慢,不可寻址,在输入/输出时常采用中断驱动方式

1.4、本节课小结

2、I/O控制器

2.1、思维导图

I/O设备由机械部件和电子部件组成

2.2、I/O设备的机械部件

I/O设备的机械部件

I/O设备的机械部件主要用来执行具体I/O操作。如我们看得见摸得着的鼠标/键盘的按钮;显示器的LED屏;移动硬盘的磁臂、磁盘盘面。

I/O设备的电子部件通常是一块插入主板扩充槽的印刷电路板。

2.3、I/O设备的电子部件

I/O设备的电子部件(I/O控制器)

CPU无法直接控制I/O设备的机械部件,因此I/O设备还要有一个电子部件作为CPU和I/O设备机械部件之间的“中介”,用于实现CPU对设备的控制。

这个电子部件就是I/O控制器,又称设备控制器。CPU可控制I/O控制器,又由I/O控制器来控制设备的机械部件。

I/O控制器的功能

接受和识别CPU发出的命令:如CPU发来的read/write命令,I/O控制器中会有相应的控制寄存器来存放命令和参数

向CPU报告设备的状态:I/O控制器中会有相应的状态寄存器,用于记录I/O设备的当前状态。如:1表示空闲,0表示忙碌

数据交换:I/O控制器中会设置相应的数据寄存器。输出时,数据寄存器用于暂存CPU发来的数据,之后再由控制器传送设备。输入时,数据寄存器用于暂存设备发来的数据,之后CPU从数据寄存器中取走数据

地址识别:类似于内存的地址,为了区分设备控制器中的各个寄存器,也需要给各个寄存器设置一个特定的“地址”。I/O控制器通过CPU提供的“地址”来判断CPU要读/写的是哪个寄存器

2.4、I/O控制器的组成

I/O控制器的组成:CPU与控制器的接口;I/O逻辑;控制器与设备的接口

CPU与控制器的接口:用于实现CPU与控制器之间的通信。CPU通过控制线发出命令;通过地址线指明要操作的设备;通过数据线来取出(输入)数据,或放入(输出)数据

I/O逻辑:负责接收和识别CPU的各种命令(如地址译码),并负责对设备发出命令

控制器与设备的接口:用于实现控制器与设备之间的通信

注意事项

①一个I/O控制器可能会对应多个设备;

②数据寄存器、控制寄存器、状态寄存器可能有多个(如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便CPU操作。有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/O;另一些计算机则采用I/O专用地址,即寄存器独立编址。

2.5、I/O控制器的编址

1、内存映像I/O

内存映射I/O:控制器中的寄存器与内存地址统一编址

优点:简化了指令。可以采用对内存进行操作的指令来对控制器进行操作

2、寄存器独立编址

寄存器独立编制:控制器中的寄存器使用单独的地址

缺点:需要设置专门的指令来实现对控制器的操作,不仅要指明寄存器的地址,还要指明控制器的编号

2.6、本节课小结

I/O 控制器用于实现对 I/O 设备的控制

3、I/O控制方式

3.1、思维导图

I/O控制方式:用什么样的方式来控制I/O设备的数据读/写

学习I/O控制方式需要注意的问题

  1. 完成一次读/写操作的流程
  2. CPU干预的频率
  3. 数据传送的单位
  4. 数据的流向
  5. 主要缺点和主要优点

3.2、程序直接控制方式

程序直接控制方式的工作原理

程序直接控制方式:CPU 不断轮询检查控制器状态

CPU 向控制器发出读指令启动设备,并且不停轮询检测控制器的状态位,直至状态位为空闲才能读取数据

输入设备准备好数据后,将数据放到数据寄存器中,并将状态寄存器标志为空闲状态。CPU 轮询检测到设备已经准备好,将数据寄存器中的数据读入 CPU 寄存器中,之后再放入内存中

程序直接控制方式的性能指标

1、完成一次读/写操作的流程

Keyword:轮询


2、CPU干预的频率

很频繁,I/O操作开始之前、完成之后需要CPU介入,并且在等待I/O完成的过程中CPU需要不断地轮询检查。


3、数据传送的单位

每次读/写一个字


4、数据的流向

读操作(数据输入):I/O设备 → CPU(CPU寄存器) → 内存

写操作(数据输出):内存 → CPU(CPU寄存器) → I/O设备

:每个字的读/写都需要 CPU 和 CPU 寄存器的帮助


5、主要缺点和主要优点

优点:实现简单。在读/写指令之后,加上实现循环检查的一系列指令即可(因此才称为“程序直接控制方式”)

缺点:CPU和I/O设备只能串行工作,CPU需要一直轮询检查,长期处于“忙等”状态,CPU利用率低

3.3、中断驱动方式

中断驱动方式的工作原理

为何引入中断机制:由于I/O设备速度很慢,因此在CPU发出读/写命令后,可将等待I/O的进程阻塞,先切换到别的进程执行。

中断机制的原理:当I/O完成后,控制器会向CPU发出一个中断信号,CPU检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断。处理中断的过程中,CPU从I/O控制器读一个字的数据传送到CPU寄存器,再写入主存。接着,CPU恢复等待I/O的进程(或其他进程)的运行环境,然后继续执行


中断机制的注意事项

CPU会在每个指令周期的末尾检查中断;

中断处理过程中需要保存、恢复进程的运行环境,这个过程是需要一定时间开销的。可见,如果中断发生的频率太高,也会降低系统性能。

中断驱动方式的性能指标

1、完成一次读/写操作的流程

Keyword:中断


2、CPU干预的频率

每次I/O操作开始之前、完成之后需要CPU介入

等待I/O完成的过程中CPU可以切换到别的进程执行。


3、数据传送的单位

每次读/写一个字


4、数据的流向

读操作(数据输入):I/O设备 → CPU → 内存

写操作(数据输出):内存 → CPU → I/O设备


5、主要缺点和主要优点

优点:与“程序直接控制方式”相比,在“中断驱动方式”中,I/O控制器会通过中断信号主动报告I/O已完成,CPU不再需要不停地轮询。CPU和I/O设备可并行工作,CPU利用率得到明显提升。

缺点:每个字在I/O设备与内存之间的传输,都需要经过CPU。而频繁的中断处理会消耗较多的CPU时间。

3.4、DMA方式

DMA方式的优势

与“中断驱动方式”相比,DMA方式(Direct Memory Access,直接存储器存取。主要用于块设备的I/O控制)有这样几个改进:

①数据的传送单位是“块”。不再是一个字、一个字的传送;

②数据的流向是从设备直接放入内存,或者从内存直接到设备。不再需要CPU作为“快递小哥”。

③仅在传送一个或多个数据块的开始和结束时,才需要CPU干预。

DMA方式的工作原理

CPU → DMA:CPU指明此次要进行的操作(如:读操作),并说明要读入多少数据、数据要存放在内存的什么位置、数据在外部设备上的地址(如:在磁盘上的地址)

中断:控制器会根据CPU提出的要求完成数据的读/写工作,整块数据的传输完成后,才向CPU发出中断信号


DMA 控制器的总线结构

DR(Data Register,数据寄存器):暂存从设备到内存,或从内存到设备的数据。

MAR(Memory Address Register,内存地址寄存器):在输入时,MAR表示数据应放到内存中的什么位置;输出时MAR表示要输出的数据放在内存中的什么位置。

DC(Data Counter,数据计数器):表示剩余要读/写的字节数。

CR(Command Register,命令/状态寄存器):用于存放CPU发来的I/O命令,或设备的状态信息。

DMA方式的性能指标

1、完成一次读/写操作的流程

Keyword:直接内存访问


2、CPU干预的频率

仅在传送一个或多个数据块的开始和结束时,才需要CPU干预


3、数据传送的单位

每次读/写一个或多个块(注意:每次读写的只能是连续的多个块,且这些块读入内存后在内存中也必须是连续的)


4、数据的流向

读操作(数据输入):I/O设备 → 内存

写操作(数据输出):内存 → I/O设备


5、主要缺点和主要优点

优点:数据传输以“块”为单位,CPU介入频率进一步降低。数据的传输不再需要先经过CPU再写入内存,数据传输效率进一步增加。CPU和I/O设备的并行性得到提升。

缺点:CPU每发出一条I/O指令,只能读/写一个或多个连续的数据块。如果要读/写多个离散存储的数据块,或者要将数据分别写到不同的内存区域时,CPU要分别发出多条I/O指令,进行多次中断处理才能完成

3.5、通道控制方式

通道控制方式的工作原理

通道:一种硬件,可以理解为是“弱鸡版的CPU”。通道可以识别并执行一系列通道指令。与CPU相比,通道可以执行的指令很单一,并且通道程序是放在主机内存中的,也就是说通道与CPU共享内存

①CPU向通道发出I/O指令。指明通道程序在内存中的位置,并指明要操作的是哪个I/O设备。之后CPU就切换到其他进程执行了

②通道执行内存中的通道程序(其中指明了要读入/写出多少数据,读/写的数据应放在内存的什么位置等信息)

③通道执行完规定的任务后,向CPU发出中断信号,之后CPU对中断进行处理

通道控制方式的性能指标

1、完成一次读/写操作的流程

Keyword:通道控制


2、CPU干预的频率

极低,通道会根据CPU的指示执行相应的通道程序,只有完成一组数据块的读/写后才需要发出中断信号,请求CPU干预。


3、数据传送的单位

每次读/写一组数据块


4、数据的流向

读操作(数据输入):I/O设备 → 内存

写操作(数据输出):内存 → I/O设备


5、主要缺点和主要优点

缺点:实现复杂,需要专门的通道硬件支持

优点:CPU、通道、I/O设备可并行工作,资源利用率很高。

3.6、本节课小结

理解:通道=弱鸡版;CPU通道程序=任务清单

4、I/O软件层次结构

4.1、知识总览

I/O软件层次结构

越上面的层次越接近用户;越下面的层次越接近硬件

每一层会利用其下层提供的服务,实现某些功能,并屏蔽实现的具体细节,向高层提供服务(“封装思想”)

4.2、用户层软件

用户层软件的结构

库函数:用户层软件实现了与用户交互的接口,用户可直接使用该层提供的、与I/O操作相关的库函数对设备进行操作,比如:printf(“hello, world!")

系统调用:用户层软件将用户请求翻译成格式化的I/0请求,并通过“系统调用”请求操作系统内核的服务,比如:printf(“hello, world!”) 会被翻译成等价的write系统调用,当然,用户层软件也会在系统调用时填入相应参数


Windows API

Windows操作系统向外提供的一系列系统调用,但是由于系统调用的格式严格,使用麻烦,因此在用户层上封装了一系列更方便的库函数接口供用户使用(Windows API)

4.3、设备独立性软件

设备独立性软件需要实现的功能

设备独立性软件,又称设备无关性软件。与设备的硬件特性无关的功能几乎都在这一层实现。


设备独立性软件的功能

①向上层提供统一的调用接口(如read/write系统调用)

②设备的保护。原理类似与文件保护。设备被看做是一种特殊的文件,不同用户对各个文件的访问权限是不一样的,同理,对设备的访问权限也不一样。

③差错处理。设备独立性软件需要对一些设备的错误进行处理

④设备的分配与回收

⑤数据缓冲区管理(可以通过缓冲技术屏蔽设备之间数据交换单位大小和传输速度的差异)

⑥建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序

关于逻辑设备名的说明

逻辑设备名:用户或用户层软件发出I/O操作相关系统调用的系统调用时,需要指明此次要操作的I/O设备的逻辑设备名(eg:去学校打印店打印时,需要选择打印机1/打印机2/打印机3,其实这些都是逻辑设备名)

逻辑设备表(LUT,Logical UnitTable):设备独立性软件需要通过“逻辑设备表(LUT,Logical UnitTable)”来确定逻辑设备对应的物理设备,并找到该设备对应的设备驱动程序


逻辑设备表的内容:I/O设备被当做一种特殊的文件,不同类型的I/O设备需要有不同的驱动程序处理


操作系统系统可以采用两种方式管理逻辑设备表(LUT)

第一种方式:整个系统只设置一张LUT,这就意味着所有用户不能使用相同的逻辑设备名,因此这种方式只适用于单用户操作系统。

第二种方式:为每个用户设置一张LUT,各个用户使用的逻辑设备名可以重复,适用于多用户操作系统。系统会在用户登录时为其建立一个用户管理进程,而LUT就存放在用户管理进程的PCB中。

4.4、设备驱动程序

思考:为什么不同类型的I/O设备需要有不同的驱动程序处理?

:各式各样的设备,外形不同,其内部的电子部件(I/O控制器)也有可能不同


举栗说明

假设佳能打印机设备内部控制结构如下所示:厂家设计了两个数据寄存器;设备的厂家规定,0代表空闲,1代表忙碌

假设惠普打印机设备内部控制结构如下所示:厂家只设计了一个数据寄存器;设备的厂家规定,1代表空闲,0代表忙碌(刚好与佳能相反)


结论:不同设备的内部硬件特性也不同,这些特性只有厂家才知道,因此厂家须提供与设备相对应的驱动程序,CPU执行驱动程序的指令序列,来完成设置设备寄存器,检查设备状态等工作

设备驱动程序的作用

设备驱动程序主要负责对硬件设备的具体控制,将上层发出的一系列命令(如read/write)转化成特定设备“能听得懂”的一系列操作。包括设置设备寄存器;检查设备状态等

不同的I/O设备有不同的硬件特性,具体细节只有设备的厂家才知道。因此厂家需要根据设备的硬件特性设计并提供相应的驱动程序。


:驱动程序一般会以一个独立进程的方式存在。

4.5、中断处理程序

中断处理程序的执行流程

当I/O任务完成时,I/O控制器会发送一个中断信号,系统会根据中断信号类型找到相应的中断处理程序并执行。中断处理程序的处理流程如下,可见,中断处理程序也会和硬件直接打交道

4.6、本节课小结

I/O软件层次结构

I/O请求的执行顺序

用户通过调用用户层软件提供的库函数发出的I/O请求 → 用户层软件通过“系统调用”请求设备独立性软件层的服务 → 设备独立性软件层根据LUT调用设备对应的驱动程序 → 驱动程序向I/O控制器发出具体命令 → 等待I/O完成的进程应该被阻塞,因此需要进程切换,而进程切换必然需要中断处理

5、I/O核心子系统

5.1、知识总览

I/O核心子系统:设备独立性软件、设备驱动程序、中断处理程序

因此I/O核心子系统要实现的功能其实就是中间三层要实现的功能

考研中,我们需要重点理解和掌握的功能是:I/O调度、设备保护、假脱机技术(SPOOLing技术)、设备分配与回收、缓冲区管理(即缓冲与高速缓存)

5.2、各功能层次

各个功能所属的软件层次

假脱机技术(SPOOLing技术)需要请求“磁盘设备”的设备独立性软件的服务,因此一般来说假脱机技术是在用户层软件实现的

5.3、I/O调度

I/O调度:用某种算法确定一个好的顺序来处理各个I/O请求。

I/O调度就如前面所讲的磁盘调度(先来先服务算法、最短寻道优先算法、SCAN算法、C-SCAN算法、LOOK算法、C-LOOK算法)。当多个磁盘I/O请求到来时,用某种调度算法确定满足I/O请求的顺序。

同理,打印机等设备也可以用先来先服务算法、优先级算法、短作业优先等算法来确定I/O调
度顺序。

5.4、设备保护

设备保护:类似于文件保护

操作系统需要实现文件保护功能,不同的用户对各个文件有不同的访问权限(如:只读、读和写等)。

在UNIX系统中,设备被看做是一种特殊的文件,每个设备也会有对应的FCB。当用户请求访问某个设备时,系统根据FCB中记录的信息来判断该用户是否有相应的访问权限,以此实现“设备保护”的功能。(参考“文件保护”小节)

6、假脱机技术

6.1、思维导图

假脱机技术(SPOOLing技术)

6.2、什么是脱机技术

操作系统发展中的两个阶段:手工操作阶段和批处理阶段

手工操作阶段:主机直接从I/O设备获得数据,由于设备速度慢,主机速度很快。人机速度矛盾明显,主机要浪费很多时间来等待设备

批处理阶段:引入了脱机输入/输出技术(用磁带完成)。

在外围控制机的控制下,慢速输入设备的数据先被输入到更快速的磁带上。之后主机可以从快速的磁带上读入数据,从而缓解了速度矛盾。使用外围机输出时的原理类似

引入脱机技术后,缓解了CPU与慢速I/O设备的速度矛盾。另一方面,即使CPU在忙碌,也可以提前将数据输入到磁带;即使慢速的输出设备正在忙碌,也可以提前将数据输出到磁带

Tips:为什么称为“脱机”——脱离主机的控制进行的输入/输出操作。

6.3、假脱机技术的技术实现

1、输入井和输出井

“假脱机技术”,又称“SPOOLing技术”是用软件的方式模拟脱机技术。SPOOLing系统的组成如下:


在磁盘上开辟出两个存储区域——“输入井”和“输出井”

输入井”模拟脱机输入时的磁带,用于收容I/O设备输入的数据

输出井”模拟脱机输出时的磁带,用于收容用户进程输出的数据

2、输入进程和输出进程

输入进程”模拟脱机输入时的外围控制机

输出进程”模拟脱机输出时的外围控制机

:要实现SPOOLing技术,必须要有多道程序技术的支持。系统会建立“输入进程”和“输出进程”。


输入输出进程类似于外围控制机

3、输入/输出缓冲区

注意:输入缓冲区和输出缓冲区是在内存中的缓冲区

在输入进程的控制下,“输入缓冲区”用于暂存从输入设备输入的数据,之后再转存到输入井中

在输出进程的控制下,“输出缓冲区”用于暂存从输出井送来的数据,之后再传送到输出设备上

6.4、共享打印机原理分析

独占设备与共享设备

独占式设备——只允许各个进程串行使用的设备。一段时间内只能满足一个进程的请求。

共享设备——允许多个进程“同时”使用的设备(宏观上同时使用,微观上可能是交替使用)。可以同时满足多个进程的使用请求。


独占式设备的例子:若进程1正在使用打印机,则进程2请求使用打印机时必然阻塞等待。打印机是种“独占式设备”,但是可以用SPOOLing技术改造成“共享设备”

利用SPOOLing技术实现共享打印机

当多个用户进程提出输出打印的请求时,系统会答应它们的请求,但是并不是真正把打印机分配给他们,而是由假脱机管理进程为每个进程做两件事

(1)在磁盘输出井中为进程申请一个空闲缓冲区(也就是说,这个缓冲区是在磁盘上的),并将要打印的数据送入其中;

(2)为用户进程申请一张空白的打印请求表,并将用户的打印请求填入表中(其实就是用来说明用户的打印数据存放位置等信息的),再将该表挂到假脱机文件队列上。

当打印机空闲时,输出进程会从文件队列的队头取出一张打印请求表,并根据表中的要求将要打印的数据从输出井传送到输出缓冲区,再输出到打印机进行打印。用这种方式可依次处理完全部的打印任务


共享打印机

虽然系统中只有一个台打印机,但每个进程提出打印请求时,系统都会为在输出井中为其分配一个存储区(相当于分配了一个逻辑设备),使每个用户进程都觉得自己在独占一台打印机,从而实现对打印机的共享。

SPOOLing技术可以把一台物理设备虚拟成逻辑上的多台设备,可将独占式设备改造成共享设备。

共享打印机的原理分析

当请求共享打印机时,在磁盘输出井中为进程申请一个空闲缓冲区,并将要打印的数据送入其中

将用户的请求信息填入打印请求表中,再将该表挂到假脱机文件队列上

当打印机空闲时,输出进程会从文件队列的队头取出一张打印请求表,并根据表中的要求将要打印的数据从输出井传送到输出缓冲区

之后再将输出缓冲区中的数据送入打印机内进行打印,打印任务完成后删除队头的打印任务

6.5、本节课小结

7、设备的分配与回收

7.1、思维导图

7.2、设备分配时应考虑的因素

设备分配时应考虑的因素

1、设备的固有属性

设备的固有属性可分为三种:独占设备、共享设备、虚拟设备

独占设备——一个时段只能分配给一个进程(如打印机)

共享设备——可同时分配给多个进程使用(如磁盘),各进程往往是宏观上同时共享使用设备,而微观上交替使用。

虚拟设备——采用SPOOLing技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用(如采用SPOOLing技术实现的共享打印机)

2、设备分配算法

设备的分配算法

  1. 先来先服务
  2. 优先级高者优先
  3. 短任务优先
  4. ……

3、设备分配中的安全性

从进程运行的安全性上考虑,设备分配有两种方式


1、安全分配方式

分配方式:为进程分配一个设备后就将进程阻塞,本次I/O完成后才将进程唤醒。(eg:考虑进程请求打印机打印输出的例子)

结论:一个时段内每个进程只能使用一个设备

优点:破坏了“请求和保持”条件,不会死锁

缺点:对于一个进程来说,CPU和I/O设备只能串行工作


2、不安全分配方式

分配方式:进程发出I/O请求后,系统为其分配I/O设备,进程可继续执行,之后还可以发出新的I/O请求。只有某个I/O请求得不到满足时才将进程阻塞

结论:一个进程可以同时使用多个设备

优点:进程的计算任务和I/O任务可以并行处理,使进程迅速推进

缺点:有可能发生死锁(死锁避免、死锁的检测和解除)

7.3、静态分配和动态分配

静态分配和动态分配

静态分配:进程运行前为其分配全部所需资源(破坏了“请求和保持”条件,不会发生死锁),运行结束后归还资源

动态分配:进程运行过程中动态申请设备资源

7.4、设备分配管理中的数据结构

“设备、控制器、通道”之间的关系

一个通道可控制多个设备控制器,每个设备控制器可控制多个设备

设备控制表(DCT)

设备控制表(DCT):系统为每个设备配置一张DCT,用于记录设备情况

:“进程管理”章节中曾经提到过“系统会根据阻塞原因不同,将进程PCB挂到不同的阻塞队列中”,这里的【设备队列的队首指针】就是指向正在等待该设备的进程队列

控制器控制表(COCT)

控制器控制表(COCT):每个设备控制器都会对应一张COCT。操作系统根据COCT的信息对控制器进行操作和管理

通道控制表(CHCT)

通道控制表(CHCT):每个通道都会对应一张CHCT。操作系统根据CHCT的信息对通道进行操作和管理

系统设备表(SDT)

系统设备表(SDT):记录了系统中全部设备的情况,每个设备对应一个表目

7.5、设备分配的步骤

设备分配的步骤

① 根据进程请求的物理设备名查找SDT(注:物理设备名是进程请求分配设备时提供的参数)

② 根据SDT找到DCT,若设备忙碌则将进程PCB挂到设备等待队列中,不忙碌则将设备分配给进程

③ 根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程

④ 根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程

:只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可启动I/O设备进行数据传送

7.6、设备分配步骤的改进

设备分配步骤的缺点

①用户编程时必须使用“物理设备名”,底层细节对用户不透明,不方便编程

②若换了一个物理设备,则程序无法运行

③若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待

设备分配步骤的改进

①根据进程请求的逻辑设备名查找SDT(注:用户编程时提供的逻辑设备名其实就是“设备类型”)

②查找SDT,找到用户进程指定类型的、并且空闲的设备,将其分配给该进程。操作系统在逻辑设备表(LUT)中新增一个表项。

③根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程。

④根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程。

逻辑设备表(LUT)

逻辑设备表(LUT)建立了逻辑设备名与物理设备名之间的映射关系

某用户进程第一次使用设备时使用逻辑设备名向操作系统发出请求,操作系统根据用户进程指定的设备类型(逻辑设备名)查找系统设备表,找到一个空闲设备分配给进程,并在LUT中增加相应表项。

如果之后用户进程再次通过相同的逻辑设备名请求使用设备,则操作系统通过LUT表即可知道用户进程实际要使用的是哪个物理设备了,并且也能知道该设备的驱动程序入口地址。


逻辑设备表的设置问题

整个系统只有一张LUT:各用户所用的逻辑设备名不允许重复,适用于单用户操作系统

每个用户一张LUT:不同用户的逻辑设备名可重复,适用于多用户操作系统

7.7、本节课小结

8、缓冲区管理

8.1、思维导图

8.2、缓冲区概念

什么是缓冲区?

缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区(本节介绍的是“内存作为缓冲区”)

使用硬件作为缓冲区的成本较高,容量也较小,一般仅用在对速度要求非常高的场合(如存储器管理中所用的联想寄存器,由于对页表的访问频率极高,因此使用速度很快的联想寄存器来存放页表项的副本)

一般情况下,更多的是利用内存作为缓冲区,“设备独立性软件”的缓冲区管理就是要组织管理
好这些缓冲区

缓冲区的作用

:解决数据粒度不匹配的问题,比如:输入输出进程操作的单位为块,但有些I/O设备操作的单位为字符,通过缓冲区就能解决输入输出进程和I/O设备粒度不匹配的问题


缓和CPU与I/O设备之间速度不匹配的矛盾

若不使用缓冲区,I/O设备每输出一个字符都要向CPU发出一个中断信号,CPU需要频繁处理此中断程序

当使用缓冲区时,CPU和I/O设备交换数据时,以缓冲区作为中介,缓和了两者速度不同的矛盾

8.3、单缓冲

单缓冲的实现方式

假设某用户进程请求某种块设备读入若干块的数据。若采用单缓冲的策略,操作系统会在主存中为其分配一个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)

注意:当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出。

单缓冲的注意事项

用户进程的内存空间中,会分出一片工作区来接受输入/输出数据(一般也默认工作区大小与缓冲区相同)


常考题型:计算每处理一块数据平均需要多久?

技巧:假定一个初始状态,分析下次到达相同状态需要多少时间,这就是处理一块数据平均所需时间。

初始状态:在“单缓冲”题型中,可以假设初始状态为工作区满,缓冲区空。

单缓冲每处理一块数据平均需要多久?

初始状态:工作区满,缓冲区空

假设条件:T>C

解答:因为T>C,因此CPU处理完数据后暂时不能将下一块数据传送到工作区,必须等待缓冲区中冲满数据。处理一块数据的平均用时= T+M


初始状态:工作区满,缓冲区空

假设条件:T<C

解答:T<C,因此缓冲区中冲满数据后暂时不能继续冲入下一块数据,必须等待CPU处理结束后将数据从缓冲区传送到工作区。处理一块数据的平均用时= C+M


结论:采用单缓冲策略,处理一块数据平均耗时Max(C, T) + M

8.4、双缓冲

双缓冲的实现方式

假设某用户进程请求某种块设备读入若干块的数据。若采用双缓冲的策略,操作系统会在主存中为其分配两个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)

双缓冲的注意事项

双缓冲题目中,假设初始状态为:工作区空,其中一个缓冲区满,另一个缓冲区空

双缓冲处理一块数据的平均用时

初始状态:工作区空,其中一个缓冲区满,另一个缓冲区空

假设条件:T>C+M

解答:处理一块数据的平均用时= T


初始状态:工作区空,其中一个缓冲区满,另一个缓冲区空

假设条件:T<C+M

解答:每处理一个数据块平均耗时C+M

假设2T<2M+C,则I/O设备将缓冲区1冲满时,缓冲区2的数据尚未取空,因此I/O设备暂时不能冲入数据

总之,T<C+M意味着设备输入数据块的速度要比处理机处理数据块的速度更快。每处理一个数据块平均耗时C+M

:M(1)表示“将缓冲区1中的数据传送到工作区”;M(2)表示“将缓冲区2中的数据传送到工作区”


结论:采用双缓冲策略,处理一个数据块的平均耗时为Max(T, C+M)

使用单/双缓冲在通信时的区别

两台机器之间通信时,可以配置缓冲区用于数据的发送和接受。、


使用单缓冲进行通信

两台机器配置单缓冲,A机要发送的数据要先放入A机缓冲区中,等缓冲区满时将数据发出,B机的缓冲区用于接受数据,B机的将缓冲区中的数据全部取走后,才能向A机发送数据

显然,若两个相互通信的机器只设置单缓冲区,在任一时刻只能实现数据的单向传输。


使用双缓冲进行通信

若两个相互通信的机器设置双缓冲区,则同一时刻可以实现双向的数据传输。注:管道通信中的“管道”其实就是缓冲区。要实现数据的双向传输,必须设置两个管道

8.5、循环缓冲

循环缓冲的实现方式

将多个大小相等的缓冲区链接成一个循环队列。注:以下图示中,橙色表示已充满数据的缓冲区,绿色表示空缓冲区。

8.6、缓冲池

缓冲池的做法

缓冲队列:缓冲池由系统中共用的缓冲区组成。这些缓冲区按使用状况可以分为:空缓冲队列、装满输入数据的缓冲队列(输入队列)、装满输出数据的缓冲队列(输出队列)。

工作缓冲区:另外,根据一个缓冲区在实际运算中扮演的功能不同,又设置了四种工作缓冲区:用于收容输入数据的工作缓冲区(hin)、用于提取输入数据的工作缓冲区(sin)、用于收容输出数据的工作缓冲区(hout)、用于提取输出数据的工作缓冲区(sout)

图解缓冲池的工作原理

输入进程请求输入数据:从空缓冲队列中取出一块作为收容输入数据的工作缓冲区(hin)。冲满数据后将缓冲区挂到输入队列队尾

从空缓冲队列中取出一块作为收容输入数据的工作缓冲区(hin)

冲满数据后将缓冲区挂到输入队列队尾


计算进程想要取得一块输入数据:从输入队列中取得一块冲满输入数据的缓冲区作为“提取输入数据的工作缓冲区(sin)”。缓冲区读空后挂到空缓冲区队列

从输入队列中取得一块冲满输入数据的缓冲区作为“提取输入数据的工作缓冲区(sin)”

缓冲区读空后挂到空缓冲区队列


计算进程想要将准备好的数据冲入缓冲区:从空缓冲队列中取出一块作为“收容输出数据的工作缓冲区(hout)”。数据冲满后将缓冲区挂到输出队列队尾

从空缓冲队列中取出一块作为“收容输出数据的工作缓冲区(hout)”

数据冲满后将缓冲区挂到输出队列队尾


输出进程请求输出数据:从输出队列中取得一块冲满输出数据的缓冲区作为“提取输出数据的工作缓冲区(sout)”。缓冲区读空后挂到空缓冲区队列

从输出队列中取得一块冲满输出数据的缓冲区作为“提取输出数据的工作缓冲区(sout)”

缓冲区读空后挂到空缓冲区队列

8.7、本节课小结

第 5 章 输入输出管理相关推荐

  1. 王道操作系统课代表 - 考研计算机 第五章 输入输出管理 究极精华总结笔记

    本篇博客是考研期间学习王道课程 传送门 的笔记,以及一整年里对 操作系统 知识点的理解的总结.希望对新一届的计算机考研人提供帮助!!!   关于对 输入输出管理 章节知识点总结的十分全面,涵括了< ...

  2. 操作系统第五章——输入输出管理(上)

    提示:初入红尘,不知人间疾苦,蓦然回首,已是苦中之人,这杯中酒三分,这酒中悲七分.关关难过关关过,夜夜难熬夜夜熬,愿这人世间所有爱恨情仇皆溶于酒,且将这红尘做酒,一饮消愁 文章目录 5.1.1 IO设 ...

  3. 【信息系统项目管理师】第6章-项目进度管理 知识点详细整理

    个人资料,仅供学习使用 教程:信息系统项目管理师(第3版) 修改时间--2021年10月1日 15:26:09 参考资料: 信息系统项目管理师(第3版) 题目书(2021下半年)--马军 本文包括: ...

  4. 【信息系统项目管理师】第四章 整体管理思维导图

    [信息系统项目管理师]第四章 整体管理思维导图 整体管理是对输入输出记忆要求最高的,也是论文最久没有考察的内容.还有每一个过程的定义也该清楚明白. 项目整体管理计划包括了其他各个子计划,它们相互影响和 ...

  5. 信息系统项目管理师---第十七章 战略管理 第十八章 组织级项目管理 第十九章 流程管理历年考题

    信息系统项目管理师-第十七章 战略管理 第十八章 组织级项目管理 第十九章 流程管理历年考题 第十七章 战略管理历年考题 1.2005 年 5 月第 57 题 :战略管理的主要活动可以分为下列中的(B ...

  6. 【体系结构】第三章——输入输出系统

    系列文章目录 计算机体系结构是这学期(大三下)所学的一门专业课,感觉更像是操作系统与计组的融合,正好记录一下,顺带复习这两门课的内容. [体系结构]第一章--计算机系统结构的基本概念 [体系结构]计算 ...

  7. 《Linux内核设计与实现》读书笔记 第三章 进程管理

    第三章进程管理 进程是Unix操作系统抽象概念中最基本的一种.我们拥有操作系统就是为了运行用户程序,因此,进程管理就是所有操作系统的心脏所在. 3.1进程 概念: 进程:处于执行期的程序.但不仅局限于 ...

  8. Linux中的输入输出管理

    Linux中的输入输出管理 1. 输入输出的定义 1.1 字符设备 1.2 标准输入(stdin) 1.3 标准正确输出(stdout) 1.4 标准错误输出(stderr) 2. 如何管理输入 2. ...

  9. 深入探究系统中的输入输出管理

    系统中的输入输出管理 1.理解系统中的输入输出 shell中的指令----->cpu产生运算结果----->字符设备(默认/dev/pst) 输入输出系统是计算机系统中的主机与外部进行通信 ...

最新文章

  1. Java 里的 for (;;) 与 while (true),哪个更快?
  2. ModuleNotFoundError: No module named ‘scipy.spatial.transform._rotation_groups‘
  3. 【Android 内存优化】Java 内存模型 ( Java 虚拟机内存模型 | 线程私有区 | 共享数据区 | 内存回收算法 | 引用计数 | 可达性分析 )
  4. android datepicker使用方法,android中DatePicker和TimePicker的使用方法详解
  5. Spring框架学习笔记(7)——代理对象实现AOP
  6. 红帽企业版linux 7.4更新启动,红帽Linux企业版7.4 淘汰Btrfs文件系统
  7. 101与金根回顾敏捷个人:(13)敏捷个人和敏捷开发
  8. 【LeetCode笔记】438. 找到字符串中所有字母异位词(Java、字符串、滑动窗口)
  9. 【贪心】LeetCode 3. Longest Substring Without Repeating Characters
  10. win10使用navicat管理数据库
  11. Kubernetes 小白学习笔记(13)--k8s集群路线-init流程
  12. Win10电脑时间无法同步解决方法
  13. [保姆级教程] 从原理到应用,超级详细的MPU6050传感器整理,看完这一篇就够了
  14. k开头的英文单词计算机专业,K开头英语单词一览
  15. 基于Springboot+Vue开发前后端端分离农产品进销存系统
  16. Pycharm: ImportError: attempted relative import with no known parent package解决方案
  17. 在win10中查看plt文件
  18. Shopex模板机制总览(摘要版)
  19. SqlException:ConnectionTimeout Expired. The timeout period elapsed during the post-login phase
  20. cubemx 配置多通道ADC进行ADC采样

热门文章

  1. 低代码平台会成为企业数字化基础设施么?
  2. 打破10倍速软件工程师神话
  3. 不再“挤牙膏”!英特尔公布技术路线图,豪迈放言:“将在 2025 年夺回芯片性能桂冠!”...
  4. CSDN 创始人蒋涛:拥抱中国开源技术生态发展黄金十年
  5. 如何以出售开源软件为生?
  6. 全网销售额超 2.67 亿!德施曼连续 5 年蝉联双11全网智能锁销冠
  7. Java 8 的这个新特性,用起来真的很爽!
  8. 海思加鸿蒙的零距离思考,自主生态之路在何方
  9. 开发者真的喜欢开源吗?
  10. 不要再被Python洗脑了,来看看这个吧......