01.I/O设备的基本概念和分类
什么是I/O设备
- 将数据
Input/Output(输入/输出)
计算机的外部设备。
- 将数据
按使用特性分类
- 人机交互类外部设备。
- 存储设备。
- 网络通信设备。
按传输速率分类
- 低速设备
- 中速设备
- 高速设备
按信息交换的单位分类
- 块设备(传输快,可寻址)。
- 字符设备(传输慢,不可寻址,常采用中断驱动方式)。
02.I/O控制器
主要功能
- 接受和识别CPU发出的命令(
要有控制寄存器
)。 - 向CPU报告设备的状态(
要有状态寄存器
)。 - 数据交换(
要有数据寄存器,暂存输入/输出的数据
)。 - 地址识别(
由I/O逻辑实现
)。
- 接受和识别CPU发出的命令(
组成
- CPU与控制器之间的接口(
实现控制器与CPU之间的通信
)。 - I/O逻辑(
负责识别CPU发出的命令,并向设备发出命令
)。 - 控制器与设备之间的接口(
实现控制器与设备之间的通信
)。
- CPU与控制器之间的接口(
两种寄存器编址方式
内存映射I/O
- 控制器中的寄存器与内存统一编址。
- 可以采用对内存进行操作的指令来对控制器进行操作。
寄存器独立编址
- 控制器中的寄存器独立编址。
- 需要设置专门的指令来操作控制器。
03.I/O控制方式
3.1程序直接控制方式
优点
:实现简单。在读/写指令之后,加上实现循环检查的一系列指令即可。缺点
:CPU和I/O设备只能串行工作,CPU需要一直轮询检查,长期处于“忙等”状态
,CPU利用率低。
3.2中断驱动方式
- 引入
中断机制
。 - 由于I/O设备速度很慢,因此在CPU发出读/写命令后,可
将等待I/O的进程阻塞
,先切换到别的进程执行。 - 当I/O完成后,控制器会向CPU发出一个中断信号,CPU
检测到中断信号后
,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断。 - 处理中断的过程中,CPU从I/O控制器读一个字的数据传到CPU寄存器,再写入主存。
- 接着,
CPU恢复等待I/O的进程(或其他进程)的运行环境,然后继续执行
。 优点
:CPU不再需要不停地轮询。CPU和I/O设备可并行工作
,CPU利用率得到明显提升。缺点
:每个字在I/O设备与内存之间的传输,都需要经过CPU。而频繁的中断处理会消耗较多的CPU时间
。
3.3DMA方式
DMA方式
(Direct Memory Access,直接存储器存取
。主要用于块设备的I/O控制)数据的传送单位是“块”
。不再是一个字、一个字的传送。- 数据的流向是从设备直接放入内存,或者从内存直接倒设备。不再需要CPU作为“快递小哥”。
- 仅在传送一个或多个数据块的开始和结束时,才需要CPU干预。
优点
:数据传输以“块”为单位,CPU介入频率进一步降低。数据的传输不再需要先经过CPU再写入内存,数据传输效率进一步增加。CPU和I/O设备的并行性得到提升。缺点
:CPU每发出一条I/O指令,只能读/写一个或多个连续的数据块。如果要读/写多个离散存储的数据块,或者要将数据分别写到不同的内存区域时,CPU要分别发出多条I/O指令,进行多次中断处理才能完成。
3.4通道控制方式
通道
:一种硬件
,可以理解为“弱版的CPU
”。通道可以识别并执行一系列通道指令
。优点
:CPU、通道、I/O设备可并行工作,资源利用率很高
。缺点
:实现复杂,需要专门的通道硬件支持。
3.5区别比较
04.I/O软件层次结构
用户层软件
- 用户层软件
实现了与用户交互的接口
,用户可直接使用该层提供的、与I/O操作相关的库函数对设备进行操作。
- 用户层软件
设备独立性软件
- 设备独立性软件,又称
设备无关软件
。与设备的硬件特性无关的功能几乎都在这一层实现。 - 向上一层提供统一的调用接口。
- 设备保护。
- 差错处理。
- 设备的分配与回收。
- 数据缓冲区管理。
- 建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序。
- 设备独立性软件,又称
- 逻辑设备表(LUT)
设备驱动程序
- 主要负责对硬件设备的具体控制,将上层发出的一系列命令(如read/write)转化成特点设备“能听得懂”的一系列操作。
- 包括设置设备寄存器。检查设备状态等。
- 驱动程序一般会以独立进程的方式存在。
中断处理程序
- 当I/O任务完成时,I/O控制器会发生一个
中断信号
,系统会根据中断信号类型
找到相应的中断处理程序
并执行。中断处理程序的处理流程如下:
- 当I/O任务完成时,I/O控制器会发生一个
05.I/O核心子系统
06.假脱机技术(SPOOLing技术)
6.1脱机技术
- 外围控制机+更高速的设备——磁带。
- 作用:缓解设备与CPU的速度矛盾,实现预输入、缓输出。
6.2假脱机技术
假脱机技术
又叫SPOOLing技术
,用软件的方式模拟脱机技术。- 输入井和输出井——模拟脱机输入/输出时的磁带。
- 输入进程和输出进程——模拟脱机输入/输出时的外围控制机。
- 输入缓冲区和输出缓冲区——内存中的缓冲区,输入、输出时的“中转站”。
6.3共享打印机
- 用
SPOOLing技术
将独占式的打印机“虚拟
”成共享打印机。
07.设备的分配与回收
应考虑的因素
固有属性
:独占设备、共享设备、虚拟设备(SPOOLing)分配算法
:先来先服务、优先级高者优先、短任务优先等。安全性
:安全分配方式、不安全分配方式。
静态分配与动态分配
静态分配
:进程运行前为其分配全部所需资源,运行结束后归还资源。动态分配
:进程运行过程中动态申请设备资源。
设备分配管理中的数据结构
设备控制表(DCT)
:每个设备对应一张DCT,关键字段
:类型/标识符/状态/指向COCT的指针/等待队列指针。控制器控制表(COCT)
:每个控制器对应一张COCT,关键字段
:状态/指向CHCT的指针/等待队列指针。通道控制表(CHCT)
:每个控制器对应一张CHCT,关键字段
:状态/等待队列指针。系统设备表(SDT)
:记录整个系统中所有设备的情况,每个设备对应一个表目,关键字段:设备类型/标识符/DCT/驱动程序入口。
设备分配的步骤
- 根据进程请求的物理设备名查找
SDT
。
- 根据进程请求的物理设备名查找
- 根据SDT找到DCT并分配设备。
- 根据
DCT
找到COCT
并分配控制器
。
- 根据COCT找到CHCT并分配通道。
注
:只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可启动I/O设备进行数据传送。缺点
:用户编程时必须使用“物理设备名”,若换了一个物理设备,则程序无法运行。若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程页必须阻塞等待。设备分配步骤的改进
- 用户编程时使用的逻辑设备名申请设备,
操作系统负责实现从逻辑设备名到物理设备名的映射(通过LUT)
。 逻辑设备表的设置问题
整个系统只有一张LUT
:各用户所用的逻辑设备名不允许重复。每个用户一张LUT
:各个用户的逻辑设备名可重复。
- 用户编程时使用的逻辑设备名申请设备,
08.缓冲区管理
缓冲区的概念
- 一般利用内存作为缓冲区。
- 缓解CPU与设备的速度矛盾、减少对CPU的中断频率、解决数据粒度不匹配的问题、提高CPU与I/O设备之间的并行性。
单缓冲
- 设备-(T)-缓冲区-(M)-工作区-(C)-处理。
处理一块数据平均耗时Max(C,T)+M
。- 分析问题的初始状态:工作区满,缓冲区空。
双缓冲
处理一块数据平均耗时Max(T,C+M)
。- 分析问题的初始状态:工作区空,一个缓冲区满,另一个缓冲区空。
循环缓冲
- 多个缓冲区链接成循环队列,in指针指向第一个空缓冲区,out指针指向第一个满缓冲区。
缓冲池
三个队列
:空缓冲队列、输入队列、输出队列
。四种工作缓冲区
- 用于
收容输入数据
的工作缓冲区、用于提取输入数据
的工作缓冲区。 - 用于
收容输出数据
的工作缓冲区、用于提取输出数据的
工作缓冲区。
- 用于
评论已关闭