zoukankan      html  css  js  c++  java
  • 关于SMI、MSI、SCI、INTx各种中断小结【转】

    转载自http://blog.csdn.net/huangkangying/article/details/11178425

     

    MSI VS INTx(Pin-based interrupt)

            MSI的全称是Message Signaled Interrupt.MSI出现在PCI 2.2和PCIe的规范中,是一种内部中断信号机制。传统的中断都有专门的中断pin,当中断信号产生是,中断PIN电平产生变化(一般是拉低)。INTx就是传统的外部中断触发机制,它使用专门的通道来产生控制信息。然而PCIe并没有多根独立的中断PIN,它使用特殊的信号来模拟中断PIN的置位和复位。MSI允许设备向一段指定的MMIO地址空间写一小段数据,然后chipset以此产生相应的中断给CPU.

    对MSI的误解

            通常有一个对MSI的误解:有人认为device可以直接向cpu发送数据作为中断的一部分。这得看CPU。如果使用的是Client CPU而且PCIe总线经过南桥,这部分写到MMIO的数据是给chipset的,chipset读取这段数据来决定说发送什么样的中断给CPU。Device是没有办法直接给interrupt handler传递更多的信息的。

      但对于Intel的至强sever处理器,处理器中有IIO(Integrated I/O Controller), 如果PCIe的device是直接接在cpu的root port上的,那么MSI会被直接发送到cpu的IIO, IIO又会将MSI转给UBox, 由UBox把MSI发送给目标CPU。

    MSI Capability结构

    MSI Capability一共有四种结构。可以通过读取MSI Capability结构中的Message Control字段来判断当前是四种结构中的哪一种。
     
    MSI结构中的Message Address字段代表的是目的地址,Message Data就是中断时要发送的Data.


    相对于PIN-based/out-ofband中断, MSI的好处

    虽然MSI相对比较复杂一点,但它是有不少好处的:

    1.  从电气机械的角度,MSI减少了对interrupt pin个数的需求。从而使得连接头变得更简单,更便宜。

    2.  MSI增加了中断号的数量。传统的PCI中断只允许每个device拥有4个中断,并且由于这些中断都是共享的,大部分device都只有一个中断。MSI允许每个device有1,2,4,8,16或者是32个中断。

    3.  使用MSI也有一点点性能上的优势。使用传统的PIN中断,当中断到来时,程序去读内存获取数据时有可能会产生冲突。其原因device的数据主要通过DMA来传输,而在PIN中断到达时,DMA传输还未能完成,此时cpu不能获取到数据,只能空转。而MSI不会存在这个问题,因为MSI都是发生在DMA传输完成之后的。

    SCI VS SMI

    SCI:System Control Interrupt, 系统控制中断。专门用于ACPI电源管理的一个IRQ,需要OS支持。

    SMI:System Management Interrupt, 系统管理中断,使用系统进入SMM的特殊中断。

    两者区别:

    SMI是CPU级别的,ACPI和非ACPI模式下都可以使用,而SCI是OS级别的,只有在ACPI support的OS中才能见到。比如说DOS下触发的中断肯定不是SCI,但有可能是SMI。

    两者联系:

    两者可以用于电源管理,但SMI不限于电源管理。

    触发过程:

    SMI:  (硬件方式)

    SMI Pinassert -> CPU SMM mode -> BIOS SMI handler

    SMI:(软件方式)

    WriteIO(B2h) -> CPU SMM mode->BIOS SMI handler

    SCI:

    SCI Pinassert->IDT->OS ACPI driver->ASL code(Q Evnent)->?

  • 相关阅读:
    oracle连接数
    python——包
    python——软件开发目录规范
    python——模块介绍
    python——二分法
    python——函数的递归调用
    python08——for 循环
    while循环嵌套练习题
    python07——while循环
    python06入门——流程控制之if判断
  • 原文地址:https://www.cnblogs.com/jyaray/p/7127316.html
Copyright © 2011-2022 走看看