[原]80386中断和异常

中断为改变程序环境提供了一个严格定义的上下文切换机制。
80386可以有256个中断。 被分为5类: 外部硬件中断, 非屏蔽中断, 软件中断, 内部中断,及异常, 复位;
外部硬件, 软件, 非屏蔽中断 由用户定义.
中断按其中断号的优先级来提供服务: 基于五种层次的优先级, 基于类型号的优先级.

保护模式的中断描述符表:
中断描述符是门描述符. 最多包括256个门. 可以定以为陷阱门, 中断门, 任务门. 中断门, 陷阱门允许控制转交给当前的任务的其他服务程序(内核属于当前任务的一部分, 内核中的驱动程序, 单内核). 任务门主要用来任务切换(控制转交给不同的任务, 微内核).

中断描述符包括:段选择符, 偏移量, 访问权限, 类型. 这些标识了服务程序入口点. 描述符的访问权限, 标识了有效性, DPL特权级, T陷阱门还是中断门. 陷阱门在上下文切换时并不清除IF, 来禁止外部硬件中断.

一般来讲, 外部硬件中断由中断门描述符配置. 一旦相应了中断, 则IF置位, 禁止中断. 除非软件重新允许接口(中断保存现场, 要置位), 不可能接受其他硬件中断. 另一方面内部中断, 使用陷阱门描述(系统调用, 不设置IF, 允许硬件中断).

中断指令:
CLI
STL
LIDT
INT n
IRET
INTO
BOUND
HLT
WAIT
设置IF标志位, 清除标志位. 保护模式下, 会比较当前特权级和IOPL特权, 如果小于IO则失败, 产生一般性保护异常.
INTO中断溢出指令, 可能溢出的算术指令后面. 异常 4
BOUND检查阵列索引寄存器置是否在最大最小之间, 异常 5
HLT等待外部中断;
WAIT忙查询外部设备.

在启动中断门时, 80386自动清除if, 可以屏蔽外部中断. 如果要允许中断可以在isr中 sti来重新允许外部中断. 否则只可在结束时的iret来允许.

8259a


作者:liyonghelpme 发表于2010/6/11 13:45:00 原文链接
阅读:196 评论:0 查看评论
posted @ 2010-06-11 13:45  liyonghelpme  阅读(299)  评论(0编辑  收藏  举报