的所述處理器內(nèi) 核應(yīng)使用的配置寄存器對(duì),W便所述處理器內(nèi)核向確定的所述配置寄存器對(duì)的地址寄存器 中寫入要配置的地址信息,向確定的所述配置寄存器對(duì)的數(shù)據(jù)寄存器中讀寫要給總線設(shè)備 配置的數(shù)據(jù)。與現(xiàn)有技術(shù)中所有處理器內(nèi)核都共用一個(gè)配置寄存器對(duì)相比,本發(fā)明實(shí)施例 提供的總線虛擬化的方法中,可W確保每個(gè)處理器內(nèi)核在訪問總線設(shè)備時(shí),可W使用獨(dú)立 的一個(gè)配置寄存器對(duì),從而可W保證處理器內(nèi)核對(duì)總線設(shè)備訪問正確性。
【附圖說(shuō)明】
[0039] 為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使 用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于 本領(lǐng)域技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可w根據(jù)送些附圖獲得其他的附 圖。
[0040] 圖1是本發(fā)明實(shí)施例中總線虛擬化的方法的一實(shí)施例示意圖;
[0041] 圖2是本發(fā)明實(shí)施例中總線虛擬化的方法的另一實(shí)施例示意圖;
[0042] 圖3是本發(fā)明實(shí)施例中總線虛擬化的方法的另一實(shí)施例示意圖;
[0043] 圖4是本發(fā)明實(shí)施例中總線虛擬化的方法的另一實(shí)施例示意圖;
[0044] 圖5是本發(fā)明實(shí)施例中總線虛擬化的方法的另一實(shí)施例示意圖;
[0045] 圖6是本發(fā)明實(shí)施例中總線的根復(fù)合體裝置的一實(shí)施例示意圖;
[0046] 圖7是本發(fā)明實(shí)施例中總線的根復(fù)合體裝置的另一實(shí)施例示意圖;
[0047] 圖8是本發(fā)明實(shí)施例中總線的根復(fù)合體裝置的另一實(shí)施例示意圖;
[0048] 圖9是本發(fā)明實(shí)施例中總線的根復(fù)合體裝置的另一實(shí)施例示意圖;
[0049] 圖10是本發(fā)明實(shí)施例中總線虛擬化的系統(tǒng)的一實(shí)施例示意圖。
【具體實(shí)施方式】
[0050] 本發(fā)明實(shí)施例提供一種總線虛擬化的方法,可W確保每個(gè)處理器內(nèi)核在訪問總線 設(shè)備時(shí),可W使用獨(dú)立的一個(gè)配置寄存器對(duì),從而可W保證處理器內(nèi)核對(duì)總線設(shè)備訪問正 確性。本發(fā)明實(shí)施例還提供了相應(yīng)的裝置及系統(tǒng)。W下分別進(jìn)行詳細(xì)說(shuō)明。
[0051] 下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于 本發(fā)明中的實(shí)施例,本領(lǐng)域技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施 例,都屬于本發(fā)明保護(hù)的范圍。
[0052] 本發(fā)明實(shí)施例提供的總線虛擬化的方法的一實(shí)施例包括:
[0053] 本發(fā)明實(shí)施例是W-個(gè)計(jì)算節(jié)點(diǎn)為例進(jìn)行說(shuō)明的,實(shí)際上,本發(fā)明實(shí)施例提供的 總線虛擬化適用于每個(gè)計(jì)算節(jié)點(diǎn)。
[0054] 在對(duì)稱多處理結(jié)構(gòu)(SymmetricMulti-Processing,SMP)體系下,系統(tǒng)中可W運(yùn)行 一個(gè)多內(nèi)核操作系統(tǒng),該多內(nèi)核操作系統(tǒng)可由多個(gè)負(fù)載操作系統(tǒng)組成,一個(gè)負(fù)載操作系統(tǒng) 運(yùn)行與一個(gè)或多個(gè)處理器內(nèi)核之上。
[0055] 計(jì)算節(jié)點(diǎn)內(nèi)的處理器內(nèi)核通過總線的根復(fù)合體(RC,RootComplex)控制外接的總 線設(shè)備,本發(fā)明實(shí)施例中的總線設(shè)備可W為控制器、顯卡等可W連接在總線上的設(shè)備。
[0056] 本發(fā)明實(shí)施例提供的總線虛擬化的方法,所述總線的根復(fù)合體RC中包括多個(gè)配 置寄存器對(duì),且每個(gè)配置寄存器對(duì)包括一個(gè)地址寄存器和一個(gè)數(shù)據(jù)寄存器,例如:地址寄存 器0CF化,描述地址,數(shù)據(jù)寄存器OCFFh,描述數(shù)據(jù)。
[0057] 每個(gè)處理器內(nèi)核中都有一個(gè)總線代理裝置,處理器內(nèi)核通過總線代理裝置處理總 線事務(wù)。
[0058] 在處理總線事務(wù)時(shí),總線代理裝置將總線事務(wù)消息發(fā)送到RC中,總線事務(wù)消息中 包含本次總線事務(wù)的標(biāo)識(shí),本次總線事務(wù)的標(biāo)識(shí)可W為處理器內(nèi)核的標(biāo)識(shí)、例如:假設(shè)中央 處理器(CentralProcessing化it,CPU)為單核時(shí),貝Ij一個(gè)處理器內(nèi)核為一個(gè)CPU,則處理 器內(nèi)核的標(biāo)識(shí)為中央處理器的標(biāo)識(shí)(CPUID,Identification),當(dāng)然,CPU可W是多核的,本 發(fā)明實(shí)施例中只是舉例說(shuō)明,并不限定CPU的核數(shù)。在單體操作系統(tǒng)中,本次總線事務(wù)的標(biāo) 識(shí)還可w是進(jìn)程組的標(biāo)識(shí)或其他分組信息。在多內(nèi)核操作系統(tǒng)中,本次總線事務(wù)的標(biāo)識(shí)還 可W是一個(gè)負(fù)載操作系統(tǒng)的標(biāo)識(shí)或者是多個(gè)負(fù)載操作系統(tǒng)構(gòu)成的分區(qū)的區(qū)域標(biāo)識(shí)。本發(fā)明 實(shí)施例中W本次總線事務(wù)的標(biāo)識(shí)是CPUID為例進(jìn)行說(shuō)明,實(shí)際上,并不限定是CPUID。
[0059] 所述RC接收處理器內(nèi)核中的總線代理裝置發(fā)出的總線事務(wù)消息,所述RC從所述 多個(gè)配置寄存器對(duì)中,確定所述本次總線事務(wù)的標(biāo)識(shí)對(duì)應(yīng)的所述處理器內(nèi)核應(yīng)使用的配置 寄存器對(duì)可W有多種方法,本發(fā)明W兩種方法為例進(jìn)行說(shuō)明:
[0060] 第一種方法是;為每個(gè)處理器內(nèi)核預(yù)先配置好一個(gè)配置寄存器對(duì),當(dāng)CPU為單核 時(shí),就可W為每個(gè)CPU預(yù)先配置好一個(gè)配置寄存器對(duì)。送樣,在RC通過總線事務(wù)消息獲知 本次總線事務(wù)的標(biāo)識(shí)為CPUID時(shí),就可W根據(jù)該CPUID,到CPUID與配置寄存器對(duì)的關(guān)聯(lián) 關(guān)系中,確定該CPUID所對(duì)應(yīng)的配置寄存器對(duì)。
[0061] CPUID與配置寄存器對(duì)的關(guān)聯(lián)關(guān)系可W通過表格的形式來(lái)展示,例如:如表1所 示:
[0062] 表1;CPUID與配置寄存器對(duì)的關(guān)聯(lián)關(guān)系表
[0063]
[0064] 送樣,當(dāng)CPUID為CPUID;0時(shí),就可W確定對(duì)應(yīng)的配置寄存器對(duì)為地址寄存器0 和數(shù)據(jù)寄存器0。
[0065] 本發(fā)明實(shí)施例中的具體過程,可W參閱圖1進(jìn)行理解;如圖1所示,
[0066] RootComplex中CAM-1表示一個(gè)CPU將使用的配置寄存器對(duì),CAM-2表示另一個(gè) CPU將使用的配置寄存器對(duì)。圖1中只畫出了送兩個(gè)配置寄存器對(duì),實(shí)際上可W有很多個(gè), 圖1并不對(duì)本發(fā)明實(shí)施例的配置寄存器對(duì)的個(gè)數(shù)造成限定。
[0067] CPU的總線代理裝置通過主橋(HostBridge)與RC通信,RC上外接有總線設(shè)備 PCIEbridgel和PCIEbridges。
[006引本發(fā)明實(shí)施例中,WCPU2的總線事務(wù)過程為例進(jìn)行說(shuō)明:在總線事務(wù)中,CPU2通 過總線代理裝置腳Sagent2向RC發(fā)送總線事務(wù)消息,所述總線事務(wù)消息中包含CPU2的標(biāo) 識(shí),CPUID;2。例如;總線事務(wù)請(qǐng)求階段的消息(FSBrequest地ase)。
[0069] RC根據(jù)CPUID;2到對(duì)應(yīng)的CPUID與配置寄存器對(duì)的關(guān)聯(lián)關(guān)系表中查找到對(duì)應(yīng)的 配置寄存器對(duì)為地址寄存器2和數(shù)據(jù)寄存器2。
[0070] 第二種方法是;當(dāng)配置寄存器對(duì)的數(shù)量少于處理器內(nèi)核的數(shù)量時(shí),可W不預(yù)先設(shè) 置CPUID與配置寄存器對(duì)的對(duì)應(yīng)關(guān)系,而是,從配置寄存器對(duì)中找到處于空閑狀態(tài)的配置 寄存器對(duì),然后將該處于空閑狀態(tài)的配置寄存器對(duì)配置給該CPU。
[0071] 在配置寄存器對(duì)中添加一個(gè)"Busy"字段,用來(lái)表示當(dāng)前配置寄存器對(duì)的狀態(tài)。在 CPU讀寫配置寄存器時(shí),會(huì)先對(duì)地址寄存器進(jìn)行寫操作,然后對(duì)數(shù)據(jù)寄存器進(jìn)行讀寫操作。 在地址寄存器被寫之后,相應(yīng)的Busy字段會(huì)被RC置為1,表示配置過程沒有完成。在數(shù)據(jù) 寄存器被讀或?qū)懼?,相?yīng)的busy字段會(huì)被RC置為0,表示一次配置過程完成。
[0072] 當(dāng)RC通過CPUID索引不到對(duì)應(yīng)的配置寄存器對(duì)時(shí),RC將一次查找配置寄存器組 中Busy字段為0的配置寄存器對(duì)。如果發(fā)現(xiàn)有busy字段為0的配置寄存器對(duì),RC將其CPU ID修改為當(dāng)前總線事務(wù)消息中包含的CPUID的值,例如;CPUID;0,并將busy字段置為1。 如果沒有busy為0的字段,則向相應(yīng)的CPU報(bào)告異常事件。
[0073] 第二種方法用表格的形式來(lái)展示可W如表2所示:
[0074] 表2 ;狀態(tài)查詢表
[00巧]
[0076]
[0077] 如表2所示,當(dāng)RC查找表2確定只有第H行的CPUID;2處于空閑狀態(tài),則可W將 CPUID;2修改為CPUID;0,然后將狀態(tài)位的0修改為1。修改后的表格如表3所示:
[0078] 表3;修改后的狀態(tài)查詢表
[0079]
[0080] 送樣,就可W將地址寄存器2和數(shù)據(jù)寄存器2提供給CPUID;0對(duì)應(yīng)的CPU使用。
[0081] 如圖2所示,圖2所示的情況是未預(yù)先建立CPU與配置寄存器對(duì)之間的對(duì)應(yīng)關(guān)系, 而是根據(jù)狀態(tài)位是否繁忙來(lái)為CPU尋找配置寄存器對(duì),其他過程已通過表2和表3中的內(nèi) 容進(jìn)行了介紹,在此不再做過多賞述。
[0082] 本發(fā)明實(shí)施例中,為了保證總線虛擬化的效果,還提出了使用"一種節(jié)點(diǎn)內(nèi)安全分 區(qū)"的方法,用來(lái)配置各CPU對(duì)總線設(shè)備的配置、訪問權(quán)限。
[0083] 當(dāng)所述總線事務(wù)消息中還包含事務(wù)類型的索引信息時(shí),所述RC從所述多個(gè)配置 寄存器對(duì)中,確定所述本次總線事務(wù)的標(biāo)識(shí)對(duì)應(yīng)的所述處理器內(nèi)核應(yīng)使用的配置寄存器對(duì) 之后,所述方法還可w包括:
[0084] 根據(jù)所述事務(wù)類