第6章 异常和中断处理及其电路实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中断 响应
中断 处理
• 中断响应
– 中断响应是指主机发现外部中断请求,中止现行程序
的执行,到调出中断服务程序这一过程。
(1)中断响应的条件
① CPU处于开中断状态
② 在一条指令执行完
② 至少要有一个未被屏蔽的中断请求
问题:中断响应的时刻与异常处理的时刻是否相同?为什么?
中断一定是在一条指令执行结束后开始查询有无中断请求,有的话
故障:执行指令引起的异常事件,如溢出/缺页/堆栈溢出/访问超时等
自陷:预先安排的事件,如单步跟踪、系统调用等(自愿中断)
终止:硬故障事件,机器将“终止”,调出中断服务程序重启操作系统
思考:哪些故障补救后可继续执行,哪些只好终止当前进程?
缺页等:补救后可继续,回到发生故障的指令重新执行
溢出、除数为0、非法操作、内存保护错等:终止当前进程
多重中断嵌套
中断优先级的顺序是: 3# > 2# > 1#
Stack是内存中采用 “FIFO”的一块特殊
的存储区
BACK
6.1.4 中断优先级
• 当多个中断源同时提出中断请求时,处理机 如何处理呢?
• 中断响应优先级是指当有多个中断同时发生 时,对中断响应的优先次序。
• 安排原则:把全部中断源按轻重缓急进行排 队并给予优先权。
第6章 异常和中断处理及其 电路实现
6.1 异常和中断
• 程序执行中,CPU会遇到一些特殊情况使执行程序 被“中断”
– 此时,CPU中止原来正在执行的程序,转到处理异常情 况或特殊事件的程序去执行,执行后再返回到原被中止 的程序继续执行
– 控制器设计中最难的部分就是异常和中断的实现
不同体系结构和教科书对“异常”和“中断”定义 内涵不同!
• 按发生原因分为硬故障中断和程序性中断两类 回到下条指令!
硬故障中断:如电源掉电、硬件线路故障等
程序性中断:执行某条指令时发生的“例外(Exception)”,如溢出/缺页/
越界/越权/非法指令/除数为0/堆栈溢出/断点/单步/系统调用等
• 按处理方式分为故障(fault)、自陷(Trap)和终止(Abort)三类
0
16 15
0
IP[7:0]
876
210
0 ExcCode
0
c
MIPS Cause寄存器中ExcCode的定义
ExcCode
0 1 2 3 4 5 6 7 8 9 10
助记符 种类
Int 中断 Mod 异常
TLBL TLBS AdEL AdES
异常 异常 异常 异常
IBE DBE Sys Bp
异常 异常 异常 异常
– 多重中断的概念 在一个中断处理(即执行中断服务程序)过程中,若又 有新的中断请求发生,而新中断优先级高于正在执行的 中断,则应立即中止正在执行的中断服务程序,转取处 理新的中断。这种情况为多重中断,也称中断嵌套。
– 中断优先级的概念 中断响应优先级——由查询程序或硬联排队线路决定的 优先权,反映多个中断同时请求时选择哪个响应 中断处理优先级——由各自的中断屏蔽字来动态设定, 反映本中断与其它中断之间的关系 中断响应的优先级由硬件排队线路决定, 而中断处理优先级由软件设置屏蔽码决定 SKIP
# 第6-2位是引起异常或中断的代码
add $k0, $k0, $k1
#找到散转表相应的地址
lw $k0, %low(exc_tab_base)($k0) #从散转表中取出入口地址
jr $k0
#跳转到相应的程序去处理异常或中断
MIPS Cause寄存器 :
31 30 29 28 27
0
24 23 22 21
RI 异常
Βιβλιοθήκη Baidu
描述 中断(IP[7:0]指出中断源) TLB TLB TLB
执行系统调用指令
c
MIPS Cause寄存器中ExcCode的定义
ExcCode 11 12 13 14 15
16 - 22 23 24
25 - 29 30 31
助记符 CpU Ov Tr − FPE −
WATCH MCheck
• 中断处理阶段 • 恢复阶段
关中断 恢复现场及旧屏蔽字 清“中断请求” 开中断 中断返回
6.1.3 中断屏蔽和中断嵌套
• 程序中断方式(中断驱动方式)
– 中断响应的条件和中断响应过程 – 中断处理过程 – 中断嵌套和中断屏蔽
禁止中断与允许中断
• 中断源提出中断请求后,由于某种条件存 在,CPU不能中止现行程序的执行,称为禁 止中断。
• 中断向量表:所有的中断组织成一个一维表 格。存放在连续的存储区中。
• 每个中断向量存放的地址称为向量地址。
实例—8086/8088中断系统
统称为“中断”:内中断(内部异常)和外中断(外部中断)
内中断:CPU自己产生而不通过中断请求线请求,皆为不可 屏蔽中断
指令引起异常:CPU执行预置指令后在特定情况下发生的异常 INTO 溢出:执行算术指令后,若发生溢出,则产生类型4中断 INT n 用户定义:指令的第二字节给出一个类型号(n=0~255)
CPU ……
INTR 中断源n
• 当CPU收到中断请求信号后,就知道了请求 源是谁,这有利于提高中断响应的速度,便 于采用向量中断技术,但其硬件代价较大。
• 缺点:中断源的数目难以扩充。
(3)多线多级中断
• 当中断源的数目大于中断输入线的数目时, 通常是将中断请求线连接成二维结构(多线 多级技术),如下图。
• 问题:如何从当前执行的程序跳转到异常 或中断处理程序?
• 有2种方法:查询中断和向量中断
中断的请求
• 中断源 引起中断的事件,即发出中断请求的来源,称
为中断源。在计算机系统中,软件和硬件均可以 提出中断请求。 • 为了记录中断事件是否发生,可利用具有存储功 能的寄存器,这个寄存器称为中断寄存器。 • 中断寄存器的值可由程序读出,其值称为中断字 或中断码。 • CPU进行中断处理时,可根据中断字和中断位确定 中断源,从而转入相应的服务程序。
外中断:通过中断请求线INTR和NMI来实现
INTR:可屏蔽中断 (外设中断源引起的中断) NMI:不可屏蔽中断 (重要或紧急的硬件故障),属于类型2中断 所有事件都被分配一个“中断类型号” 每个中断都有相应的“中断服务程序” 可根据中断类型号找到中断服务程序的入口地址
8086/8088的中断向量表
1.查询中断:MIPS CPU中断机制
MIPS CPU使用查询中断从当前执行的程序跳转到异常
或中断处理程序。
lui $k0, %hi(exc_tab_base) # exc_table_base是散转表的起始地址
mfc0 $k1, C0_CAUSE
# 把Cause寄存器的内容送到寄存器r27
andi $k1, $k1, 0x7c
④切换到具体的异常处理程序执行
3.中断处理过程
• 中断过程:中断响应+中断处理
中断响应的结果是调出相应的中断服务程序
• 中断处理
– 是指执行相应中断服务程序的过程 – 不同的中断源其对应的中断服务程序不同 – 典型的中断处理(中断服务程序)分为三个阶段
• 准备阶段 保护现场及旧屏蔽字 查明原因(软件识别中断时) 设置新屏蔽字 开中断
③ 识别中断源 取得中断服务程序首地址和初 始 PSW分别送PC和PSWR
6.1.2 查询中断和向量中断
• 问题:中断检测能否和异常检测一样在指令执行 中进行?
• 中断随机发生,与指令执行不同步,不能在指令执 行中检测,总是每条指令执行结束时检测
• 问题:为什么在指令执行中不能响应中断? • 因无法回到一条指令的中间继续执行
• 当收到中断请求后,CPU必须通过相应的软 件或硬件的方法来判断是哪个设备提出中断 请求。
• 在微机中广泛采用这种模式。
INTR
CPU 中断源1
INTA
中断源2
……
中断源n
(2)多线中断
• 在多线中断技术中,各个中断源单独设置中 断请求线,将中断请求直接送往CPU,如下图。
INTR 中断源1
INTR 中断源2
CS:IP CS:IP 3FC~3FFH
中断向量表(异常表)中每一项是对应中断服务程序的 入口地址。被称为中断向量(Interrupt Vector) 中断向量表的起始地址存放在一个异常表基址寄存器中
处理器中的异常处理机制
检测到异常时,处理器必须进行以下基本处理
① 关中断:使处理器处于“禁止中断”状态,以防止新异常 (或中断)破坏断点和现场 关中断!即:将中断允许标志清0。
③识别异常事件:软件识别和硬件识别(向量中断方式)
软件识别(查询中断)(MIPS采用)
设置一个异常状态寄存器(MIPS中为Cause寄存器),用于记录异常原因。操 作系统使用一个统一的异常处理程序,该程序按优先级顺序查询异常状态寄存 器,识别出异常事件。
硬件识别(向量中断)(80x86采用)
用专门的硬件查询电路按优先级顺序识别异常,得到“中断类型号”,根据此 号,到中断向量表中读取对应的中断服务程序的入口地址。
立即响应,所以一定是在当前指令执行完时响应中断,而“异常”
发生在指令执行过程中,所以不能等到指令执行完才进行异常处理
。
中断响应
(2)中断响应过程
执行一条隐指令,可能需完成 一次总线操作,从总线上取中 断类型号 具体来说,处理器做三件事:
① 关中断 0=>中断允许触发器CIEN
② 保护断点和程序状态 PC=>堆栈(或特殊寄存器EPC) PSW=>堆栈
• 在CPU内部设有一个“中断允许”触发器。 功能如下表:
中断允许触发器 CPU是否响应中断 类型 指令
1
响应
允许中断 开中断
0
不响应
禁止中断 关中断
所有中断源的中断屏蔽触发器构成中断屏蔽寄存 器,该寄存器可以由程序来读写。
进入中断处理,系统自动执行“关中断” 。
多重中断的概念
• 多重中断和中断处理优先权的动态分配
– 外部“中断”:CPU外发生的特殊事件,由“中断请求”信号 向CPU请求处理
如实时钟、打印机缺纸、外设准备好、采样计时到、DMA传输结束等
异常或中断的响应过程
正
指令
常
的
指
令
执 异常或中断出现
行
流
程
调用
停止当前程序的执行
返回
异常或中断处理程序 ......
c
中断响应
• 中断过程
– 中断响应(硬件实现) – 中断处理(软件实现)
其中n=3 (INT 3)时为断点设置,该指令执行后自动产生类型3中断 处理器检测异常:CPU执行指令时产生的异常,如:除法错、
无效操作码、缺页、单 步跟踪调试等 除法错:除数为0或商溢出,则产生类型0中断 单步跟踪:当自陷位TF=1且处在开中断状态(即IF=1)时,每条指 令执行完就自动产生类型1中断
− CacheErr
−
种类
异常 异常
异常 −
异常 −
异常 异常
−
异常 −
描述
算术操作时结果溢出
保留
保留
TLB 保留
CACHE出错 保留
c
2.向量中断
• 向量中断方式是为每一个中断源设置一个中 断向量。
• 中断向量包括该中断源的中断服务程序首地 址和程序状态字PSW—Program Status Word。
• 例如把中断响应优先级高的中断请求放在中 断寄存器左边,中断响应优先级较低的中断 请求放在右边。
1.中断请求信号的传送
• 中断请求信号产生后,可以通过中断请 求线传送给CPU。
• 按照中断请求线的数目分为 单线中断 多线中断 多线多级中断
(1)单线中断
• 各中断源的请求信号通过三态门汇集到一根 公共请求线上,如下图。
②保护断点和程序状态:将断点和程序状态保存到堆栈或特 殊寄存器中
PC→堆栈 或 EPC(专门存放断点的寄存器) PSWR →堆栈 或 EPSWR (专门保存程序状态的寄存器) PSW—Program Status Word:程序状态字,包括条件码、中断码、状态位等 PSWR(PSW寄存器):用于存放程序状态字寄存器。如,X86的FLAGS
MIPS中,术语“异常”是指控制流中任何意外的改变, 而无论其产生原因是来自处理器内部还是外部
术语“中断”则只用于由外部引起的事件 本章主要介绍如何在数据通路中增加“异常”和“中断”的 检测和处理逻辑
异常和中断的处理
•
使程序执行被
“中断”
的事件有两类
思考:自陷处理完后回 到哪条指令执行?
– 内部“异常”:CPU内发生的意外事件或特殊事件
中断向量表也称中断入口地址表,位于0000H~03FFH。 共256组,每组占四个字节 CS:IP。向量地址=中断类型号×4
例1:除法错的中断类型号 为0,故其向量地址 为:0×4=0
例2:NMI的中断类型号为 2,故其向量地址为: 2×4=8
除法错 CS:IP 单步 CS:IP
NMI CS:IP
000~003H 004~007H 008~00BH