5.1 I/O管理概述
5.1.1 I/O设备
I/O设备就是可以将数据输入或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。
按照使用特征,I/O设备可以分为以下几类:
人机交互设备
存储设备
网络通信设备
按照传输速度,I/O设备可以分为以下几类:
低速设备:键盘鼠标等
中速设备:打印机等
高速设备:硬盘等
按照信息交互的单位,I/O设备可以分为以下几类:
块设备
以数据块为单位进行信息交互
读取速度快
可寻址(可以随机的读写任意一块)
字符设备
传输的基本单位是字符
读取速度慢
不可寻址
输入输出采用中断驱动方式
5.1.2 I/O子系统的层次结构
1、I/O设备的电子部件(I/O控制器)
I/O设备的机械部分就是具体的执行机构,例如键盘的机械轴、硬盘的磁头、盘片等。
CPU无法直接控制I/O设备的机械部件,因此I/O设备还要有一个电子部件用于实现CPU对设备的控制。 这个电子部件就是I/O控制器,又称设备控制器。CPU可控制I/O控制器,又由I/O控制器来控制设备的机械部件。
(1)I/O控制器的功能
接收和识别CPU发出的命令
通过I/O控制器中的控制寄存器来存放相应指令和参数
向CPU报告设备的状态
通过I/O控制器中的状态寄存器记录当前I/O设备的状态
数据交换
通过I/O控制器中的数据寄存器暂存准备传入或传出的数据
地址识别
(2)I/O控制器的组成
CPU与控制器的接口(图中左半部分整体)
CPU通过控制线发出命令
通过地址线指明要操作的设备
通过数据线存/取数据
I/O逻辑
接收和识别CPU发来的各种指令
对设备发出指令
控制器与设备的接口
用于实现控制器与设备之间的通道
数据线传输数据
状态线向控制器反馈当前设备状态
控制器通过控制线向相应的设备发送控制信号
由于一个I/O控制器可能连接多个I/O设备,因此数据寄存器、状态寄存器、控制寄存器的数量也可能会有多个(一个设备对应一个)
这些寄存器都需要有相应的地址以便CPU寻址操作。其中
有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/O
控制器中断寄存器与内存地址统一管理
简化了指令,可以采用操作内存的指令来操作控制器 ✔
另一些计算机则采用I/O专用地址,即寄存器独立编址
控制器中的寄存器使用单独的地址
需要设置专门的指令来操作控制器 ❌
不仅需要指明寄存器地址,还要指明控制器编号 ❌
2、I/O软件层次结构
越上面的层次越接近用户;越下面的层次越接近硬件
每一层利用其下层提供的服务,实现某些功能,封装后再向上一级提供服务
用户层软件
提供了与用户交互的接口,用户可以直接使用该层提供的库函数对I/O设备进行操作
将用户的请求进行翻译,通过系统调用请求操作系统内核的服务
设备独立性软件(设备无关软件)
向上层提供调用接口
对设备的保护,与对文件的保护类似
差错处理
设备的分配与回收
数据缓冲区管理
建立逻辑设备名与物理设备名之间的映射关系,并选择调用相应的驱动程序
通过**逻辑设备表(LUT)**实现
可以整个系统一张LUT,也可以每个用户一张LUT(类似两级目录)
设备驱动程序
将抽象要求转化为具体要求
检查I/O请求的合法性
了解I/O设备状态、传递相关参数、设置设备工作方式
发出I/O操作命令,启动I/O设备
响应通道的中断请求
构造通道程序
中断处理程序
当I/O任务完成时,I/O控制器会发出中断信号,系统会根据此信号找到相应的中断处理程序并执行
5.1.3 I/O控制方式
1、程序直接控制方式
(1)完成一次读/写操作的流程
CPU向I/O控制器发出命令
I/O控制器检查设备状态,并返回给CPU
若设备可用,且无报错,则将要读/写的数据在CPU和数据寄存器之间完成转存
完成读/写操作
检查读/写操作是否完成,未完成则继续
核心思想:轮询
(2)CPU干预的频率
非常频繁。操作开始前、完成后、中间等待过程中均需要CPU不断地轮询检查。
(3)数据传输的单位
每次读/写一个字
(4)数据的流向
读操作
I/O设备 → CPU → 内存
写操作
内存 → CPU → I/O设备
每个字的读写都需要CPU的协助
(5)优缺点
优点
实现简单
缺点
CPU和I/O设备只能串行工作
CPU一直执行轮询操作,处于忙等状态
2、中断驱动方式
(1)完成一次读/写操作的流程
由于I/O设备速度很慢,因此在CPU发出读/写命令后,可将等待I/O的进程阻塞,先切换到别的进程执行
当I/O操作完成后,控制器会向CPU发出一个中断信号,CPU检测到中断信 号后,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断
处理中断的过程中,CPU从I/O控制器读一个字的数据传送到CPU寄存器,再写入主存。
接着,CPU恢复等待I/O的进程(或其他进程)的运行环境,然后继续执行
(2)CPU干预的频率
操作开始前、完成后需要CPU介入。
中间等待过程中CPU可以切换到别的进程运行。
(3)数据传输的单位
每次读/写一个字
(4)数据的流向
读操作
I/O设备 → CPU → 内存
写操作
内存 → CPU → I/O设备
(5)优缺点
优点
相对于程序直接控制方式,CPU利用率明显提升
CPU和I/O设备可以并行的工作
缺点
每个字在I/O设备和内存之间的传输都需要经过CPU,频繁的中断会造成较大的开销
3、DMA(直接存储器存取)
与上两种相比,DMA方式:
数据的传送单位是块,不再是一个字一个字的传送
数据的流向是从设备直接放入内存,或者从内存直接到设备。不再需要CPU作为中转
仅在传送一个或多个数据块的开始和结束时,才需要CPU干预
DMA控制器实际上也是一种I/O控制器,相较于普通的I/O控制器,DMA设有以下四种寄存器:
DR(数据寄存器):暂存从设备到内存,或从内存到设备的数据
MAR(内存地址寄存器)
在输入时,MAR表示数据应放到内存中的什么位置
输出时MAR表示要输出的数据放在内存中的什么位置
DC(数据计数器):表示剩余要读/写的字节数
CR(命令/状态寄存器):存放CPU发来的指令或是设备的状态信息
(1)完成一次读/写操作的流程
(2)CPU干预的频率
在传输一个(或多个)数据块开始和结束时才需要CPU干预
(3)数据传输的单位
每次读/写一个(或多个)块
每次读/写的块必须是连续的块,且在其存入内存后也必须是连续的。
(4)数据的流向
读操作
I/O设备 → 内存
写操作
内存 → I/O设备
(5)优缺点
优点
数据传输以块为单位
CPU介入频率降低,数据传输效率更高
CPU和I/O设备并行性提高
缺点
当读/写多个离散的数据块、或者将数据写进不同的内存区域时,需要发出多次I/O指令,进行多次中断才能完成
4、通道控制方式
通道:一种硬件,可以理解为是“弱化版的CPU”。通道可以识别并执行一系列通道指令。
(1)完成一次读/写操作的流程
CPU向通道发出I/O指令
指明通道程序在内存中的位置
指明要操作的是哪个I/O设备
之后CPU切换到其他进程执行
通道执行内存中的通道程序
要读入/读出多少数据
读/写的数据应存放在内存中的什么地址
通道执行完任务后发出中断信号,CPU处理中断信号
(2)CPU干预的频率
在传输一个(或多个)数据块开始和结束时才需要CPU干预
(3)数据传输的单位
每次读/写一个(或多个)块
每次读/写的块必须是连续的块,且在其存入内存后也必须是连续的。
(4)数据的流向
读操作
I/O设备 → 内存
写操作
内存 → I/O设备
(5)优缺点
优点
I/O设备、通道、CPU可以并行的工作
资源利用率很高
缺点
实现复杂
需要专门的通道硬件支持
5.1.4 I/O应用程序接口
应用程序I/O接口位于用户层软件与系统独立性软件之间,给不同类型的设备提供接口
1、字符设备接口
设备类型
键盘
打印机
……
传输单位:字符
系统调用
put/get:向设备读/写一个字符
2、块设备接口
设备类型
磁盘
……
传输单位:块
系统调用
seek:修改读写指针位置
read/write:向读写指针位置读/写数据
3、网络设备接口
系统调用
socket:创建一个网络套接字,指明网络协议(TCP/UDP)
bind:将套接字绑定到某个本地端口
connect:将套接字连接到远程主机
read/write:从套接字读/写信息
4、阻塞态/非阻塞I/O
阻塞I/O:发出I/O调用后,进程转为阻塞态等待
例:字符设备接口,从键盘读一个字符
非阻塞I/O:发出I/O调用后,进程无需阻塞等待
例:块设备接口,向磁盘写数据
最后更新于