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