1. 程式人生 > >關於SMI、MSI、SCI、INTx各種中斷小結【轉】

關於SMI、MSI、SCI、INTx各種中斷小結【轉】

root 分享 detail 傳統 oot intel bili 一段 出現

轉載自http://blog.csdn.net/huangkangying/article/details/11178425

目錄(?)[-]

  1. MSI VS INTxPin-based interrupt
    1. 對MSI的誤解
    2. MSI Capability結構
    3. 相對於PIN-basedout-ofband中斷 MSI的好處
  2. SCI VS SMI
    1. 兩者區別
    2. 兩者聯系
    3. 觸發過程

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)->?

關於SMI、MSI、SCI、INTx各種中斷小結【轉】