之是以可以實作如此的msi中的message,是因為pcie不僅僅是一條總線,而是一套協定,它是串行的,而非傳統總線的并行形式,串行總線最适合定義協定了,然而不管怎樣,cpu引腳以及其局部總線(前端總線)是并行的,是以針對于pcie,有一個稱為root complex的家夥負責并串轉換。由于pcie實作複雜的協定,是以它的一個端點可以往root complex發送一個消息,root complex接收到一個msi時,它會将這個message轉換,依然向cpu的intr引腳發送一個高電平,然後cpu的inta引腳拉低的時候root complex将msi中取出的中斷号取出來發送到資料總線上,也就是說,root complex代替pcie總線上連接配接的裝置發送了intr高電平給cpu,然後代替各個裝置發送了中斷号給cpu處理,是以就解除了cpu和各個裝置之間的耦合,隻要root complex這個二傳手負責二者的互動即可。
在傳統的pci中斷體系中,每一個pci總線上的裝置被配置設定一個特定的中斷号,然後當裝置需要中斷cpu時,裝置直接發出int信号,然後在cpu的inta引腳拉低的時候将自己的中斷号放在資料總線上,一切都要裝置自己負責,這一切的緣由一部分就是因為pci的并行性,實作事務很複雜,而pcie是串行的,很容易定義協定包,是以很容易就實作了由root complex代理中斷的功能,是以裝置也就可以動态的配置設定獨占的中斷号了,因為中斷号的配置設定完全是軟體解決的,而不再像傳統pci那樣是硬體解決的了,軟體的最大特點就是其靈活性,是以pcie更适合大量裝置的環境,中斷處理程式再也不需要大量周遊共享中斷号的裝置來确定中斷源了。
聯想一下以太網,或者ip網,它們的成功不是硬體的複雜性和高效性,而是不失高效性下的靈活性,這些體系或者機制的共同點就是它們的總線都是串行的,串行的總線可以友善的實作協定,而不用考慮并行同步的問題,這些協定是基于握手的,是以這些協定比硬體硬連線實作的機制更加靈活,如果采用硬連線并行機制,我們除了得到了短距離的快速傳輸外,幾乎無法傳輸任何控制資訊,還需要另外的控制總線和相關的時序,這就增加了晶片引腳的數量和內建電路裝置的複雜性,是以串行線路在更高層次上是比并行線路更具有優勢的,并行線路需要額外的控制電路時序來提供限制,而串行線路隻需要協定包本身就可以提供限制。
附:一張可以展現pcie的圖

本文轉自 dog250 51CTO部落格,原文連結:http://blog.51cto.com/dog250/1271084