版权归原作者所有,如有侵权,请联系我们

[科普中国]-非法指令陷阱

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

简介

在计算机中,中断是指CPU对系统发生某事件时的这样一种响应: CPU 暂停正在执行的程序,在保留现场后自动地转去执行该事件的中断处理程序;执行完后,再返回到原程序的断点处继续执行。内中断则是指由于CPU 内部事件所引起的中断,如程序出错(非法指令、地址越界)、电源故障等。1内中断(trap)也被译为“捕获”或“陷入,非法指令属于内部中断,非法指令陷阱通常是因为可执行文件本身出现错误, 或者试图执行数据段和无效操作码,堆栈溢出时也有可能产生这个信号。

中断与陷阱根据系统对中断处理的需要,操作系统一般对中断进行分类并对不同的中断赋予不同的处理优先级,以便在不同的中断同时发生时,按轻重缓急进行处理。

根据中断源产生的条件,可把中断分为外中断和内中断。外中断是指来自处理器和内存外部的中断,包括I/0设备发出的I/O中断、外部信号中断(例如用户键人ESC键)。各种定时器引起的时钟中断以及调试程序中设置的断点等引起的调试中断等。外中断在狭义上一般被称为中断。

内中断主要指在处理器和内存内部产生的中断。内中断一般称为陷阱(trap)或异常。它包括程序运算引起的各种错误,如地址非法、校验错、页面失效、存取访问控制错、算术操作溢出、数据格式非法、除数为零、非法指令、用户程序执行特权指令、分时系统中的时间片中断以及从用户态到核心态的切换等都是陷阱的例子。

为了按中断源的轻重缓急处理响应中断,操作系统为不同的中断赋予不同的优先级。例如在UNIX系统中,外中断和陷阱的优先级共分为8级。为了禁止中断或屏蔽中断,CPU的处理器状态字PSW中也设有相应的优先级。如果中断源的优先级高于PSW的优先级,则CPU响应该中断源的请求;反之,CPU屏蔽该中断源的中断请求。

各中断源的优先级在系统设计时给定,在系统运行时是固定的。而处理器的优先级则根据执行情况由系统程序动态设定。除了在优先级的设置方面有区别之外,中断和陷阱还有如下主要区别

陷阱通常由处理器正在执行的现行指令引起,而中断则是由与现行指令无关的中断源引起的。陷阱处理程序提供的服务为当前进程所用,而中断处理程序提供的服务则不是为了当前进程的。中断是由硬件引起的,而异常是由软件引起的;中断是异步的,而异常是同步的。

陷阱处理程序分类操作系统中的陷井分为两类:一类是标准系统陷井。这种陷井的处理程序是由系统提供的,用 户不能对其进行修改。另一类是用户专用陷井。这 种陷并的处理程序可以由用户自己定义。具体 地说,在系统中有这样一些陷井:

( l )专由系统处理的陷阱。

(2 )必须先由系统处理,然后才可以由用户处理的陷阱。如 在Debug下的Tarce / Ba e rk 等。

(3 ) 若 开放,则由用 户 处理:若 关 闭,则 由 系统处 理 的 陷 阱。

(4 ) 软 件产 生 的 陷 阱。

(5)空 陷 阱

陷阱 处 理 是 由 固 件 和 软 件 共 同 完 成 的。它首先 由固 件来识别,然后 由 软 件 进 行 处 理。每当一个陷阱发生,固 件从 系 统 可 用陷阱保护区(TSA)队列上取下一个STA,插入进入陷阱的那个任务的STA 队列中(该队列由TCB中的TS P指出 ),并将该任务进入陷阱时的一部分现场信息保 到 TSA 中(还有一部分现场信息 由软件保存到STA 中 )。2

陷阱处理所完成的功能1. 定义一个陷阱处理程序

2. 开放陷阱

3. 关闭陷阱

4. 发送陷阱条件

5. 发送软件陷阱条件

6. 组间发送陷阱条件2