目录
5.3 中断机构和中断处理程序
5.3.1 中断简介
1、中断和陷入
主要区别是信号的来源:
- 中断来自 CPU 外部
- 陷入来自 CPU 内部
由于中断是由外部设备引起的,故又称为外中断
2、中断、中断源、中断处理程序
中断:在计算机运行过程中,如果发生某种随机事态,CPU 将暂停执行现行程序,转向去执行中断处理程序,为该随机事态服务,并在服务完毕后自动恢复原程序的执行。
- 中断源:引起中断的事件。
- 中断处理程序:对出现的事件进行处理的程序。
3、中断向量表和中断优先级
- 中断向量表用于存储各中断处理程序的入口地址
4、对多中断源的处理方式
- 屏蔽中断
- 嵌套中断
5.3.2 中断处理程序
当一个进程请求 I/O 操作时,该进程将被挂起,直到 I/O 设备完成 I/O 操作后,设备控制器便向 CPU 发送一个中断请求,CPU 响应后便转向中断处理程序,中断处理程序执行相应的处理,处理完后解除相应进程的阻塞状态。
I/O 进程是调用了设备驱动程序去启动设备,设备启动之后数据准备完毕之前,该 I/O 进程和设备驱动程序的进程均处于阻塞状态。
I/O 操作流程:
- 启动 I/O 设备
- I/O 设备完成数据传送
- 设备控制器发送中断
- CPU 调用中断处理过程
中断处理过程:
- 唤醒被阻塞的设备驱动程序进程
- 保护被中断进程的 CPU 环境
- 转入相应设备的中断处理程序
- (特性) 中断处理
- 恢复被中断进程的现场
5.4 设备驱动程序
设备驱动程序:是 I/O 系统的上层软件 (设备无关的 I/O 软件) 与设备控制器之间的通信程序。
- 接收上层软件发来的抽象 I/O 要求,如 read 或 write
- 将其转换为具体要求后,发送给设备控制器
- 也将由设备控制器发来的信号传送给上层软件
由于设备驱动程序与硬件密切相关,因此需要为每一类设备配置一种驱动程序。例如,打印机和显示器需要不同的驱动程序。
5.4.1 设备驱动程序概述
1、设备驱动程序功能
① 接收由设备无关的 I/O 软件发来的命令和参数,并将命令中的抽象要求转换为具体要求。
② 检查用户 I/O 请求的合法性,了解 I/O 设备的状态,传递有关参数,设置设备的工作方式。
③ 发出 I/O 命令并检查设备状态。
设备状态记录在设备控制器中
- 若 I/O 设备空闲,则立即启动 I/O 设备
- 若 I/O 设备忙碌,则将请求表挂在设备请求队列上等待
④ 及时响应由设备控制器或 I/O 通道发来的中断请求并处理。
中断请求
2、设备驱动程序的特点
① 驱动程序:是指在请求 I/O 的进程与设备控制器之间的一个通信和转换程序。
② 驱动程序与设备控制器、I/O 设备的硬件特性紧密相关,因而对不同类型的设备应配置不同的驱动程序。
③ 驱动程序与 I/O 设备所采用的 I/O 控制方式紧密相关,常采用中断方式和 DMA 方式。
④ 由于驱动程序与硬件紧密相关,因而其中的一部分必须用汇编语言编写。
⑤ 驱动程序允许可重入,即一个驱动程序可以被多个 I/O 进程使用。
3、设备处理方式
根据在设备处理时是否设置进程,以及设置什么样的进程而把设备处理方式分成以下三类:
① 为每一类设备设置一个 I/O 进程,专门用于执行这类设备的 I/O 操作。
② 在整个系统中设置一个 I/O 进程,专门用于执行系统中所有各类设备的 I/O 操作。
③ 不设置专门的设备处理进程,而只为各类设备设置相应的设备处理程序,供用户进程或系统进程调用。
5.4.2 设备驱动程序的处理过程
设备控制器的状态寄存器
只有驱动程序才同时了解上层软件的抽象要求和设备控制器中的寄存器情况
- 将抽象要求转换为具体要求:设置设备控制器中的寄存器。
- 检查 I/O 请求的合法性:若请求的设备不支持本次的 I/O 请求,则认为是非法操作。
- 读出和检查设备的状态:检查设备是否空闲或是否就绪(状态寄存器)。
- 传送必要的参数:如数据量、起始地址等。
- 工作方式的设置:对于有多种工作方式的设备进行设置。
- 启动 I/O 设备。
设备驱动程序一旦启动一个 I/O 操作后,便把自己阻塞起来,直到中断到来时再被唤醒。具体的 I/O 操作是在设备控制器的控制下进行的,因此,在设备忙于传送数据时,CPU 又可以去干其它的事情,实现了 CPU 与 I/O 设备的并行操作。
5.4.3 对 I/O 设备的控制方式
1、程序 I/O 方式
方案一: 原地踏步等待!由于没有中断机构,CPU 需要自己不断地测试 I/O 设备的状态。
工作原理:在 CPU 向设备控制器发出一条 I/O 指令,启动输入设备输入数据时,要同时把状态寄存器中的忙/闲标志 busy 置为 1,然后便不断地循环测试 busy(称为轮询)
- CPU 启动设备时,将 busy 置为 1,然后轮询 busy;
- 当 busy=1 时,表示设备尚未输入完一个字,CPU 继续轮询;
- 当 busy=0 时,表示设备已将一个字送入控制器的数据寄存器中;
- CPU 将数据寄存器中的数据取出,并送入内存指定单元中。
这样便完成了一个字的 I/O,接着再去启动设备读下一个字,并置 busy=1 。
CPU 全程运行的是设备驱动程序;这里的状态寄存器和数据寄存器都是设备控制器的
缺点:CPU 需花代价不断查询 I/O 状态,CPU 资源浪费极大。例如:从终端输入一个字符的时间约为 100ms,而将该字符送入终端缓冲区的时间小于 0.1ms,那么 CPU 有 99.9ms 是在忙等。
2、中断方式
方案二:设备就绪了告诉 CPU 一声!
工作原理:CPU 向设备控制器发出一条 I/O 指令,然后立即返回继续执行原来的任务。设备控制器按照命令的要求去控制指定的 I/O 设备。一旦数据进入数据寄存器,控制器便通过控制线向 CPU 发送一中断信号,(设备驱动程序被唤醒) ,由 CPU 检查输入进程中是否出错,若无错,便向控制器发送取走数据的信号,然后再通过控制器及数据线,将数据写入内存指定单元中。
优点:可使 CPU 与 I/O 设备并行工作,从而提高整个系统的资源利用率及吞吐量。
缺点:中断 I/O 方式比程序 I/O 方式更高效,但仍以字/字节为传输单位。每完成一个字/字节的传输,设备均要向 CPU 请求一次中断。
每一个字都是由 CPU 负责写入到内存。可以设计有一定处理能力的外围设备,将这种简单的任务交给它。
3、DMA 方式
方案三:简单任务自己做,完成了告诉 CPU 一声!
DMA 方式的细节由 DMA 设计者考虑,对于操作系统而言,这仍然只是中断处理,只不过是把之前的若干个中断封装成了一个罢了。
(1)DMA 方式的特点
- 数据传输的基本单位是数据块
- 所传送的数据是从设备直接送入内存的,或者相反
- 仅在传送一个数据块的开始和结束时,才需 CPU 干预
(2)DMA 控制器的组成
一组寄存器 + 控制逻辑
- 数据寄存器 DR:用于暂存设备到内存或从内存到设备的数据。
- 地址寄存器 MAR:存放把数据从设备传送到内存的起始目标地址或内存源地址。
- 数据计数器 DC:存放本次 CPU 要读或写的字(节)数。
- 命令/状态寄存器 CR:接收从 CPU 发来的 I/O 命令或有关控制和状态信息。
(3)DMA 工作过程
(4)DMA 的优缺点
- 优点:将中断方式以字为单位的干预减少到以数据块为单位的干预
- 缺点:CPU 每发出一条 I/O 指令,只能读写一个连续的数据块
当需要一次去读取多个数据块时,CPU 仍需要分别发出多条 I/O 指令及进行多次中断处理才能完成。
4、通道方式
方案四:多个任务自己做,完成了告诉 CPU 一声!
(1)通道方式
- 一个通道控制多台设备
- 仅在传送多个个数据块的开始和结束时,才需 CPU 干预
- 将以一个数据块为单位的干预减少到以一组数据块为单位的干预
通道方式实现了 CPU、通道 和 I/O 设备三者的并行操作,从而更有效地提高整个系统的资源利用率。例如,CPU 只需向 I/O 通道发送一条 I/O 指令,通道接到该指令后,通过执行通道程序便可完成 CPU 指定的 I/O 任务。
(2)通道程序
通道是通过执行通道程序并与设备控制器共同实现对 I/O 设备的控制的。
通道程序是由一系列通道指令构成的,通道指令中包含:
- 操作码:规定指令所执行的操作,如读、写、控制等。
- 内存地址:标明字符送入内存或从内存取出的内存首址。
- 计数:本条指令所要读/写的字节数。
- 通道程序结束位 P:表示通道程序是否结束,P=1 表示结束。
- 记录结束标志 R
R=0 表示本指令与下一指令处理同一个记录;R=1 表示这是处理某记录的最后一条指令。