中断与异常
introduce
在实模式下直接使用BIOS中断,而在保护模式下不能使用,需要IDT表来代替。(Interrupt
Descriptor Table)
在IDT表中使用中断门和陷阱们,Gate的结构由选择子,属性和偏移组成,利用选择子和偏移来找到中断程序入口
中断和异常机制
中断:程序程序执行时因为硬件而随机发生,通常用来处理外部时间,如外围设备请求,
int n也可以产生中断。
异常: 处理器在执行时遇到错误,如零除,页错误等。
异常的三种类型
- Fault 是一种可以被更正的异常,一旦被更正,程序可以继续运行。异常处理程序处理完后,返回执行产生fault的指令。
- Trap 也是一种允许程序继续执行的异常,但是返回地址是产生Trap之后的那条指令。
- Abort 发生异常后不允许程序继续执行,是用来报告严重错误的。
外部中断和内部中断
- 内部中断 由int n 产生,类似于调用门的使用。
- 外部中断 由硬件产生的中断,外部中断分为不可屏蔽中断NMI和可屏蔽中断INTR。不可屏蔽中断对应向量号2,可屏蔽中断于cpu是通过8259A连接的。 8259A是用来对所有外部设备的一个代理,可以优先级处理中断和屏蔽打开中断。外部中断需要建立硬件和中断向量的联系。
8259A芯片
通过设置8259A将中断请求与中断向量对应起来。
中断处理由两片8259A芯片级联,一共可以挂载15个不同的外部设置
芯片的设置必须按顺序向主从芯片中写入ICW1、ICW2、ICW3、ICW4,其分别设置 *
ICW1 : 单个还是级联,需不需要ICW4,中断向量字节数 * ICW2 :
芯片中断向量的起始值,如给主8259A发送020h,表示IRQ0-IRQ7对应向量号020h-027h
* ICW3
:主从芯片的连接端口,如给主芯片发送004h,代表主芯片的IR2对应从芯片。给从芯片发送002h代表连接主片的IR2
OCW用于屏蔽或打开中断,OCW1的格式很简单,对应位为0代表打开1代表关闭。OCW2用来发送EOI。EOI是中断处理结束后需要发送给8259A,以便继续接受中断的。
建立IDT
- 初始化时直接创建255个描述符即可。
- 将想加入的中断按找IDT表的偏移加入到IDT表中
Gate的结构由选择子,属性和偏移组成,利用选择子和偏移来找到中断程序入口
例如:在80h偏移处加入中断 补充UserIntHander程序后,就可以通过int 80h进行调用。
1
2.80h: Gate SelectorCode32, UserINtHandler, 0, DA_386IGate
中断与异常
https://jfsas.github.io/2024/10/12/中断与异常/