轉載自http://blog.csdn.net/huangkangying/article/details/11178425post
MSI的全稱是Message Signaled Interrupt.MSI出如今PCI 2.2和PCIe的規範中,是一種內部中斷信號機制。傳統的中斷都有專門的中斷pin,當中斷信號產生是,中斷PIN電平產生變化(通常是拉低)。INTx就是傳統的外部中斷觸發機制,它使用專門的通道來產生控制信息。然而PCIe並無多根獨立的中斷PIN,它使用特殊的信號來模擬中斷PIN的置位和復位。MSI容許設備向一段指定的MMIO地址空間寫一小段數據,而後chipset以此產生相應的中斷給CPU..net
一般有一個對MSI的誤解:有人認爲device能夠直接向cpu發送數據做爲中斷的一部分。這得看CPU。若是使用的是Client CPU並且PCIe總線通過南橋,這部分寫到MMIO的數據是給chipset的,chipset讀取這段數據來決定說發送什麼樣的中斷給CPU。Device是沒有辦法直接給interrupt handler傳遞更多的信息的。code
但對於Intel的至強sever處理器,處理器中有IIO(Integrated I/O Controller), 若是PCIe的device是直接接在cpu的root port上的,那麼MSI會被直接發送到cpu的IIO, IIO又會將MSI轉給UBox, 由UBox把MSI發送給目標CPU。blog
雖然MSI相對比較複雜一點,但它是有很多好處的:ip
1. 從電氣機械的角度,MSI減小了對interrupt pin個數的需求。從而使得鏈接頭變得更簡單,更便宜。內存
2. MSI增長了中斷號的數量。傳統的PCI中斷只容許每一個device擁有4箇中斷,而且因爲這些中斷都是共享的,大部分device都只有一箇中斷。MSI容許每一個device有1,2,4,8,16或者是32箇中斷。get
3. 使用MSI也有一點點性能上的優點。使用傳統的PIN中斷,當中斷到來時,程序去讀內存獲取數據時有可能會產生衝突。其緣由device的數據主要經過DMA來傳輸,而在PIN中斷到達時,DMA傳輸還未能完成,此時cpu不能獲取到數據,只能空轉。而MSI不會存在這個問題,由於MSI都是發生在DMA傳輸完成以後的。it
SCI:System Control Interrupt, 系統控制中斷。專門用於ACPI電源管理的一個IRQ,須要OS支持。class
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)->?