ch8_4中断系统

1. 中断系统

为什么需要中断?

输入,输出。
计算机程序调试;发生异常事件;
都需要由中断系统进行处理.

1.1 中断的原因

引发中断的各种因素包括:
人为设置中断, 转管指令;
程序性事故, 溢出、操作码不能识别、除法非法
硬件故障,
I/O设备,
外部事件, 用 键盘中断 现行程序;

在这里插入图片描述

1.2 中断系统需解决的问题

(1) 各中断源 如何 向 CPU 提出请求 ?
(2) 各中断源 同时 提出 请求 怎么办 ?

(3) CPU 什么 条件、什么 时间、 以什么 方式
响应中断 ?
(4) 如何 保护现场 ?

(5) 如何 寻找入口地址 ?
(6) 如何 恢复现场,如何 返回 ?

(7) 处理中断的过程中又 出现新的中断 怎么办 ?
硬件 + 软件

2.中断请求标记和 中断判优逻辑

中断系统任意瞬间只能响应一个中断源的请求。

2.1 中断请求标记 INTR

一个请求源,  一个 INTR 中断请求标记触发器;
多个INTR,   组成 中断请求标记寄存器;

在这里插入图片描述

INTR, 分散 在各个中断源的 接口电路中,
INTR, 集中 在 CPU 的中断系统 内;

2.2中断判优逻辑

如果有多个中断请求怎么办?
响应哪一个?

硬件实现(排队器)

  1. 分散 在各个中断源的 接口电路中 链式排队器
  2. 集中 在 CPU 内;

在这里插入图片描述

2.3软件实现(程序查询)

在这里插入图片描述

3.  中断服务程序的入口地址

3.1 硬件向量法

如何找到中断服务程序的入口地址?
知道了要响应的中断源,才能确定要执行那个中断服务程序.

在这里插入图片描述

3.2 软件查询法

八个中断源 1, 2, … 8 按 降序 排列

用软件如何实现寻找中断服务程序的入口地址呢?
在这里插入图片描述

4.  中断响应

CPU在什么时间、什么条件下响应中断?

CPU在任何条件下都要立即响应中断吗?

CPU在任何时间都能响应中断吗?

4.1 响应中断的 条件

允许中断触发器 EINT = 1

4.2 响应中断的 时间

指令执行周期结束时刻由CPU 发查询信号;

在这里插入图片描述

4.3 中断隐指令

所谓中断隐指令,指的是计算机指令集中并没有设计该指令,实际的实现过程是由硬件实现的,
在执行某些指令时,这些隐指令由硬件自动实现。

如果需要响应某个中断请求, CPU如何响应中断请求?

  • 响应中断,要去执行中断服务程序;
  • 为将来的中断返回做准备
    (1)保护程序断点
    (2)保护程序运行的软硬件状态;

单重中断:执行中断, 服务程序时不允许再发生中断.

多重中断:保护程序,软硬件状态的过程中,不允许发生中断;

  1. 保护程序断点
    断点存于 特定地址( 0 号地址) 内, 断点 进栈;

  2. 寻找服务程序入口地址

向量地址 —> PC (硬件向量法)

中断识别程序, 入口地址 M—> PC (软件查询法)

  1. 硬件 关中断
    在这里插入图片描述

INT 中断标记;
EINT 允许中断;
R – S 触发器;

5. 保护现场和恢复现场

5.1 保护现场

断点: 中断隐指令 完成;

寄存器 内容: 中断服务程序 完成;

5.2 恢复现场

中断服务程序 完成;
在这里插入图片描述

6. 多重中断

6.1 多重中断的概念

如果在执行中断服务程序的过程中,出现了更重要
的,需要及时处理的新事件,怎么办呢?

在这里插入图片描述

程序断点 k+1 , l+1 , m+1;

6.2 实现多重中断的条件

要允许CPU在执行某个中断服务程序时,响应新的中断请求

是不是任何一个新的中断请求,均能中断正在进行的中断服务?

在这里插入图片描述

  1. 提前 设置 开中断 指令;

  2. 优先级别高的中断源, 有权中断优先级别低 的中断源;

6.3 屏蔽技术

6.3.1 屏蔽触发器的作用

在这里插入图片描述

MASK = 0(未屏蔽), MASKi = 1 (屏蔽)

INTR 能被置 “1”, INTPi = 0 (不能被排队选中)

6.3.2 屏蔽字

16个中断源 1, 2, 3 , … 16 按 降序 排列

在这里插入图片描述

6.3.3 屏蔽技术可改变处理优先等级

响应优先级 不可改变

处理优先级 可改变(通过重新设置屏蔽字)

在这里插入图片描述

响应优先级 A→B→C→D 降序排列

处理优先级 A→D→C→B 降序排列
在这里插入图片描述

在这里插入图片描述

6.3.4 屏蔽技术的其他作用

可以 人为地屏蔽 某个中断源的请求;

6.3.5 新屏蔽字的设置

在这里插入图片描述

6.4 多重中断的断点保护

6.4.1 断点进栈

中断隐指令 完成

6.4.2 断点存入“ 0 ” 地址

“ 0 ” 地址表示,并非是真正的物理地址0;
可以是给定的物理地址,

中断隐指令 完成;

中断周期:

0 --> MAR
命令存储器写
PC —> MDR, 断点 —> MDR
(MDR) —> 存入存储器;

三次中断,三个断点都存入 “ 0 ” 地址

如何保证断点不丢失?

中断隐指令 完成;
pc:保存了下一条指令,要执行的地址;

6.4.3 断点保护

程序断点存入 “ 0 ” 地址的断点保护

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/chumingqian/article/details/131338563