中断与异常

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

  1. 初始化时直接创建255个描述符即可。
  2. 将想加入的中断按找IDT表的偏移加入到IDT表中 Gate的结构由选择子,属性和偏移组成,利用选择子和偏移来找到中断程序入口 例如:在80h偏移处加入中断
    1
    2
    .80h:   Gate  SelectorCode32, UserINtHandler, 0, DA_386IGate

    补充UserIntHander程序后,就可以通过int 80h进行调用。

中断与异常
https://jfsas.github.io/2024/10/12/中断与异常/
作者
JFSAS
发布于
2024年10月12日
许可协议