硬件中断处理相关的杂记

84 篇文章 6 订阅
52 篇文章 34 订阅


假设硬件连接为

外设 --> IOAPIC --> LAPIC


外部中断处理流程为:

  1. 外设发出中断到IOAPIC引脚
  2. IOAPIC会查询引脚对应的RTE,
  3. IOAPIC根据RTE的设定,决定是否mask该中断
  4. IOAPIC根据RTE的设定,如deliver mode, vector等组件interrupt message
  5. IOAPIC将interrupt message发送给LAPIC
  6. LAPIC接收interrupt message,设定IRR ISR等
  7. LAPIC提取interrupt message中的vecotr,交给processor
  8. processor查IDT,完成中断处理
  9. processor发送EOI

内部中断处理流程为(以timer为例):


  1. 处理器首先设置好LVT timer,设定deliver模式,vector号,mask位等
  2. 当内部的timer触发,就会根据LVT的设置(设定deliver模式,vector号等),向LAPIC产生中断
  3. LAPIC接收中断后,根据LVT的设定决定是否mask
  4. LAPIC设定IRR ISR等
  5. LAPIC向processor提交中断,vector一般来自于LVT的设定
  6. processor根据vector查IDT,处理中断
  7. processor发送EOI


IOAPIC引脚不够的问题

IOAPIC引脚少,一般连接到同一个PCI总线上的设备会共享IOAPIC的引脚

内核负责区分处理中断到底是哪个设备的。内核注册中断的时候,申请的IRQ号和IOAPIC上的中断引脚号一般是一一对应的


由于IOAPIC中断引脚不足的问题,引出了新的技术MSI,设备会直接发送MSI消息给LAPIC,解决中断引脚不足的问题

MSI是一种协议,是否可用取决于device是否支持MSI和主板的PCI HOST CONTROLLER中是否支持MSI协议

MSI第一代会让一个设备有256个中断可用,现在已经是第二代了,每个设备都可以有4096个中断可以使用,而且都是私有的;

native kernel已经支持,设备驱动更简单。

MSI对于虚拟化的passthrough非常有用,当通过SR-IOV虚拟出很多设备的时候,每个VF都可以拥有自己的私有中断,不用再到host上进行区分,提高了中断转发的效率






  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值