DOI:10.19392/j.cnki.16717341.201720060
摘要:本文對基于PCI總線互連體系架構(gòu)下的多CPU協(xié)同工作的通信機(jī)制進(jìn)行了研究與分析,并針對共享內(nèi)存訪問沖突的問題,提出了一種總線仲裁結(jié)合訪問隔離的方案來解決這一問題。
關(guān)鍵詞:PCI總線;多CPU互連;共享內(nèi)存;中斷
目前,在軍事、軌道交通、能源電力及航空航天等領(lǐng)域,對計(jì)算機(jī)系統(tǒng)的安全性、可靠性及處理能力具有較高的要求。由于傳統(tǒng)的單CPU系統(tǒng)在信息的獲取、處理及控制等方面的能力有限,對于高實(shí)時(shí)、高安全等復(fù)雜的工作任務(wù),其能力略顯不足。因此,多CPU的結(jié)構(gòu),協(xié)同完成數(shù)據(jù)的輸入、處理、控制、輸出等工作,相比于單CPU工作,能夠有效的提高系統(tǒng)的安全性及處理能力。
多個(gè)CPU通過一定的方式進(jìn)行互連,通過CPU間的數(shù)據(jù)傳輸和共享進(jìn)行協(xié)同工作,能夠最大化的調(diào)度和分配每個(gè)CPU的資源,提高處理器的性能,達(dá)到最優(yōu)的資源利用率。要達(dá)到這樣的目標(biāo),需要對CPU的互連方法進(jìn)行正確的選擇,其關(guān)鍵所在,就是要使用高效的CPU間通信機(jī)制。因此,本文就是研究一種基于PCI總線的多CPU互連協(xié)同工作的實(shí)現(xiàn)方法,并提出一種同步互斥機(jī)制來保證數(shù)據(jù)的訪問的安全性。
1 多CPU互連的方法
1.1 基于PCI總線互連的優(yōu)勢
嵌入式多處理器的互連,具有多種方式,如以太網(wǎng)、PCI總線、以及雙口RAM等等。本文選擇采用基于PCI總線的方式實(shí)現(xiàn)多個(gè)CPU互連,完成協(xié)同工作的目的。之所以選擇PCI總線的方式,是因?yàn)镻CI總線是一種仲裁型并行總線,為32/64位地址數(shù)據(jù)復(fù)用總線,支持突發(fā)傳輸和即插即用,具有兼容性好、傳輸速度高等優(yōu)點(diǎn)。
1.2 基于PCI總線互連的系統(tǒng)結(jié)構(gòu)
基于PCI總線互連的系統(tǒng)結(jié)構(gòu)如圖1所示。
如上圖所示的多個(gè)CPU通過PCI總線實(shí)現(xiàn)互連。其中,CPU(A)提供一塊內(nèi)存區(qū)域作為共享內(nèi)存,用于各CPU之間的數(shù)據(jù)交互。CPU(A)負(fù)責(zé)共享內(nèi)存的初始化、管理等工作,并以本地內(nèi)存的形式直接進(jìn)行訪問。其它CPU則要通過PCI總線對共享內(nèi)存進(jìn)行訪問。
2 基于PCI的多CPU通信機(jī)制的實(shí)現(xiàn)
在此種互連結(jié)構(gòu)中,共享內(nèi)存在同一時(shí)間內(nèi)可能會有多個(gè)CPU進(jìn)行訪問,出現(xiàn)資源爭搶的情況,這樣會導(dǎo)致系統(tǒng)故障的發(fā)生。因此,如何在避免沖突的產(chǎn)生,實(shí)現(xiàn)效率的最大化,是本系統(tǒng)結(jié)構(gòu)的難點(diǎn)所在。本文通過數(shù)據(jù)傳輸、通知機(jī)制和互斥機(jī)制三個(gè)方面來解決這一問題。
2.1 數(shù)據(jù)傳輸機(jī)制實(shí)現(xiàn)
在基于PCI總線的互連結(jié)構(gòu)中,每個(gè)CPU端都有各自的地址空間,并且有各自獨(dú)立的RAM。每一端的CPU都能夠?qū)ζ涞刂房臻g內(nèi)的RAM進(jìn)行訪問。那么如果總線上的某個(gè)CPU要訪問CPU(A)上的共享RAM,只有通過地址映射才能實(shí)現(xiàn),即將目標(biāo)區(qū)域映射到本地地址空間上。地址的映射是通過PCI橋?qū)崿F(xiàn)的。
基于內(nèi)存映射的數(shù)據(jù)傳輸過程如下:
CPU(A)在初始化時(shí),在其RAM中分配一塊區(qū)域作為共享內(nèi)存,然后通過對PCI橋進(jìn)行配置,把共享內(nèi)存映射到PCI域的地址空間。而其它的CPU則通過PCI橋,將PCI地址空間映射到本地RAM地址空間,從而各節(jié)點(diǎn)可以通過訪問PCI地址來訪問共享內(nèi)存。但是,由于本地RAM為PCI設(shè)備開辟的映射空間是有限的,不能一次性完成所有地址的映射,因此,要采用一種叫做“加窗映射”的機(jī)制。CPU在本地RAM的中,為PCI創(chuàng)建一個(gè)窗口,一次只將一段PCI地址映射到窗口中,當(dāng)要訪問的PCI地址不在窗口中時(shí),則將窗口移動(dòng)到指定地址范圍。PCI地址空間映射如圖2所示。
2.2 通知機(jī)制的實(shí)現(xiàn)
只有數(shù)據(jù)的傳輸機(jī)制,還不能高效的進(jìn)行通信。還需要一種高效的通知機(jī)制來實(shí)現(xiàn)數(shù)據(jù)發(fā)送方和接收方之間的同步。當(dāng)一個(gè)CPU完成數(shù)據(jù)的發(fā)送之后,應(yīng)該有某種方法通知其他CPU有數(shù)據(jù)可用;同樣當(dāng)數(shù)據(jù)接收完成以后,接收方也要通知發(fā)送方可寫入新的數(shù)據(jù)。本文采用電平觸發(fā)方式話,只需要一次中斷即可,當(dāng)發(fā)送端數(shù)據(jù)寫入完成以后,向接收端發(fā)送一個(gè)中斷觸發(fā)電平,接收端讀取完數(shù)據(jù)以后將該電平拉倒非觸發(fā)狀態(tài)即可,具有較高的效率。通知機(jī)制的具體的工作過程如圖3所示:
2.3 互斥機(jī)制的實(shí)現(xiàn)
互斥機(jī)制用來解決同一時(shí)間多個(gè)CPU同時(shí)訪問共享內(nèi)存造成訪問沖突的問題。CPU(B)、CPU(C)和CPU(D)三個(gè)CPU是通過PCI總線訪問共享內(nèi)存的,而PCI總線在同一時(shí)間只允許一個(gè)CPU取得控制權(quán),PCI總線可以通過仲裁機(jī)制來合理分配總線帶寬,保證同一時(shí)刻只能有一方訪問。所以,我們可以通過總線仲裁來避免B、C、D這三個(gè)CPU訪問沖突的發(fā)生。
但是,CPU(A)訪問共享內(nèi)存是不通過PCI總線的,CPU(A)隨時(shí)可能和另外三個(gè)CPU中的一個(gè)發(fā)生訪問沖突的問題。因此,本文提出一種總線仲裁結(jié)合訪問隔離的方案來保證訪問的互斥??偩€仲裁通過硬件完成,數(shù)據(jù)區(qū)隔離通過軟件完成。
2.3.1 PCI總線的仲裁機(jī)制
PCI總線仲裁方式不是基于時(shí)間片的,而是基于訪問的。因此,對于某個(gè)PCI主設(shè)備來講,其每次在總線上進(jìn)行訪問時(shí)都要提出仲裁要求。PCI總線采用獨(dú)立的請求仲裁方案,其結(jié)構(gòu)如圖4所示。
圖中,PCI總線仲裁器上連接有4個(gè)設(shè)備,各設(shè)備之間沒有任何的控制關(guān)系。當(dāng)仲裁器接收到各設(shè)備的請求時(shí),會通過仲裁算法對設(shè)備進(jìn)行選定,并發(fā)送總線授權(quán)信號GNT到選定設(shè)備;設(shè)備只有在獲取總線的控制權(quán)后,才能夠進(jìn)行一次交易。
2.3.2 訪問隔離實(shí)現(xiàn)方式
為了防止CPU(A)和另外三個(gè)CPU之間對共享內(nèi)存訪問的沖突,本文采用了分時(shí)訪問的隔離方式,來保證某一時(shí)間片內(nèi)只能有一個(gè)CPU具有共享內(nèi)存的訪問權(quán)。
要實(shí)現(xiàn)這一機(jī)制,首先要為共享內(nèi)存建立一個(gè)自旋鎖,每個(gè)CPU要訪問共享內(nèi)存前都要先通過CPU(A)來獲取自旋鎖狀態(tài)。實(shí)現(xiàn)的具體方法是:當(dāng)某一個(gè)CPU需要訪問共享內(nèi)存時(shí),先向CPU(A)發(fā)送一個(gè)中斷請求,CPU(A)收到中斷以后,檢查自旋鎖是否被占用,沒被占用的話則通知請求方可以訪問共享內(nèi)存,完成一次握手操作;請求方通過PCI總線在規(guī)定時(shí)間內(nèi)完成共享內(nèi)存的讀寫操作,自旋鎖進(jìn)入占用狀態(tài),以防止其它CPU訪問到共享內(nèi)存;執(zhí)行完后釋放自旋鎖。
3 總結(jié)
本文通過對比分析,闡述了基于PCI總線的多處理互連方法的優(yōu)勢。根據(jù)基于PCI總線互連結(jié)構(gòu)中所存在的問題,從數(shù)據(jù)傳輸、通知機(jī)制和互斥機(jī)制三個(gè)方面對基于PCI的多CPU通信機(jī)制的實(shí)現(xiàn)方式進(jìn)行了詳細(xì)的描述,并提出一種總線仲裁結(jié)合訪問隔離的方案來解決共享內(nèi)存訪問沖突的問題。此方法具有使用靈活、處理效率高和安全的特點(diǎn)。
參考文獻(xiàn):
[1]萬綿濤.基于PCI互連的嵌入式多處理器系統(tǒng)通信機(jī)制研究[D].華中科技大學(xué),2012.
[2]孔帥帥.基于嵌入式多核處理器的通信及中斷問題的研究[D].電子科技大學(xué),2011.
[3]沈雪峰.多CPU系統(tǒng)的中斷機(jī)制[D].電子科技大學(xué),2009.
[4]劉培寧,楊玉華,李連云,陳涵生,陳紅詣.基于PCI總線的共享內(nèi)存底板網(wǎng)絡(luò)[J].計(jì)算機(jī)工程,2006(6):246247.
作者簡介:張旭(1988),男,碩士,軟件設(shè)計(jì)師,研究方向:嵌入式系統(tǒng)應(yīng)用。