我是靠谱客的博主 机灵可乐,最近开发中收集的这篇文章主要介绍PCIE的中断硬件中断线中断和MSI中断(一) 硬件中断线中断MSI(Message SignaledInterrupt)中断,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 硬件中断线中断

早期PCI时代,PCI设备的中断使用的是传统中断,也就是基于硬件中断线(INTx,每个设备有四条INTAINTBINTCINTD)来向中断控制器(IO APIC)报告中断的产生。这个中断是多个设备(功能)共享的。中断产生后,系统中断服务程序再来轮询具体是哪个设备产生了中断。这显然很低效。

图片

 

MSI(Message SignaledInterrupt)中断

PCI协议2.2引入了一个新的中断处理方式,即MSI(Message SignaledInterrupt)。有中断产生时在系统特定内存地址写入中断数据已通知CPU一个中断。该种方式脱离了中断引脚(PIN)带来的数目限制,并且延迟小、效率高。

当设备准备引发中断时,它将向LAPIC(Local Advanced Programmable Interrupt Controller)发送一条MSI消息,(注意:这个消息不要和PCIe协议里面的读写事务的消息混淆了,MSI的消息发送本质是memory write事务)该消息包含有关目标LAPIC和中断向量编号的信息。一旦LAPIC收到消息,它就会将其发送到响应的CPU Core进行中断处理。

图片

 

设备怎么知道发送什么消息内容到哪个地址去呢?

MSI消息内容(Message Data)最初由系统OS配置,写入到PCI/PCIe设备的消息数据寄存器Message Data Register中。消息将要发送的地址(Message Address),也由OS配置,写入到对应PCI/PCIe设备的消息地址寄存器Message Address Register中。

图片

 

 

消息的地址和内容具体是什么?

 

在X86系统下,message address对应的LAPIC的地址。

发往0FEEXXXX都会触发CPU的中断消息。

图片

发送的具体数据格式如下,bit7-0即为中断向量编号:

图片

 

   注意,上面都是以X86为例,具体的可以参考《Intel® 64 and IA-32 Architectures Software Developer’s Manual》卷三关于APIC和MSI的部分。

    MSI-X跟MSI类似,只是每个设备可以发送更多的中断。而且,MSI-X的Message Address和 Message Data并不存放在PCI/PCIe设备的寄存器中。而是存放在PCIe设备的BAR空间中。

最后

以上就是机灵可乐为你收集整理的PCIE的中断硬件中断线中断和MSI中断(一) 硬件中断线中断MSI(Message SignaledInterrupt)中断的全部内容,希望文章能够帮你解决PCIE的中断硬件中断线中断和MSI中断(一) 硬件中断线中断MSI(Message SignaledInterrupt)中断所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部