<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          PCI總線的中斷機制

          作者: 時間:2016-12-15 來源:網(wǎng)絡(luò) 收藏

          在x86處理器系統(tǒng)中,由BIOS或者APCI表記錄PCI總線的INTA~D#信號與中斷控制器之間的映射關(guān)系,保存這個映射關(guān)系的數(shù)據(jù)結(jié)構(gòu)也被稱為中斷路由表。大多數(shù)BIOS使用表1?3中的映射關(guān)系,這也是絕大多數(shù)BIOS支持的方式。如果在一個x86處理器系統(tǒng)中,PCI橋下游總線的PCI設(shè)備使用的中斷映射關(guān)系與此不同,那么系統(tǒng)軟件程序員需要改動BIOS中的中斷路由表。

          BIOS初始化代碼根據(jù)中斷路由表中的信息,可以將PCI設(shè)備使用的中斷向量號寫入到該PCI設(shè)備配置空間的Interrupt Line register寄存器中,該寄存器將在第2.3.2節(jié)中介紹。

          1.4.3中斷請求的同步

          在PCI總線中,INTx信號是一個異步信號。所謂異步是指INTx信號的傳遞并不與PCI總線的數(shù)據(jù)傳送同步,即INTx信號的傳遞與PCI設(shè)備使用的CLK#信號無關(guān)。這個“異步”信號給系統(tǒng)軟件的設(shè)計帶來了一定的麻煩。

          系統(tǒng)軟件程序員需要注意“異步”這種事件,因為幾乎所有“異步”事件都會帶來系統(tǒng)的“同步”問題。以圖1?1為例,當(dāng)PCI設(shè)備11使用DMA寫方式,將一組數(shù)據(jù)寫入存儲器時,該設(shè)備在最后一個數(shù)據(jù)離開PCI設(shè)備11的發(fā)送FIFO時,會認(rèn)為DMA寫操作已經(jīng)完成。此時這個設(shè)備將通過INTx信號,通知處理器DMA寫操作完成。

          此時處理器(驅(qū)動程序的中斷服務(wù)例程)需要注意,因為INTx信號是一個異步信號,當(dāng)處理器收到INTx信號時,并不意味著PCI設(shè)備11已經(jīng)將數(shù)據(jù)寫入存儲器中,因為PCI設(shè)備11的數(shù)據(jù)傳遞需要通過PCI橋1和HOST主橋,最終才能到達(dá)存儲器控制器。

          而INTx信號是“異步”發(fā)送給處理器的,PCI總線并不知道這個“異步”事件何時被處理。很有可能處理器已經(jīng)接收到INTx信號,開始執(zhí)行中斷處理程序時,該PCI設(shè)備還沒有完全將數(shù)據(jù)寫入存儲器。

          因為“PCI設(shè)備向處理器提交中斷請求”與“將數(shù)據(jù)寫入存儲器”分別使用了兩個不同的路徑,處理器系統(tǒng)無法保證哪個信息率先到達(dá)。從而在處理器系統(tǒng)中存在“中斷同步”的問題,PCI總線提供了以下兩種方法解決這個同步問題。

          (1)PCI設(shè)備保證在數(shù)據(jù)到達(dá)目的地之后,再提交中斷請求。

          顯然這種方法不僅加大了硬件的開銷,而且也不容易實現(xiàn)。如果PCI設(shè)備采用Posted寫總線事務(wù),PCI設(shè)備無法單純通過硬件邏輯判斷數(shù)據(jù)什么時候?qū)懭氲酱鎯ζ?。此時為了保證數(shù)據(jù)到達(dá)目的地后,PCI設(shè)備才能提交中斷請求,PCI設(shè)備需要使用“讀刷新”的方法保證數(shù)據(jù)可以到達(dá)目的地,其方法如下。

          PCI設(shè)備在提交中斷請求之前,向DMA寫的數(shù)據(jù)區(qū)域發(fā)出一個讀請求,這個讀請求總線事務(wù)將被PCI設(shè)備轉(zhuǎn)換為讀完成總線事務(wù),當(dāng)PCI設(shè)備收到這個讀完成總線事務(wù)后,再向處理器提交中斷請求。PCI總線的“序”機制保證這個存儲器讀請求,會將DMA數(shù)據(jù)最終寫入存儲器,有關(guān)PCI序的詳細(xì)說明見第9.3節(jié)。

          PCI總線規(guī)范要求HOST主橋和PCI橋必須保證這種讀操作可以刷新寫操作。但問題是,沒有多少芯片設(shè)計者愿意提供這種機制,因為這將極大地增加他們的設(shè)計難度。除此之外,使用這種方法也將增加中斷請求的延時。

          (2)中斷服務(wù)例程使用“讀刷新”方法。

          中斷服務(wù)例程在使用“PCI設(shè)備寫入存儲器”的這些數(shù)據(jù)之前,需要對這個PCI設(shè)備進(jìn)行讀操作。這個讀操作也可以強制將數(shù)據(jù)最終寫入存儲器,實際上是將數(shù)據(jù)寫到存儲器控制器中。這種方法利用了PCI總線的傳送序規(guī)則,這種方法與第1種方法基本相同,只是使用這種方法使用軟件方式,而第1種方式使用硬件方式。第9.3節(jié)將詳細(xì)介紹這個讀操作如何將數(shù)據(jù)刷新到存儲器中。

          第2種方法也是絕大多數(shù)處理器系統(tǒng)采用的方法。程序員在書寫中斷服務(wù)例程時,往往都是先讀取PCI設(shè)備的中斷狀態(tài)寄存器,判斷中斷產(chǎn)生原因之后,才對PCI設(shè)備寫入的數(shù)據(jù)進(jìn)行操作。這個讀取中斷狀態(tài)寄存器的過程,一方面可以獲得設(shè)備的中斷狀態(tài),另一方面是保證DMA寫的數(shù)據(jù)最終到達(dá)存儲器。如果驅(qū)動程序不這樣做,就可能產(chǎn)生數(shù)據(jù)完整性問題。產(chǎn)生這種數(shù)據(jù)完整性問題的原因是INTx這個異步信號。

          這里也再次提醒系統(tǒng)程序員注意PCI總線的“異步”中斷所帶來的數(shù)據(jù)完整性問題。在一個操作系統(tǒng)中,即便中斷處理程序沒有首先讀取PCI設(shè)備的寄存器,也多半不會出現(xiàn)問題,因為在操作系統(tǒng)中,一個PCI設(shè)備從提交中斷到處理器開始執(zhí)行設(shè)備的中斷服務(wù)例程,所需要的時間較長,處理器系統(tǒng)基本上可以保證此時數(shù)據(jù)已經(jīng)寫入存儲器。

          但是如果系統(tǒng)程序員不這樣做,這個驅(qū)動程序依然有Bug存在,盡管這個Bug因為各種機緣巧合,始終不能夠暴露出來,而一旦這些Bug被暴露出來將難以定位。為此系統(tǒng)程序員務(wù)必要重視設(shè)計中出現(xiàn)的每一個實現(xiàn)細(xì)節(jié),當(dāng)然僅憑謹(jǐn)慎小心是遠(yuǎn)遠(yuǎn)不夠的,因為重視細(xì)節(jié)的前提是充分理解這些細(xì)節(jié)。

          PCI總線V2.2規(guī)范還定義了一種新的中斷機制,即MSI中斷機制。MSI中斷機制采用存儲器寫總線事務(wù)向處理器系統(tǒng)提交中斷請求,其實現(xiàn)機制是向HOST處理器指定的一個存儲器地址寫指定的數(shù)據(jù)。這個存儲器地址一般是中斷控制器規(guī)定的某段存儲器地址范圍,而且數(shù)據(jù)也是事先安排好的數(shù)據(jù),通常含有中斷向量號。

          HOST主橋會將MSI這個特殊的存儲器寫總線事務(wù)進(jìn)一步翻譯為中斷請求,提交給處理器。目前PCIe和PCI-X設(shè)備必須支持MSI中斷機制,但是PCI設(shè)備并不一定都支持MSI中斷機制。

          目前MSI中斷機制雖然在PCIe總線上已經(jīng)成為主流,但是在PCI設(shè)備中并不常用。即便是支持MSI中斷機制的PCI設(shè)備,在設(shè)備驅(qū)動程序的實現(xiàn)中也很少使用這種機制。首先PCI設(shè)備具有INTx#信號可以傳遞中斷,而且這種中斷傳送方式在PCI總線中根深蒂固。其次PCI總線是一個共享總線,傳遞MSI中斷需要占用PCI總線的帶寬,需要進(jìn)行總線仲裁等一系列過程,遠(yuǎn)沒有使用INTx#信號線直接。

          但是使用MSI中斷機制可以取消PCI總線這個INTx#邊帶信號,可以解決使用INTx中斷機制所帶來的數(shù)據(jù)完整性問題。而更為重要的是,PCI設(shè)備使用MSI中斷機制,向處理器系統(tǒng)提交中斷請求的同時,還可以通知處理器系統(tǒng)產(chǎn)生該中斷的原因,即通過不同中斷向量號表示中斷請求的來源。當(dāng)處理器系統(tǒng)執(zhí)行中斷服務(wù)例程時,不需要讀取PCI設(shè)備的中斷狀態(tài)寄存器,獲得中斷請求的來源,從而在一定程度上提高了中斷處理的效率。本書將在第8章詳細(xì)介紹MSI中斷機制。


          上一頁 1 2 下一頁

          關(guān)鍵詞: PCI總線中斷機

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();