(12) [保护模式]中断与异常

中断与异常

中断

什么是中断
中断通常是由CPU外部的输入输出设备(硬件)所触发的。是外部设备通知CPU有任务要处理,希望CPU 停下正在执行的 程序, 转而执行 请求对应的 中断处理例程 (中断处理程序在哪里由IDT表决定),所以又叫做 中断请求

80x86的两条中断线

  • 非屏蔽中断线 —— NMI (NonMaskable Interrupt)
    • 如果通过NMI发送请求,则是不可屏蔽请求
    • 走IDT表中的 0x2 号门,CPU必须处理这个请求,不受EFLAGS.IF位影响
  • 可屏蔽中断线 —— INTR (Interrupt Require)
    • 如果通过INTR发送请求则是可屏蔽请求
    • 可屏蔽请求受到EFLAGS.IF位影响

可屏蔽中断

硬件中,可屏蔽中断时由一款专门的芯片来管理的,通常称为中断控制器。它负责分配中断资源和管理各个中断源发出的中断请求。为了便于表示各个中断请求,中断管理器通常用IRQ(Interrupt Request) 0x12这样的形式来表示不同的中断。

时钟中断

IRQ 0 (IDT表 0x30 中断门)就是时钟中断,大多系统的时钟中断为10-100毫秒,而windows的时钟中断时10-20毫秒。也就是说,没10-20ms中断控制器就会向CPU发送一个时钟中断,让CPU断下来处理其他事务,即使原来的程序是个死循环,也能让CPU有机会进行线程切换,但CPU并没有这么做。

其他中断

IDT表中 0x31 - 0x3F 对应 IRQ 1 - IRQ 15
如果EFLAGS.IF == 1,CPU将处理可屏蔽中断
如果EFLAGS.IF == 0,CPU将不再处理屏蔽中断
使用CLI指令将 IF 位清 0 ;使用STI指令将IF位置 1

APIC (高级可编程中断控制器)

异常

异常通常是运行时检测到某些错误引起的,类如除0、访问无效段或页

中断与异常的区别

  • 中断是由外部设备主动发起的,而异常是由CPU主动产生的
  • INT n 被称为软件中断,但本质上是 异常,且EFLAGS.IF位对 INT n 无效

相同之处
不管是中断还是异常,都是查的同一张表 —— IDT表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值