文章目录
I/O系统概述
I/O系统组成
-
I/O软件
- 包括驱动程序、用户程序、管理程序、升级补丁等
- 采用I/O指令和通道指令实现CPU和I/O设备的信息交换
-
I/O硬件
- I/O设备、设备控制器、接口和I/O总线
I/O 设备分类
IO设备被当做一种特殊的文件
根据使用特性分类
- 人机交互式设备:鼠标,打印机
- 网络通信设备:网络接口,调制解调器
- 存储设备:外存,辅存
根据传输速率分类
-
低速设备:键盘,鼠标
-
中速设备:行式打印机,激光打印机
-
高速设备:磁盘机,磁带机
根据信息交换单位分类
-
块设备
-
传输速率较高,可寻址(即可随机读/写任一块)
-
常采用DMA方式
-
数据传输的基本单位是“块”,如磁盘
-
-
字符设备
- 传输速率较慢,不可寻址
- 常采用中断驱动方式
- 数据传输的基本单位是字符,如鼠标、键盘
根据共享属性/设备分配方式分类
-
共享设备
-
在一段时间内允许多个进程同时访问的设备(并发访问)
-
一般采用动态分配
-
分配共享设备不会引起进程死锁
-
共享设备必须是可随机访问和可寻址的设备【我想这个要求是从效率考虑的。假设磁盘只能顺序访问,那么同时打开磁盘上的两个文件,这切换的代价也太大了】
-
-
独占设备(属于临界资源)
- 一段时间内只允许一个用户(进程)访问的设备
- 可采用动态分配和静态分配,一般采用静态分配
- 分配独占设备可能引起进程死锁(动态分配)
-
虚拟设备
- 以SPOOLing方式使用外部设备,通过虚拟技术将一*占设备变换为若干台逻辑设备,供若干个用户(进程)同时使用
常见IO设备
输入设备
-
键盘
-
鼠标
- 光电式
- 机械式
输出设备
显示器
-
种类
-
阴极射线管(CRT)显示器
-
字符显示器
- 将字符的点阵存入由 ROM 构成的字符发生器中,在 CRT 进行光栅扫描的过程中,从字符发生器中依次读出某个字符的点阵,按照点阵中 0 和 1 代码的不同控制扫描电子東的开或关,从而在屏幕上显示字符
- 对应于每个字符窗口,所需显示字符的 ASCI 代码被存放在视频存储器 VRAM 中,以备刷新
-
图形显示器
- 将所显示图形的一组坐标点和绘图命令组成显示文件存放在缓冲存储器中,缓存中的显示文件传送给矢量(线段)产生器,产生相应的模拟电压,直接控制电子束在屏幕上的移动。为在屏幕上保留持久稳定的图像,需按一定的频率对屏幕反复刷新。
-
-
LCD 显示器
- 由液态晶体组成的显示屏
-
LED
- 由发光二极管组成的显示屏
- LED在亮度、功耗、刷新速率等方面都比LCD更具优势
-
-
参数
-
屏幕大小
- 对角线长度表示,单位英寸
-
分辨率
- 所能显示的像素点个数
-
灰度级
- 在黑白显示器中表示所显示的像素点的亮暗差别
- 在彩色显示器中则表现为颜色的不同
- 典型的RGB,就是256级灰度
-
刷新
- 光点只能保持极短的时间便会消失
-
刷新频率
-
显示存储器(VRAM)
- 也叫刷新存储器
- 为了刷新图像,需要把一帧图像存储在刷新存储器中。分辨率越高,灰度级越多,需要的容量就越大
- VRAM容量=分辨率*灰度级位数
-
打印机
-
工作原理(印字原理、打字方式)
-
按打印元件对纸是否有击打动作
-
击打式打印
- 利用机械动作使印字机构与色带和纸张相撞而打印字符
-
非击打式打印
- 用各种物理或化学的方法印刷字符的
-
-
按打印字符结构
- 点阵式打印
- 全形字打印机
-
-
针式打印机
- 针式打印机擅长多层复写打印,银行中出票据的那个嘟嘟嘟 嘟嘟嘟的就是
- 工作原理简单,造价低廉,耗材(色带)便宜,但是打印分辨率低,打印速度慢
-
喷墨式打印机与激光打印机
-
打印清晰度
- 喷墨打印机的分辨率相对更高一些,但是清晰度还是激光打印机更高一些
-
适用纸张
- 喷墨打印机可使用的纸张种类非常多
- 激光打印机只适用普通的纸张
-
耗材
- 对于经济性打印机来说,墨盒的价格甚至可能比打印机本身还要高,普遍的理论打印页数(A4纸5%覆盖率)只有200-300页;而激光打印机虽然其硒鼓墨粉价格稍高,但是打印页数比喷墨打印机要高出数倍,因此激光打印机具有打印成本上的绝对优势。
-
打印速度
- 喷墨打印机的打印方式是逐个
- 激光打印机是逐页
-
价格
- 喷墨打印机的价格较为低廉
-
外存储器(辅助存储器)
-
磁盘存储器
- 见 OS 第六章 文件管理
-
磁盘阵列
- RAID 指将多个独立的物理磁盘组成一个逻辑盘,数据在多个物理盘上分割交叉存储、并行访问,具有更好的存储性能、可靠性和安全性
- 通过同时使用多个磁盘,提高了传输率
- 通过在多个磁盘上并行存取来大幅提高存储系统的数据吞吐量
- 通过镜像功能,提高安全可靠性
- 通过数据校验,提供容错能力
-
光盘存储器
-
固态硬盘
- 基于 Flash Memory
I/O接口
设备控制器(I/O控制器)
设备控制器是计算机中的一个实体, 其主要职责是控制一个或多个 I/O 设备, 以实现 I/O 设备和计算机之间的数据交换。 它是 CPU 与 I/O 设备之间的接口, 它接收从 CPU 发来的命令,并去控制 I/O 设备工作。
设备控制器的(组成)基本功能
-
控制寄存器:接收和识别 CPU 或通道发出的命令
磁盘控制器可以接收 CPU 发来的 Read、 Write、 Format 等 15 条不同的命令
-
数据寄存器:实现主机和外设的数据交换
**CPU 与控制器之间:**通过数据总线,由 CPU 并行地把数据写入控制器,或从控制器中并行地读出数据(如果是 DMA 或通道方式的话,那就是“主存”与控制器)
**控制器与设备之间:**设备将数据输入到控制器,或从控制器传送给设备
-
状态寄存器:标识和报告设备的状态
记录 IO 设备的状态,例如,仅当该设备处于发送就绪状态时,CPU才能启动控制器从设备中读出数据
-
地址译码器:地址识别和设备选择
每个设备控制器的寄存器都有唯一的地址,详见计组
**内存映象I/O:**控制器中的寄存器与内存地址统编址,可以采用对内存进行操作的指令来对控制器进行操作
**寄存器独立编址:**控制器中的寄存器使用单独的地址,需要设置专门的指令来操作控制器
-
数据缓冲,使用缓冲器缓和CPU与IO设备的速度差异
-
信号格式的转换,实现电平转换、串/并转换、模/数转换等
-
差错控制,若传送中出现了错误,向 CPU 报告,CPU 将重新进行一次传送
I/O 接口的类型
按数据传送方式
- 并行接口
- 串行接口
按I/O控制方式
- 程序查询接口
- ……
按功能选择的灵活性
- 可编程接口
- 不可编程接口
I/O端口
概念与组成
I/O端口指设备控制器中可被CPU直接访问的寄存器
- 数据端口(数据缓冲寄存器)
- 状态端口(状态寄存器)
- 控制端口(控制寄存器)
编址方式
-
统一编址
-
又称存储器映射方式,即把 I/O 端口当作存储器的单元进行地址分配
-
不需要特殊的 I/O 指令,使用访存的指令即可
-
优点
- 端口拥有较大的编址空间
- 访问 I/O 的操作更加灵活、方便
-
缺点
-
端口占用了存储器地址,内存容量变小
-
执行速度教慢
这个应该是访存指令比较慢的问题
-
-
-
独立编址
-
又称IO映射方式,IO端口的地址空间与主存地址空间是两个独立的地址空间
-
需要设置专门的IO指令来访问IO端口
-
优点
- IO指令与存储器指令区别明显,程序编制清晰
-
缺点
- I/O指令少
- 需要 CPU 提供存储器读/写、I/O 设备读/写两组控制信号,增加了控制的复杂性
-
中断
基本概念
程序中断是指在计算机执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求, CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序。
这里给的定义是外中断,是狭义上的中断,也是我们通常指的中断,因为内中断并不一定能够回到程序的断点处继续执行。
中断的分类
中断请求一般来自于CPU以外的事件,异常一般发生在CPU内部
-
内中断(异常)
-
陷入 trap
- 由陷入指令(又叫trap指令、自陷指令、访管指令)引起的
-
故障 fault
- 硬件故障(优先级最高的中断),可能被修复,修复故障后,内核会把CPU使用权还给应用程序。例如:缺页故障
-
终止 abort
- 软件中断,一般由致命错误引起,不可恢复,内核会终止改程序,例如:除数为0,非法使用特权指令,浮点数上溢(注意下溢做机器零处理,不需要中断来处理)
-
-
外中断(中断)
通常说中断,仅指狭义上的中断,也就是硬中断,(2017年统考题也是这样认为的)
- 人工干预强制停止一个进程
- 时钟中断
- I/O中断请求
可屏蔽中断与不可屏蔽中断
-
可屏蔽和不可屏蔽中断都属于外中断,因为内中断是无法控制的,也就不存在能否屏蔽一说
-
INTR Interrupt Require
- 对于可屏蔽中断,除了受本身的屏蔽位的控制外,还都要受一个总的控制,即CPU标志寄存器中的中断允许标志位IF(Interrupt Flag)的控制,IF位为1,可以得到CPU的响应,否则,得不到响应。
-
NMI Nonmaskable Interrupt
- 不可屏蔽中断就是CPU必须响应的外中断,它的中断类型码固定为 2 ,所以由它引发的中断过程中没有取得中断类型码的那一步。不过后面三步还是一样的。
开中断与关中断
- 关中断是为了保护一些不能中途停止执行的程序而设计的,例如中断处理时CPU恢复现场的过程是不允许被其他的程序打扰的,此时就要启动关中断,不再相应其他的请求。当现场恢复完毕后,CPU启动开中断。
- 关中断期间,不响应可屏蔽中断
中断请求/响应过程
-
中断请求
- 中断源向 CPU 发送中断信号
-
中断判优
-
多个 IO 设备在下一个总线周期到来之前,发出了中断请求,则需要进行判优,使用硬件排队器或中断查询程序
-
一般是有中断固定级别的
- 硬件故障优先级最高
- DMA 请求高于一般总线请求
- 高速设备优于低速设备
- 输入设备优于输出设备
- 实时设备优于普通设备
- ……
-
-
响应中断的条件
- CPU 允许中断及开中断
- 一条指令执行完毕,且没有更紧迫的任务
中断处理过程
-
中断隐指令
-
关中断
- 在保护现场的过程中,CPU 不应响应更高级中断源的中断请求
-
保存断点
- 保存原来程序的断点【PC的内容】
- 可以保存在堆栈中,也可以保存在指定单元
-
引出中断服务程序
-
取出中断服务程序的入口地址并传送给 PC
-
中断向量
- 中断向量是中断服务程序的入口地址
- 系统中的全部中断向量集中存放到存储器的某个区域内,称为中断向量表
- 中断向量地址是指中断服务程序的入口地址的地址
-
-
-
保存现场和屏蔽字
-
中断处理程序一定会保存的只有PC和PSWR两个寄存器
关于是否需要保存通用寄存器,和调用子程序一样,只有当子程序/中断处理程序中覆盖掉了某个通用寄存器,才会进行保存。
与进程切换不同的是,进程切换属于CPU上下文的切换,一定会保存所有的通用寄存器
-
-
开中断
- 为了实现多重中断
-
执行中断服务程序
- 这才是中断请求的最终目的
-
关中断
- 保证在恢复现场和屏蔽字时不被中断
-
恢复现场和屏蔽字
- 将现场和屏蔽字恢复到原来的状态
-
开中断、中断返回
- 返回到原程序的断点处,继续执行原程序
I/O 控制方式
程序直接控制方式
从外存读取数据,CPU需要对外设状态进行循环检査,直到确定该字已经在O控制器的数据寄存器中。
存在问题
I/O 设备无法向 CPU 报告自己完成了 I/O 操作,所以只能处理机不断循环询问 I/O 设备是否完成,别的啥也不干了,CPU 和 I/O 设备只能串行工作,CPU 利用率极低,属于忙等方式
中断驱动 I/O 控制方式
CPU 与 I/O 设备并行工作,仅当输完一个数据时,才需 CPU 花费极短的时间去做些中断处理
以字(节)为单位进行 I/O 的,每当完成一个字(节)的 I/O 时,控制器便要向 CPU 请求一次中断,所以 I/O 中断方式主要用在键盘、键盘等中速设备
存在问题
不适用于高速设备,如果用于磁盘就太低效了,1KB 的数据需要中断 1K 次
直接存储器访问(DMA)方式
中断驱动 I/O 控制方式中,I/O 设备与内存之间的数据交换需要经过CPU中转,DMA 的基本思想是,在 I/O 设备和内存之间开辟一条**“直接的数据通路”**,彻底解放 CPU
“直接的数据通路”:DMA 的这条数据通路是逻辑上的,其实就是总线,不过 DMA 请求具有更高的响应性,CPU 需要礼让 DMA 请求
数据传输的基本单位是数据块,从设备直接送入内存(或者相反),仅在传送一个或多个(连续的)数据块的开始和结束时,才需 CPU 干预,整块数据的传送是在控制器的控制下完成的
周期窃取
又叫周期挪用,是指利用CPU不访问 存储器的那些周期来实现DMA操作
存在问题
CPU 每发出一次 I/O 指令,只能读/写一个或多个连续的数据块(别管是几个,必须是连续的),希望进一步减少 CPU 的干预,于是有了通道控制方式
DMA与中断控制方式对比
I/O 通道控制方式
DMA 方式的进一步发展:
- 把对一个数据块的读(或写)为单位的干预减少为对一组数据块的读(或写)及有关的控制和管理为单位的干预
- DMA 方式需要 CPU 来控制传输数据块的大小,传输的内存地址,而通道方式中,这些信息是由通道决定的
- 一个 DMA 控制器对应一台设备,而一个通道可以对应多个 I/O 控制器(一个 I/O 控制器又可以控制多台同类型设备)
I/O 通道
一种硬件,可以视为“弱鸡版”CPU
I/O 处理机
用一个功能较弱的计算机管理 I/O,彻底解放 CPU,硬件结构最复杂。这个方式下,IO 操作几乎全部由外围处理机来完成,此时外围处理机类似一个小型 PC,很多时候也把通道称为IO处理机,OS中很多概念本来就是人为定义的,一般情况认为通道就是一种IO处理机
通道程序
由一系列通道指令(或称为通道命令)所构成的,不属于机器指令,属于通道自己的指令,存放在主存中,由通道从主存中取出并由通道来执行
工作过程
CPU 向通道发送一条 I/O 指令(指明操作的设备、通道程序的地址)。通道在收到该指令后,从内存中取出本次要执行的通道程序,然后执行该通道程序,当通道完成了规定的 I/O 任务后(全部放入内存),向 CPU 发中断信号(实现了 CPU、通道和 I/O 设备三者的并行操作)
四种方式工作过程概述
程序控制方式(程序查询方式)
程序在执行到 IO 操作时,会以一定周期查询 IO 设备的状态标志位,如果处于”忙状态“程序会等待一个周期后,再次进行查询,直到 IO 设备变为“闲状态”。
直接程序控制方式虽然简单,不需要多少硬件的支持,但由于高速的 CPU 和低速的 I/O 设备之间的速度上不匹配,因此,CPU 与外围设备只能串行工作,使 CPU 的绝大部分时间都处于等待是否完成 I/O 操作的循环测试中,造成 CPU 的极大浪费,外围设备也不能得到合理的使用,整个系统的效率很低。因此,这种 I/O 控制方式只适合于 CPU 执行速度较慢,且外围设备较少的系统。
程序中断方式
在现代计算机系统中,对I/O设备的控制,广泛地采用中断驱动方式,即当某进程要启动某个I/O设备时,便由CPU向相应的设备控制器的控制寄存器发出一条I/O命令,然后立即返回继续执行原来的任务。设备控制器便按照该命令的要求去控制I/O设备。若I/O设备忙,则由驱动程序将请求插入设备等待队列。此时, CPU与I/O设备处于并行工作状态。例如,在输入时,当设备控制器收到 CPU发来的读命令后,便准备接收从相应输入设备送来的数据。一旦数据进入数据寄存器,控制器便通过中断请求线INT向CPU发送一中断信号,由CPU读取状态寄存器测试输入过程中是否出错,若无错,便从数据寄存器中读出数据,写入指定内存单元。
中断驱动方式在I/O设备输入数据的过程中,无需 CPU干预,可以使CPU与I/O设备并行工作。仅当输完一个数据时,才需 CPU花费极短的时间去进行中断处理。从而大大地提高了整个系统的资源利用率及吞吐量,特别是CPU的利用率。
DMA 方式
首先明确一点,主存和IO设备中并没有一条直接的物理通路,所谓的“直接数据通路”是指系统总线,所以也就存在当DMA控制器发出总线请求时,CPU要在本次存储周期结束时让出总线,CPU响应DMA请求在每次机器周期执行完。
只有DMA方式是依靠硬件电路实现的,其余三种(程序查询,中断,通道)都需要程序的干预。
中断驱动I/O方式虽然大大提高了主机的利用率,但是它以字(节)为单位进行数据传送,每完成一个字(节)的传送,控制器便要向CPU请求一次中断(做保存现场信息,恢复现场等工作),仍然占用了CPU的许多时间。这种方式对于高速的块设备的I/O控制显然是不适合。为了进一步减少CPU对I/O的干预,引入了直接存储器访问DMA(Direct Memory Access)控制方式。
- 预处理
由CPU完成一些必要的准备工作。然后,CPU继续执行原来的程序,直到IO设备准备好发送的数据(输入情况)或接收的数据(输出情况)时,I/O设备向DMA控制器发送DMA请求,再由DMA控制器向CPU发送总线请求(有时将这两个过程统称为DMA请求),用以传输数据。
- 数据传送
DMA的数据传输可以以单字节(或字)为基本单位,也可以以数据块为基本单位。对于以数据块为单位的传送(如硬盘),DMA占用总线后的数据输入和输出操作都是通过循环来实现的。需要指出的是,这一循环也是由DMA控制器(而非通过CPU 执行程序)实现的,即数据传送阶段完全由DMA(硬件)控制。
- 后处理
DMA控制器向CPU发送中断请求,CPU执行中断服务程序做DMA结束处理, 包括校验送入主存的数据是否正确、测试传送过程中是否出错(错误则转入诊断程序) 及决定是否继续使用DMA传送其他数据块等。
DMA方式起到代理cpu的功能,较之中断驱动方式,又是成百倍地减少了CPU对 I/O控制的干预,进一步提高了CPU与I/O设备的并行操作程度。
通道(CH)方式
通道,独立于 CPU 的专门负责输入输出控制的处理机,它控制设备与内存直接进行数据交换。有自己的通道指令,这些指令由 CPU 启动,并在操作结束时向 CPU 发出中断信号。
通道控制方式,实现了 CPU、通道和 I/O 设备三者的并行操作,从而更加有效地提高整个系统的资源利用率。例如,当 CPU 要完成一组相关的读(或写)操作时,只需要向 I/O 通道发出一条 I/O 指令,指出其所要执行的通道程序和数据在内存中的地址和要访问的 I/O 设备,通道接收到该指令后,通过执行通道程序便可完成 CPU 指定的 I/O 任务。可见,通道只是在 I/O 操作的起始和结束时向 CPU 发出 I/O 中断申请,相对于之前的控制方式进一步减少了 CPU 的干预程度。
但是通道方式也有自己的不足,它虽然有自己的指令系统,但是通道指令功能简单,使用面窄,与 CPU 共用一个主存,还不是独立的 I/O 处理机。
CPU 向通道发送一条 I/O 指令(指明操作的设备、通道程序的地址)。通道在收到该指令后,从内存中取出本次要执行的通道程序,然后执行该通道程序,当通道完成了规定的 I/O 任务后(全部放入内存),向 CPU 发中断信号
一些问题
为什么中断隐指令要由硬件完成?
- 主要是保证系统运行的可靠性,相比于硬件,软件更容易出错
- 也能提高处理器的速度
中断响应优先级和中断处理优先级分别指什么?
- 中断响应优先级是由硬件排队线路或中断査询程序的查询顺序决定的,不可动态改变
- 中断处理优先级可以由中断屏蔽字来改变,反映的是正在处理的中断与新发生的中断的处理优先级
程序中断和调用子程序有何区别?
- 调用子程序过程发生的时间是已知的和固定的,而中断过程发生的时间一般是随机的
- 子程序为主程序服务,两者属于主从关系。而中断服务程序与主程序两者是平行关系
- 调用子程序的过程完全属于软件处理过程;而中断处理系统是一个软硬件结合的系统
- 子程序嵌套受堆栈大小限制;而中断嵌套级数主要由中断优先级来决定,一般优先级数不会很大
- 中断处理一定会保存PSWR的内容,而子程序调用不会
系统调用和函数调用和进程切换有什么区别?(宏观上分析)
- 无论是系统调用程序还是中断服务程序,都处于当前进程的上下文中,并没有发生进程上下文切换(所以它们不一定需要保存通用数据寄存器和通用地址寄存器的内容,子程序/中断处理程序中用到了,才会进行保存)
- 当系统调用或中断处理程序返回时,CPU要从内核模式切换回用户模式,此时会执行操作系统的调用程序。如果发现就需队列中有比当前进程更高的优先级的进程,则会发生进程切换:当前进程信息被保存,切换到就绪队列中的那个高优先级进程;否则,直接返回当前进程的用户模式,不会发生上下文切换
一点探究
I/O接口和设备控制器的关系是什么?
我的所有疑惑都来源于唐书上的这张图,让我以为IO接口和设备控制器是完全分离的两个东西,总结理解如下:
设备控制器就是 I/O 接口,只不过在不同学科中的叫法不同,在操作系统中称之为设备控制器,而计算机组成原理中称之为接口。
一个设备控制器可以控制多台 I/O 设备,而每台 I/O 设备与 CPU 的连接都对应着一个 I/O 接口。 ,也就是说 IO 接口是一个偏概念的东西,是 CPU 和 某个外设 的数据交换接口,而设备控制器是实际存在的芯片,是实现 IO 接口的东西,可以连接多台 I/O 设备