專(zhuān)利名稱(chēng):基于PCI/PCIe總線(xiàn)多CPU系統(tǒng)啟動(dòng)方法及模塊的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及自動(dòng)控制領(lǐng)域,特別涉及一種基于PCI/PCIe總線(xiàn)多CPU系統(tǒng)啟動(dòng)方法 及模塊。
背景技術(shù):
PCI (外部設(shè)備互連總線(xiàn))總線(xiàn)或PCIe (PCI Express,高速外部設(shè)備互連總線(xiàn))上 可以連接好多設(shè)備,通常,在同一段總線(xiàn)內(nèi)最多可接255個(gè)設(shè)備,每種設(shè)備最多只能有8個(gè) 功能,不同的PCI總線(xiàn)之間的互連通過(guò)PCI to PCI橋接芯片實(shí)現(xiàn)。因此每個(gè)設(shè)備都有BUS 號(hào)(總線(xiàn)號(hào)),DEV號(hào)(設(shè)備號(hào)),及FUNC號(hào)(功能號(hào)),一般而言,每個(gè)設(shè)備只有1個(gè)功能, 即只有FUNC0。目前,大型系統(tǒng)中常常會(huì)由幾百甚至上千個(gè)CPU組成,如何讓這些CPU全部盡快的 進(jìn)入工作狀態(tài),大大關(guān)系到整個(gè)系統(tǒng)的性能?,F(xiàn)有的啟動(dòng)方法依靠在主控CPU上啟用多線(xiàn) 程的方法去初始化系統(tǒng)中的所有CPU,其中,主控CPU針對(duì)每個(gè)從CPU都啟動(dòng)一個(gè)線(xiàn)程,在各 個(gè)線(xiàn)程中下載啟動(dòng)對(duì)應(yīng)從CPU初始化所必須的二進(jìn)制文件。在實(shí)施本發(fā)明過(guò)程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下問(wèn)題現(xiàn)有多線(xiàn)程啟 動(dòng)方法中,因?yàn)橹骺谻PU的指令是一條一條順序執(zhí)行的,多線(xiàn)程在主控CPU上其實(shí)也是串行 的。也就是說(shuō),雖然在宏觀(guān)上看起來(lái)是多個(gè)線(xiàn)程是并行的,但是在微觀(guān)上看仍然是串行的。 因此這樣僅靠主控CPU來(lái)承擔(dān)整個(gè)系統(tǒng)的初始化任務(wù)會(huì)影響到整個(gè)系統(tǒng)的性能。
發(fā)明內(nèi)容
為解決上述技術(shù)問(wèn)題,本發(fā)明提供一種基于PCI/PCIe總線(xiàn)多CPU系統(tǒng)啟動(dòng)方法及 模塊。本發(fā)明提供一種基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)方法,預(yù)先建立包括各從 CPU初始化信息、所在PCI空間的基址和PCI拓?fù)湮恢?、及狀態(tài)信息的數(shù)據(jù)結(jié)構(gòu),并在每條總 線(xiàn)上選定至少一個(gè)從CPU作為該總線(xiàn)的組長(zhǎng)CPU,所述方法包括主CPU將數(shù)據(jù)結(jié)構(gòu)加載到自身內(nèi)存,并將自身內(nèi)存映射到PCI空間;主CPU加載所述數(shù)據(jù)結(jié)構(gòu)至各總線(xiàn)的組長(zhǎng)CPU ;各總線(xiàn)的組長(zhǎng)CPU在接收到所述 數(shù)據(jù)結(jié)構(gòu)后,依據(jù)所述數(shù)據(jù)結(jié)構(gòu)中本CPU的初始化信息啟動(dòng)初始化,并在初始化成功后通 知主CPU更新本CPU的狀態(tài)信息;各總線(xiàn)上,完成初始化的組長(zhǎng)CPU在主CPU的控制下,加載所述數(shù)據(jù)結(jié)構(gòu)至本總線(xiàn) 上其它從CPU ;其它從CPU在接收到所述數(shù)據(jù)結(jié)構(gòu)后,依據(jù)所述數(shù)據(jù)結(jié)構(gòu)中本CPU的初始化 信息啟動(dòng)初始化,并在初始化成功后通知主CPU更新本CPU的狀態(tài)信息;至全部CPU均初始 化成功,完成所述系統(tǒng)的啟動(dòng)。所述方法還包括主CPU初始化系統(tǒng)中其它從CPU,具體為主CPU查找數(shù)據(jù)結(jié)構(gòu)中的狀態(tài)信息,選出一個(gè)待初始化CPU,加載數(shù)據(jù)結(jié)構(gòu)至該待初始化CPU ;該待初始化CPU在接收到所述數(shù)據(jù)結(jié)構(gòu)后,依據(jù)所述數(shù)據(jù)結(jié)構(gòu)中本CPU的初始 化信息啟動(dòng)初始化,并在初始化成功后通知主CPU更新本CPU的狀態(tài)信息。其它從CPU在初始化成功后,還包括初始化成功的從CPU獲取主CPU賦予其初始化其所在總線(xiàn)上其它從CPU的權(quán)利, 并在主CPU的控制下,按照組長(zhǎng)CPU初始化其它從CPU的步驟初始化其所在總線(xiàn)上的其它 從 CPU。完成初始化的組長(zhǎng)CPU或初始化成功的從CPU在主CPU的控制下,加載所述數(shù)據(jù) 結(jié)構(gòu)至本總線(xiàn)上其它從CPU具體為完成初始化的組長(zhǎng)CPU或初始化成功的從CPU作為請(qǐng)求CPU向主CPU發(fā)出請(qǐng)求,主 CPU查找所述數(shù)據(jù)結(jié)構(gòu),根據(jù)請(qǐng)求CPU的PCI空間的基址和PCI拓?fù)湮恢?,選出該請(qǐng)求CPU 所在總線(xiàn)上的一個(gè)待初始化CPU,判斷該待初始化CPU是否已經(jīng)被其它CPU請(qǐng)求,是則重新 選擇一個(gè)待初始化CPU再次執(zhí)行上述判斷步驟,否則將該待初始化CPU作為被請(qǐng)求CPU,賦 予該請(qǐng)求CPU初始化該被請(qǐng)求CPU的權(quán)利;請(qǐng)求CPU加載所述數(shù)據(jù)結(jié)構(gòu)至被請(qǐng)求CPU后,繼 續(xù)向主CPU發(fā)出請(qǐng)求。主CPU與各從CPU之間的通訊通過(guò)PCI內(nèi)存讀寫(xiě)及PCI中斷實(shí)現(xiàn),所述通訊格式 為共享緩沖格式,且保證主CPU與各從CPU的緩沖區(qū)不重疊。所述主CPU將自身內(nèi)存映射到PCI空間具體為通過(guò)設(shè)置主CPU的用于映射到PCI 空間的寄存器中相關(guān)參數(shù),將自身內(nèi)存映射到PCI空間。在每條總線(xiàn)上選定設(shè)備號(hào)為0的從CPU作為該總線(xiàn)的組長(zhǎng)CPU。本發(fā)明還提供了一種基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)模塊,包括數(shù)據(jù)結(jié)構(gòu)建立單元,用于建立包括各從CPU初始化信息、所在PCI空間的基址和 PCI拓?fù)湮恢?、及狀態(tài)信息的數(shù)據(jù)結(jié)構(gòu);組長(zhǎng)CPU選定單元,用于在每條總線(xiàn)上選定至少一個(gè)從CPU作為該總線(xiàn)的組長(zhǎng) CPU ;主CPU初始化單元,用于主CPU將數(shù)據(jù)結(jié)構(gòu)加載到自身內(nèi)存,并將自身內(nèi)存映射到 PCI空間;組長(zhǎng)CPU初始化單元,用于主CPU加載所述數(shù)據(jù)結(jié)構(gòu)至各總線(xiàn)的組長(zhǎng)CPU ;各總線(xiàn) 的組長(zhǎng)CPU在接收到所述數(shù)據(jù)結(jié)構(gòu)后,依據(jù)所述數(shù)據(jù)結(jié)構(gòu)中本CPU的初始化信息啟動(dòng)初始 化,并在初始化成功后通知主CPU更新本CPU的狀態(tài)信息;其它從CPU初始化單元,用于各總線(xiàn)上,完成初始化的組長(zhǎng)CPU在主CPU的控制 下,加載所述數(shù)據(jù)結(jié)構(gòu)至本總線(xiàn)上其它從CPU ;其它從CPU在接收到所述數(shù)據(jù)結(jié)構(gòu)后,依據(jù) 所述數(shù)據(jù)結(jié)構(gòu)中本CPU的初始化信息啟動(dòng)初始化,并在初始化成功后通知主CPU更新本CPU 的狀態(tài)信息;至全部CPU均初始化成功,完成所述系統(tǒng)的啟動(dòng)。所述其它從CPU初始化單元還包括主CPU選擇初始化子單元,用于主CPU初始化 系統(tǒng)中其它從CPU,具體用于主CPU查找數(shù)據(jù)結(jié)構(gòu)中的狀態(tài)信息,選出一個(gè)待初始化CPU,加載數(shù)據(jù)結(jié)構(gòu)至該待 初始化CPU ;該待初始化CPU在接收到所述數(shù)據(jù)結(jié)構(gòu)后,依據(jù)所述數(shù)據(jù)結(jié)構(gòu)中本CPU的初始 化信息啟動(dòng)初始化,并在初始化成功后通知主CPU更新本CPU的狀態(tài)信息。所述其它從CPU初始化單元還包括賦權(quán)子單元,用于其它從CPU在初始化成功后,初始化成功的從CPU獲取主CPU賦予其初始化其所在總線(xiàn)上其它從CPU的權(quán)利,并在主CPU 的控制下,按照組長(zhǎng)CPU初始化其它從CPU的步驟初始化其所在總線(xiàn)上的其它從CPU。所述其它 從CPU初始化單元中,完成初始化的組長(zhǎng)CPU或初始化成功的從CPU在 主CPU的控制下,加載所述數(shù)據(jù)結(jié)構(gòu)至本總線(xiàn)上其它從CPU具體為完成初始化的組長(zhǎng)CPU或初始化成功的從CPU作為請(qǐng)求CPU向主CPU發(fā)出請(qǐng)求,主 CPU查找所述數(shù)據(jù)結(jié)構(gòu),根據(jù)請(qǐng)求CPU的PCI空間的基址和PCI拓?fù)湮恢?,選出該請(qǐng)求CPU 所在總線(xiàn)上的一個(gè)待初始化CPU,判斷該待初始化CPU是否已經(jīng)被其它CPU請(qǐng)求,是則重新 選擇一個(gè)待初始化CPU再次執(zhí)行上述判斷步驟,否則將該待初始化CPU作為被請(qǐng)求CPU ;賦 予該請(qǐng)求CPU初始化該被請(qǐng)求CPU的權(quán)利;請(qǐng)求CPU加載所述數(shù)據(jù)結(jié)構(gòu)至被請(qǐng)求CPU后,繼 續(xù)向主CPU發(fā)出請(qǐng)求。主CPU與各從CPU之間的通訊通過(guò)PCI內(nèi)存讀寫(xiě)及PCI中斷實(shí)現(xiàn),所述通訊格式 為共享緩沖格式,且保證主CPU與各從CPU的緩沖區(qū)不重疊。所述主CPU初始化單元中,主CPU將自身內(nèi)存映射到PCI空間具體為通過(guò)設(shè)置主 CPU的用于映射到PCI空間的寄存器中相關(guān)參數(shù),將自身內(nèi)存映射到PCI空間。所述組長(zhǎng)CPU選定單元具體用于在每條總線(xiàn)上選定設(shè)備號(hào)為0的從CPU作為該總 線(xiàn)的組長(zhǎng)CPU。本發(fā)明提供的一種基于PCI/PCIe總線(xiàn)多CPU系統(tǒng)啟動(dòng)方法及模塊,有益效果是本發(fā)明運(yùn)用主CPU、各組長(zhǎng)CPU等多CPU并行工作的方式,充分發(fā)揮了多CPU并行 運(yùn)行的效率,多CPU同時(shí)啟動(dòng),分?jǐn)傊骺谻PU的重任,這樣可以大大提高整個(gè)系統(tǒng)的初始化 速度,從而大大提高了系統(tǒng)啟動(dòng)速度;而且不用增加新的硬件,節(jié)省了成本。
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本 發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實(shí)施例一提供的一種基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)方法流 程圖;圖2為本發(fā)明實(shí)施例一中在主CPU的控制下,加載數(shù)據(jù)結(jié)構(gòu)至本總線(xiàn)上其它從CPU 方法流程圖;圖3為本發(fā)明實(shí)施例二提供的一種優(yōu)選的基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng) 方法流程圖;圖4為本發(fā)明實(shí)施例二中主CPU工作流程圖;圖5為本發(fā)明實(shí)施例三提供的一種基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)模塊框 圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他 實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方 式作進(jìn)一步地詳細(xì)描述。實(shí)施例一參見(jiàn)圖1,為本發(fā)明實(shí)施例提供的一種基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)方 法步驟S101 預(yù)先建立包括各從CPU初始化信息、所在PCI空間的基址和PCI拓?fù)湮?置、及狀態(tài)信息的數(shù)據(jù)結(jié)構(gòu),并在每條總線(xiàn)上選定至少一個(gè)從CPU作為該總線(xiàn)的組長(zhǎng)CPU。通常,預(yù)先建立的數(shù)據(jù)結(jié)構(gòu)存放在主CPU的FLASH中。其中,在每條總線(xiàn)上選定至少一個(gè)從CPU作為該總線(xiàn)的組長(zhǎng)CPU,優(yōu)選的可以是, 在每條總線(xiàn)上選定設(shè)備號(hào)為0的從CPU,即CPU(BUSn,DEV0)作為該總線(xiàn)的組長(zhǎng)CPU。該多CPU系統(tǒng)啟動(dòng)的方法包括如下步驟步驟S102 主CPU將數(shù)據(jù)結(jié)構(gòu)加載到自身內(nèi)存,并將自身內(nèi)存映射到PCI空間。這里,主CPU自己?jiǎn)?dòng)后,把存在FLASH中的數(shù)據(jù)結(jié)構(gòu)加載到自身內(nèi)存中,本領(lǐng)域 技術(shù)人員都知道,主CPU自己?jiǎn)?dòng)時(shí),通常還包括將啟動(dòng)程序以及應(yīng)用程序二進(jìn)制文件等 一并加載到自身內(nèi)存中;并且把主CPU的內(nèi)存映射到PCI的空間,CPU有PCI接口的話(huà),一 般都有把自己內(nèi)存映射到PCI空間的寄存器,所謂映射,就是配置這些寄存器的相關(guān)參數(shù), 這樣,可以使得PCI系統(tǒng)中其它CPU可以訪(fǎng)問(wèn)到主控CPU的內(nèi)存空間。其中,數(shù)據(jù)結(jié)構(gòu)中通常包括各從CPU初始化信息、所在PCI空間的基址和PCI拓?fù)?位置、及狀態(tài)信息等,優(yōu)選的,可以采用表1所示形式建立數(shù)據(jù)結(jié)構(gòu)表 1 其中,從CPU所在PCI空間的基址和PCI拓?fù)湮恢?,用于定位該從CPU在整個(gè)系統(tǒng)中的位置;從CPU狀態(tài)信息用于標(biāo)識(shí)該CPU是否初始化,當(dāng)然,實(shí)際應(yīng)用中,從CPU狀態(tài)信 息可以用于標(biāo)識(shí)該CPU各種狀態(tài)的匯總,不僅包含是否初始化,還包含其他必須的信息。從 CPU的初始化信息為該CPU進(jìn)行初始化的相關(guān)信息,也就是說(shuō),CPU可以利用自己對(duì)應(yīng)的初 始化信息進(jìn)行初始化。步驟S103 主CPU加載所述數(shù)據(jù)結(jié)構(gòu)至各總線(xiàn)的組長(zhǎng)CPU ;各總線(xiàn)的組長(zhǎng)CPU在接 收到所述數(shù)據(jù)結(jié)構(gòu)后,依據(jù)所述數(shù)據(jù)結(jié)構(gòu)中本CPU的初始化信息啟動(dòng)初始化,并在初始化 成功后通知主CPU更新本CPU的狀態(tài)信息。通常,CPU的PCI拓?fù)湮恢每捎?BUSn,DEVn) 一個(gè)二元組來(lái)定義,BUSn表示位于 第η條總線(xiàn)上,DEVn表示第η個(gè)設(shè)備。記作CPU(BUSn,DEVn)。一般的系統(tǒng)構(gòu)架會(huì)把主CPU放在BUSO上,所以一般有HOST CPU = CPU(BUS0, DEVO)。以CPU (BUSn,DEVO)作為該總線(xiàn)的組長(zhǎng)CPU,則在PCI通訊的基礎(chǔ)上就可以實(shí)現(xiàn)本 發(fā)明實(shí)施例提供的快速啟動(dòng)了。首先由主CPU把數(shù)據(jù)結(jié)構(gòu)加載到CPU(BUS1,DEV0),然后不 用等CPU(BUS1,DEVO)初始化完成,主CPU繼續(xù)加載數(shù)據(jù)結(jié)構(gòu)到CPU (BUS2,DEVO)。這樣每 個(gè)BUS的DEVO位置的CPU都在差不多同一時(shí)間初始化。這里要注意的是組長(zhǎng)CPU初始化 完成后不用等待其它組長(zhǎng)CPU,直接執(zhí)行下述步驟S104。步驟S104 各總線(xiàn)上,完成初始化的組長(zhǎng)CPU在主CPU的控制下,加載所述數(shù)據(jù)結(jié) 構(gòu)至本總線(xiàn)上其它從CPU ;其它從CPU在接收到所述數(shù)據(jù)結(jié)構(gòu)后,依據(jù)所述數(shù)據(jù)結(jié)構(gòu)中本 CPU的初始化信息啟動(dòng)初始化,并在初始化成功后通知主CPU更新本CPU的狀態(tài)信息;至全 部CPU均初始化成功,完成所述系統(tǒng)的啟動(dòng)。參見(jiàn)圖2,本發(fā)明實(shí)施例中,完成初始化的組長(zhǎng)CPU在主CPU的控制下,加載數(shù)據(jù)結(jié) 構(gòu)至本總線(xiàn)上其它從CPU,具體包括如下子步驟這里,完成初始化的組長(zhǎng)CPU為請(qǐng)求CPU。步驟S201 請(qǐng)求CPU向主CPU發(fā)出請(qǐng)求。步驟S202 主CPU查找數(shù)據(jù)結(jié)構(gòu),根據(jù)請(qǐng)求CPU的PCI空間的基址和PCI拓?fù)湮?置,選出該請(qǐng)求CPU所在總線(xiàn)上的一個(gè)待初始化CPU。步驟S203 主CPU判斷該待初始化CPU是否已經(jīng)被其它CPU請(qǐng)求,是則執(zhí)行步驟 S204,否則執(zhí)行步驟S205。S204 重新選擇一個(gè)待初始化CPU,執(zhí)行步驟S203的判斷步驟。
S205 將該待初始化CPU作為被請(qǐng)求CPU,賦予該請(qǐng)求CPU初始化該被請(qǐng)求CPU的 權(quán)利;請(qǐng)求CPU加載所述數(shù)據(jù)結(jié)構(gòu)至被請(qǐng)求CPU后,繼續(xù)向主CPU發(fā)出請(qǐng)求。其中,主CPU與各從CPU之間的通訊通過(guò)PCI內(nèi)存讀寫(xiě)及PCI中斷實(shí)現(xiàn),所述通訊 格式為共享緩沖格式,且保證主CPU與各從CPU的緩沖區(qū)不重疊。以保證CPU之間互傳信 息不會(huì)互相覆蓋,所以必須每個(gè)CPU —個(gè)緩沖區(qū)。這里的通訊指的是從CPU和主CPU之間 的通訊,從CPU間不能通訊。表2是主CPU上建立的通訊數(shù)據(jù)結(jié)構(gòu)表 2 可見(jiàn),本發(fā)明實(shí)施例提供的基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)方法,運(yùn)用主 CPU、各組長(zhǎng)CPU等多CPU并行工作的方式,充分發(fā)揮了多CPU并行運(yùn)行的效率,多CPU同時(shí) 啟動(dòng),分?jǐn)傊骺谻PU的重任,這樣可以大大提高整個(gè)系統(tǒng)的初始化速度,從而大大提高了系 統(tǒng)啟動(dòng)速度,時(shí)間復(fù)雜度幾乎是0(log2N),比傳統(tǒng)的方式的時(shí)間復(fù)雜度0(N)要高效的多; 而且不用增加新的硬件,節(jié)省了成本。實(shí)施例二參見(jiàn)圖3,為本發(fā)明實(shí)施例提供的一種優(yōu)選的基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟 動(dòng)方法步驟S301 預(yù)先建立包括各從CPU初始化信息、所在PCI空間的基址和PCI拓?fù)湮?置、及狀態(tài)信息的數(shù)據(jù)結(jié)構(gòu),并在每條總線(xiàn)上選定至少一個(gè)從CPU作為該總線(xiàn)的組長(zhǎng)CPU。通常,預(yù)先建立的數(shù)據(jù)結(jié)構(gòu)存放在主CPU的FLASH中。其中,在每條總線(xiàn)上選定至少一個(gè)從CPU作為該總線(xiàn)的組長(zhǎng)CPU,優(yōu)選的可以是, 在每條總線(xiàn)上選定設(shè)備號(hào)為0的從CPU,即CPU(BUSn,DEV0)作為該總線(xiàn)的組長(zhǎng)CPU。該多CPU系統(tǒng)啟動(dòng)的方法包括如下步驟步驟S302 主CPU將數(shù)據(jù)結(jié)構(gòu)加載到自身內(nèi)存,并將自身內(nèi)存映射到PCI空間。這里,主CPU自己?jiǎn)?dòng)后,把存在FLASH中的數(shù)據(jù)結(jié)構(gòu)加載到自身內(nèi)存中,本領(lǐng)域 技術(shù)人員都知道,主CPU自己?jiǎn)?dòng)時(shí),通常還包括將啟動(dòng)程序以及應(yīng)用程序二進(jìn)制文件等 一并加載到自身內(nèi)存中;并且把主CPU的內(nèi)存映射到PCI的空間,CPU有PCI接口的話(huà),一般都有把自己內(nèi)存映射到PCI空間的寄存器,所謂映射,就是配置這些寄存器的相關(guān)參數(shù), 這樣,可以使得PCI系統(tǒng)中其它CPU可以訪(fǎng)問(wèn)到主控CPU的內(nèi)存空間。
其中,數(shù)據(jù)結(jié)構(gòu)中通常包括各從CPU初始化信息、所在PCI空間的基址和PCI拓?fù)?位置、及狀態(tài)信息等,優(yōu)選的,可以采用上述表1所示形式建立數(shù)據(jù)結(jié)構(gòu)。從CPU所在PCI空間的基址和PCI拓?fù)湮恢?,用于定位該從CPU在整個(gè)系統(tǒng)中的 位置;從CPU狀態(tài)信息用于標(biāo)識(shí)該CPU是否初始化,當(dāng)然,實(shí)際應(yīng)用中,從CPU狀態(tài)信息可以 用于標(biāo)識(shí)該CPU各種狀態(tài)的匯總,不僅包含是否初始化,還包含其他必須的信息。從CPU的 初始化信息為該CPU進(jìn)行初始化的相關(guān)信息,也就是說(shuō),CPU可以利用自己對(duì)應(yīng)的初始化信 息進(jìn)行初始化。步驟S303 主CPU加載所述數(shù)據(jù)結(jié)構(gòu)至各總線(xiàn)的組長(zhǎng)CPU ;各總線(xiàn)的組長(zhǎng)CPU在接 收到所述數(shù)據(jù)結(jié)構(gòu)后,依據(jù)所述數(shù)據(jù)結(jié)構(gòu)中本CPU的初始化信息啟動(dòng)初始化,并在初始化 成功后通知主CPU更新本CPU的狀態(tài)信息。通常,CPU的PCI拓?fù)湮恢每捎?BUSn,DEVn) 一個(gè)二元組來(lái)定義,BUSn表示位于 第η條總線(xiàn)上,DEVn表示第η個(gè)設(shè)備。記作CPU(BUSn,DEVn)。一般的系統(tǒng)構(gòu)架會(huì)把主CPU放在BUSO上,所以一般有HOST CPU = CPU (BUS0, DEVO)。以CPU (BUSn,DEVO)作為該總線(xiàn)的組長(zhǎng)CPU,則在PCI通訊的基礎(chǔ)上就可以實(shí)現(xiàn)本 發(fā)明實(shí)施例提供的快速啟動(dòng)了。首先由主CPU把數(shù)據(jù)結(jié)構(gòu)加載到CPU(BUS1,DEV0),然后不 用等CPU(BUS1,DEVO)初始化完成,主CPU繼續(xù)加載數(shù)據(jù)結(jié)構(gòu)到CPU (BUS2,DEVO)。這樣每 個(gè)BUS的DEVO位置的CPU都在差不多同一時(shí)間初始化。這里要注意的是組長(zhǎng)CPU初始化 完成后不用等待其它組長(zhǎng)CPU,直接執(zhí)行下述步驟S104。步驟S304 各總線(xiàn)上,完成初始化的組長(zhǎng)CPU在主CPU的控制下,加載所述數(shù)據(jù)結(jié) 構(gòu)至本總線(xiàn)上其它從CPU ;其它從CPU在接收到所述數(shù)據(jù)結(jié)構(gòu)后,依據(jù)所述數(shù)據(jù)結(jié)構(gòu)中本 CPU的初始化信息啟動(dòng)初始化,并在初始化成功后通知主CPU更新本CPU的狀態(tài)信息。步驟S305 其它從CPU在初始化成功后,該從CPU獲取主CPU賦予其初始化其所 在總線(xiàn)上其它從CPU的權(quán)利,并在主CPU的控制下,按照組長(zhǎng)CPU初始化其它從CPU的步驟 初始化其所在總線(xiàn)上的其它從CPU。并且,主CPU也同時(shí)在系統(tǒng)中選擇其它從CPU進(jìn)行初始 化。至全部CPU均初始化成功,完成所述系統(tǒng)的啟動(dòng)。其中,主CPU初始化系統(tǒng)中其它從CPU的步驟具體為主CPU查找數(shù)據(jù)結(jié)構(gòu)中的狀 態(tài)信息,選出一個(gè)待初始化CPU,加載數(shù)據(jù)結(jié)構(gòu)至該待初始化CPU ;該待初始化CPU在接收到 所述數(shù)據(jù)結(jié)構(gòu)后,依據(jù)所述數(shù)據(jù)結(jié)構(gòu)中本CPU的初始化信息啟動(dòng)初始化,并在初始化成功 后通知主CPU更新本CPU的狀態(tài)信息。在HOST CPU (主CPU,這里假設(shè)其設(shè)置在BUSO上)初始化完所有的組長(zhǎng)CPU即 CPU(BUSn,DEV0)后,其中n= 1 bus max,則優(yōu)選的,可以定義三種CPU類(lèi)型1. HOST CPU ; 2.所有已經(jīng)被初始化的從CPU (BUSn,DEVm) η ! = 0 ;3.沒(méi)有被初始化的CPU。同一時(shí)刻由上面定義的前兩類(lèi)CPU來(lái)初始化其余未被初始化的CPU。CPU (BUSn, DEVO)負(fù)責(zé)初始化BUSn中的CPU,一旦CPU (BUSn, DEVm)被初始化成功,這個(gè)CPU就加入到第 2種的CPU類(lèi)型中,可以從主CPU獲取初始化屬于同一總線(xiàn)上其他剩下CPU的權(quán)利。例如 CPU (BUS1,DEVI)已經(jīng)被 CPU (BUS1,DEV0)初始化完成,則 CPU (BUS1,DEVI)就和 CPU (BUS1,DEV0) 一起初始化本總線(xiàn)內(nèi)剩下未初始化的CPU。這里有幾個(gè)地方要注意的系統(tǒng)中各個(gè) CPU的PCI地址已經(jīng)通過(guò)HOST CPU初始化自身的時(shí)候傳過(guò)來(lái)了,CPU (BUSn,DEVm)要去初始 化別的CPU時(shí)必須先通過(guò)HOST CPU仲裁。由于HOST CPU保持系統(tǒng)的各個(gè)CPU的當(dāng)前初 始化狀態(tài)信息。這樣通過(guò)HOST CPU仲裁就不會(huì)發(fā)生同時(shí)有多個(gè)CPU想初始化同一個(gè)CPU 而產(chǎn)生沖突,造成二進(jìn)制互相覆蓋的問(wèn)題,可以進(jìn)一步提高系統(tǒng)啟動(dòng)的速率。HOST CPU在給 其它CPU仲裁的同時(shí)也可以在系統(tǒng)內(nèi)挑一個(gè)CPU去初始化,因?yàn)樵谡麄€(gè)系統(tǒng)中獲取某個(gè)CPU 的初始化權(quán)是通過(guò)HOST CPU的,所以HOST CPU可根據(jù)既定的策略和其他已經(jīng)初始化了的 CPU 一起工作。參見(jiàn)圖4,針對(duì)主CPU而言,以完成初始化的組長(zhǎng)CPU或初始化成功的從CPU為請(qǐng) 求CPU,其工作流程如下步驟S401 當(dāng)主CPU接收到請(qǐng)求CPU的請(qǐng)求時(shí)執(zhí)行步驟S402。請(qǐng)求CPU向主CPU發(fā)出請(qǐng)求主要依靠PCI內(nèi)存讀寫(xiě)以及PCI中斷來(lái)實(shí)現(xiàn),此時(shí),當(dāng) 主CPU接收到請(qǐng)求時(shí),會(huì)關(guān)閉請(qǐng)求或關(guān)閉中斷,執(zhí)行下面的步驟以處理該請(qǐng)求或中斷。步驟S402 主CPU查找數(shù)據(jù)結(jié)構(gòu),根據(jù)請(qǐng)求CPU的PCI空間的基址和PCI拓?fù)湮?置,選出該請(qǐng)求CPU所在總線(xiàn)上的一個(gè)待初始化CPU。步驟S403 主CPU判斷該待初始化CPU是否已經(jīng)被其它CPU請(qǐng)求,是則執(zhí)行步驟 S404,否則執(zhí)行步驟S405。S404 重新選擇一個(gè)待初始化CPU,執(zhí)行步驟S203的判斷步驟。S405 將該待初始化CPU作為被請(qǐng)求CPU,賦予該請(qǐng)求CPU初始化該被請(qǐng)求CPU的 權(quán)利。此時(shí),該請(qǐng)求處理完成,需要再次打開(kāi)請(qǐng)求或中斷,以便再次接收請(qǐng)求。相應(yīng)的,當(dāng)請(qǐng)求CPU獲得主CPU賦予其初始化被請(qǐng)求CPU的權(quán)利后,加載數(shù)據(jù)結(jié)構(gòu) 至被請(qǐng)求CPU該被請(qǐng)求CPU,繼續(xù)向主CPU發(fā)出請(qǐng)求。S406 繼續(xù)在系統(tǒng)中選擇其它從CPU進(jìn)行初始化,并當(dāng)主CPU接收到請(qǐng)求CPU的請(qǐng) 求時(shí)執(zhí)行步驟S402。其中,主CPU與各從CPU之間的通訊通過(guò)PCI內(nèi)存讀寫(xiě)及PCI中斷實(shí)現(xiàn),所述通訊 格式為共享緩沖格式,且保證主CPU與各從CPU的緩沖區(qū)不重疊。以保證CPU之間互傳信 息不會(huì)互相覆蓋,所以必須每個(gè)CPU —個(gè)緩沖區(qū)。這里的通訊指的是從CPU和主CPU之間 的通訊,從CPU間不能通訊。上述表2是主CPU上建立的通訊數(shù)據(jù)結(jié)構(gòu)??梢?jiàn),本發(fā)明實(shí)施例提供的基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)方法,運(yùn)用主 CPU、各組長(zhǎng)CPU、已經(jīng)初始化后的其它從CPU等多CPU并行工作的方式,充分發(fā)揮了多CPU 并行運(yùn)行的效率,多CPU同時(shí)啟動(dòng),分?jǐn)傊骺谻PU的重任,這樣可以大大提高整個(gè)系統(tǒng)的初 始化速度,從而大大提高了系統(tǒng)啟動(dòng)速度,時(shí)間復(fù)雜度幾乎是0(log2N),比傳統(tǒng)的方式的時(shí) 間復(fù)雜度0(N)要高效的多;而且不用增加新的硬件,節(jié)省了成本。實(shí)施例三參見(jiàn)圖5,本發(fā)明實(shí)施例提供一種基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)模塊,包 括數(shù)據(jù)結(jié)構(gòu)建立單元501,用于建立包括各從CPU初始化信息、所在PCI空間的基址 和PCI拓?fù)湮恢?、及狀態(tài)信息的數(shù)據(jù)結(jié)構(gòu);
組長(zhǎng)CPU選定單元502,用于在每條總線(xiàn)上選定至少一個(gè)從CPU作為該總線(xiàn)的組長(zhǎng) CPU ;主CPU初始化單元503,用于主CPU將數(shù)據(jù)結(jié)構(gòu)加載到自身內(nèi)存,并將自身內(nèi)存映 射到PCI空間;組長(zhǎng)CPU初始化單元504,用于主CPU加載所述數(shù)據(jù)結(jié)構(gòu)至各總線(xiàn)的組長(zhǎng)CPU ;各 總線(xiàn)的組長(zhǎng)CPU在接收到所述數(shù)據(jù)結(jié)構(gòu)后,依據(jù)所述數(shù)據(jù)結(jié)構(gòu)中本CPU的初始化信息啟動(dòng) 初始化,并在初始化成功后通知主CPU更新本CPU的狀態(tài)信息;其它從CPU初始化單元505,用于各總線(xiàn)上,完成初始化的組長(zhǎng)CPU在主CPU的控 制下,加載所述數(shù)據(jù)結(jié)構(gòu)至本總線(xiàn)上其它從CPU ;其它從CPU在接收到所述數(shù)據(jù)結(jié)構(gòu)后,依 據(jù)所述數(shù)據(jù)結(jié)構(gòu)中本CPU的初始化信息啟動(dòng)初始化,并在初始化成功后通知主CPU更新本 CPU的狀態(tài)信息;至全部CPU均初始化成功,完成所述系統(tǒng)的啟動(dòng)。 優(yōu)選的,所述其它從CPU初始化單元還包括主CPU選擇初始化子單元,用于主CPU 初始化系統(tǒng)中其它從CPU,具體用于主CPU查找數(shù)據(jù)結(jié)構(gòu)中的狀態(tài)信息,選出一個(gè)待初始化CPU,加載數(shù)據(jù)結(jié)構(gòu)至該待 初始化CPU ;該待初始化CPU在接收到所述數(shù)據(jù)結(jié)構(gòu)后,依據(jù)所述數(shù)據(jù)結(jié)構(gòu)中本CPU的初始 化信息啟動(dòng)初始化,并在初始化成功后通知主CPU更新本CPU的狀態(tài)信息。優(yōu)選的,所述其它從CPU初始化單元還包括賦權(quán)子單元,用于其它從CPU在初始化 成功后,初始化成功的從CPU獲取主CPU賦予其初始化其所在總線(xiàn)上其它從CPU的權(quán)利,并 在主CPU的控制下,按照組長(zhǎng)CPU初始化其它從CPU的步驟初始化其所在總線(xiàn)上的其它從 CPU。其中,所述其它從CPU初始化單元中,完成初始化的組長(zhǎng)CPU或初始化成功的從 CPU在主CPU的控制下,加載所述數(shù)據(jù)結(jié)構(gòu)至本總線(xiàn)上其它從CPU具體為完成初始化的組長(zhǎng)CPU或初始化成功的從CPU作為請(qǐng)求CPU向主CPU發(fā)出請(qǐng)求,主 CPU查找所述數(shù)據(jù)結(jié)構(gòu),根據(jù)請(qǐng)求CPU的PCI空間的基址和PCI拓?fù)湮恢?,選出該請(qǐng)求CPU 所在總線(xiàn)上的一個(gè)待初始化CPU,判斷該待初始化CPU是否已經(jīng)被其它CPU請(qǐng)求,是則重新 選擇一個(gè)待初始化CPU再次執(zhí)行上述判斷步驟,否則將該待初始化CPU作為被請(qǐng)求CPU ;賦 予該請(qǐng)求CPU初始化該被請(qǐng)求CPU的權(quán)利;請(qǐng)求CPU加載所述數(shù)據(jù)結(jié)構(gòu)至被請(qǐng)求CPU后,繼 續(xù)向主CPU發(fā)出請(qǐng)求。本發(fā)明實(shí)施例中,主CPU與各從CPU之間的通訊通過(guò)PCI內(nèi)存讀寫(xiě)及PCI中斷實(shí) 現(xiàn),所述通訊格式為共享緩沖格式,且保證主CPU與各從CPU的緩沖區(qū)不重疊。本發(fā)明實(shí)施例中,所述主CPU初始化單元中,主CPU將自身內(nèi)存映射到PCI空間具 體為通過(guò)設(shè)置主CPU的用于映射到PCI空間的寄存器中相關(guān)參數(shù),將自身內(nèi)存映射到PCI 空間。優(yōu)選的,所述組長(zhǎng)CPU選定單元具體用于在每條總線(xiàn)上選定設(shè)備號(hào)為0的從CPU 作為該總線(xiàn)的組長(zhǎng)CPU。上述圖5所示的一種基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)模塊,可以執(zhí)行前述圖 1、圖2、圖3、或者圖4及其實(shí)施例一或?qū)嵤├镜姆椒?,因而其工作流程在此不贅述??梢?jiàn),本發(fā)明實(shí)施例提供的基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)模塊,運(yùn)用主 CPU、各組長(zhǎng)CPU等多CPU并行工作的方式,充分發(fā)揮了多CPU并行運(yùn)行的效率,多CPU同時(shí)啟動(dòng),分?jǐn)傊骺谻PU的重任,這樣可以大大提高整個(gè)系統(tǒng)的初始化速度,從而大大提高了系 統(tǒng)啟動(dòng)速度,時(shí)間復(fù)雜度幾乎是0(log2N),比傳統(tǒng)的方式的時(shí)間復(fù)雜度0(N)要高效的多; 而且不用增加新的硬件,節(jié)省了成本。需要說(shuō)明的是,在本文中,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排 他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者設(shè)備不僅包括那些要素,而 且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、物品或者設(shè)備所固有
的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)......”限定的要素,并不排除在包
括所述要素的過(guò)程、方法、物品或者設(shè)備中還存在另外的相同要素。本領(lǐng)域普通技術(shù)人員可以理解,實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分步驟是可以 通過(guò)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中, 該程序在執(zhí)行時(shí),包括若干指令用以執(zhí)行本發(fā)明各個(gè)實(shí)施例所述的方法。這里所述的存儲(chǔ) 介質(zhì),如ROM/RAM、磁碟、光盤(pán)等。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在 本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均包含在本發(fā)明的保護(hù)范圍 內(nèi)。
權(quán)利要求
一種基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)方法,其特征在于,預(yù)先建立包括各從CPU初始化信息、所在PCI空間的基址和PCI拓?fù)湮恢?、及狀態(tài)信息的數(shù)據(jù)結(jié)構(gòu),并在每條總線(xiàn)上選定至少一個(gè)從CPU作為該總線(xiàn)的組長(zhǎng)CPU,所述方法包括主CPU將數(shù)據(jù)結(jié)構(gòu)加載到自身內(nèi)存,并將自身內(nèi)存映射到PCI空間;主CPU加載所述數(shù)據(jù)結(jié)構(gòu)至各總線(xiàn)的組長(zhǎng)CPU;各總線(xiàn)的組長(zhǎng)CPU在接收到所述數(shù)據(jù)結(jié)構(gòu)后,依據(jù)所述數(shù)據(jù)結(jié)構(gòu)中本CPU的初始化信息啟動(dòng)初始化,并在初始化成功后通知主CPU更新本CPU的狀態(tài)信息;各總線(xiàn)上,完成初始化的組長(zhǎng)CPU在主CPU的控制下,加載所述數(shù)據(jù)結(jié)構(gòu)至本總線(xiàn)上其它從CPU;其它從CPU在接收到所述數(shù)據(jù)結(jié)構(gòu)后,依據(jù)所述數(shù)據(jù)結(jié)構(gòu)中本CPU的初始化信息啟動(dòng)初始化,并在初始化成功后通知主CPU更新本CPU的狀態(tài)信息;至全部CPU均初始化成功,完成所述系統(tǒng)的啟動(dòng)。
2.根據(jù)權(quán)利要求1所述的基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)方法,其特征在于,所 述方法還包括主CPU初始化系統(tǒng)中其它從CPU,具體為主CPU查找數(shù)據(jù)結(jié)構(gòu)中的狀態(tài)信息,選出一個(gè)待初始化CPU,加載數(shù)據(jù)結(jié)構(gòu)至該待初始 化CPU ;該待初始化CPU在接收到所述數(shù)據(jù)結(jié)構(gòu)后,依據(jù)所述數(shù)據(jù)結(jié)構(gòu)中本CPU的初始化信 息啟動(dòng)初始化,并在初始化成功后通知主CPU更新本CPU的狀態(tài)信息。
3.根據(jù)權(quán)利要求2所述的基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)方法,其特征在于,其 它從CPU在初始化成功后,還包括初始化成功的從CPU獲取主CPU賦予其初始化其所在總線(xiàn)上其它從CPU的權(quán)利,并 在主CPU的控制下,按照組長(zhǎng)CPU初始化其它從CPU的步驟初始化其所在總線(xiàn)上的其它從 CPU。
4.根據(jù)權(quán)利要求1、2或3所述的基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)方法,其特征在 于,完成初始化的組長(zhǎng)CPU或初始化成功的從CPU在主CPU的控制下,加載所述數(shù)據(jù)結(jié)構(gòu)至 本總線(xiàn)上其它從CPU具體為完成初始化的組長(zhǎng)CPU或初始化成功的從CPU作為請(qǐng)求CPU向主CPU發(fā)出請(qǐng)求,主CPU 查找所述數(shù)據(jù)結(jié)構(gòu),根據(jù)請(qǐng)求CPU的PCI空間的基址和PCI拓?fù)湮恢?,選出該請(qǐng)求CPU所在 總線(xiàn)上的一個(gè)待初始化CPU,判斷該待初始化CPU是否已經(jīng)被其它CPU請(qǐng)求,是則重新選擇 一個(gè)待初始化CPU再次執(zhí)行上述判斷步驟,否則將該待初始化CPU作為被請(qǐng)求CPU,賦予該 請(qǐng)求CPU初始化該被請(qǐng)求CPU的權(quán)利;請(qǐng)求CPU加載所述數(shù)據(jù)結(jié)構(gòu)至被請(qǐng)求CPU后,繼續(xù)向 主CPU發(fā)出請(qǐng)求。
5.根據(jù)權(quán)利要求1、2或3所述的基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)方法,其特征在 于,主CPU與各從CPU之間的通訊通過(guò)PCI內(nèi)存讀寫(xiě)及PCI中斷實(shí)現(xiàn),所述通訊格式為共享 緩沖格式,且保證主CPU與各從CPU的緩沖區(qū)不重疊。
6.根據(jù)權(quán)利要求1、2或3所述的基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)方法,其特征在 于,所述主CPU將自身內(nèi)存映射到PCI空間具體為通過(guò)設(shè)置主CPU的用于映射到PCI空間 的寄存器中相關(guān)參數(shù),將自身內(nèi)存映射到PCI空間。
7.根據(jù)權(quán)利要求1、2或3所述的基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)方法,其特征在 于,在每條總線(xiàn)上選定設(shè)備號(hào)為0的從CPU作為該總線(xiàn)的組長(zhǎng)CPU。
8.一種基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)模塊,其特征在于,包括數(shù)據(jù)結(jié)構(gòu)建立單元,用于建立包括各從CPU初始化信息、所在PCI空間的基址和PCI拓 撲位置、及狀態(tài)信息的數(shù)據(jù)結(jié)構(gòu);組長(zhǎng)CPU選定單元,用于在每條總線(xiàn)上選定至少一個(gè)從CPU作為該總線(xiàn)的組長(zhǎng)CPU ;主CPU初始化單元,用于主CPU將數(shù)據(jù)結(jié)構(gòu)加載到自身內(nèi)存,并將自身內(nèi)存映射到PCI 空間;組長(zhǎng)CPU初始化單元,用于主CPU加載所述數(shù)據(jù)結(jié)構(gòu)至各總線(xiàn)的組長(zhǎng)CPU ;各總線(xiàn)的組 長(zhǎng)CPU在接收到所述數(shù)據(jù)結(jié)構(gòu)后,依據(jù)所述數(shù)據(jù)結(jié)構(gòu)中本CPU的初始化信息啟動(dòng)初始化,并 在初始化成功后通知主CPU更新本CPU的狀態(tài)信息;其它從CPU初始化單元,用于各總線(xiàn)上,完成初始化的組長(zhǎng)CPU在主CPU的控制下,加 載所述數(shù)據(jù)結(jié)構(gòu)至本總線(xiàn)上其它從CPU ;其它從CPU在接收到所述數(shù)據(jù)結(jié)構(gòu)后,依據(jù)所述數(shù) 據(jù)結(jié)構(gòu)中本CPU的初始化信息啟動(dòng)初始化,并在初始化成功后通知主CPU更新本CPU的狀 態(tài)信息;至全部CPU均初始化成功,完成所述系統(tǒng)的啟動(dòng)。
9.根據(jù)權(quán)利要求8所述的基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)模塊,其特征在于,所 述其它從CPU初始化單元還包括主CPU選擇初始化子單元,用于主CPU初始化系統(tǒng)中其它 從CPU,具體用于主CPU查找數(shù)據(jù)結(jié)構(gòu)中的狀態(tài)信息,選出一個(gè)待初始化CPU,加載數(shù)據(jù)結(jié)構(gòu)至該待初始 化CPU ;該待初始化CPU在接收到所述數(shù)據(jù)結(jié)構(gòu)后,依據(jù)所述數(shù)據(jù)結(jié)構(gòu)中本CPU的初始化信 息啟動(dòng)初始化,并在初始化成功后通知主CPU更新本CPU的狀態(tài)信息。
10.根據(jù)權(quán)利要求9所述的基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)模塊,其特征在于,所 述其它從CPU初始化單元還包括賦權(quán)子單元,用于其它從CPU在初始化成功后,初始化成功 的從CPU獲取主CPU賦予其初始化其所在總線(xiàn)上其它從CPU的權(quán)利,并在主CPU的控制下, 按照組長(zhǎng)CPU初始化其它從CPU的步驟初始化其所在總線(xiàn)上的其它從CPU。
11.根據(jù)權(quán)利要求8、9或10所述的基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)模塊,其特 征在于,所述其它從CPU初始化單元中,完成初始化的組長(zhǎng)CPU或初始化成功的從CPU在主 CPU的控制下,加載所述數(shù)據(jù)結(jié)構(gòu)至本總線(xiàn)上其它從CPU具體為完成初始化的組長(zhǎng)CPU或初始化成功的從CPU作為請(qǐng)求CPU向主CPU發(fā)出請(qǐng)求,主CPU 查找所述數(shù)據(jù)結(jié)構(gòu),根據(jù)請(qǐng)求CPU的PCI空間的基址和PCI拓?fù)湮恢茫x出該請(qǐng)求CPU所在 總線(xiàn)上的一個(gè)待初始化CPU,判斷該待初始化CPU是否已經(jīng)被其它CPU請(qǐng)求,是則重新選擇 一個(gè)待初始化CPU再次執(zhí)行上述判斷步驟,否則將該待初始化CPU作為被請(qǐng)求CPU ;賦予該 請(qǐng)求CPU初始化該被請(qǐng)求CPU的權(quán)利;請(qǐng)求CPU加載所述數(shù)據(jù)結(jié)構(gòu)至被請(qǐng)求CPU后,繼續(xù)向 主CPU發(fā)出請(qǐng)求。
12.根據(jù)權(quán)利要求8、9或10所述的基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)模塊,其特征 在于,主CPU與各從CPU之間的通訊通過(guò)PCI內(nèi)存讀寫(xiě)及PCI中斷實(shí)現(xiàn),所述通訊格式為共 享緩沖格式,且保證主CPU與各從CPU的緩沖區(qū)不重疊。
13.根據(jù)權(quán)利要求8、9或10所述的基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)模塊,其特 征在于,所述主CPU初始化單元中,主CPU將自身內(nèi)存映射到PCI空間具體為通過(guò)設(shè)置主 CPU的用于映射到PCI空間的寄存器中相關(guān)參數(shù),將自身內(nèi)存映射到PCI空間。
14.根據(jù)權(quán)利要求8、9或10所述的基于PCI/PCIe總線(xiàn)的多CPU系統(tǒng)啟動(dòng)模塊,其特征在于,所述組長(zhǎng)CPU選定單元具體用于在每條總線(xiàn)上選定設(shè)備號(hào)為 的從CPU作為該總線(xiàn) 的組長(zhǎng)CPU。
全文摘要
本發(fā)明公開(kāi)一種基于PCI/PCIe總線(xiàn)多CPU系統(tǒng)啟動(dòng)方法及模塊,涉及自動(dòng)控制領(lǐng)域。所述方法預(yù)先建立數(shù)據(jù)結(jié)構(gòu),并選定每條總線(xiàn)組長(zhǎng)CPU,主CPU將數(shù)據(jù)結(jié)構(gòu)加載到自身內(nèi)存,并將自身內(nèi)存映射到PCI空間;主CPU加載所述數(shù)據(jù)結(jié)構(gòu)至各總線(xiàn)的組長(zhǎng)CPU;各總線(xiàn)的組長(zhǎng)CPU在接收到所述數(shù)據(jù)結(jié)構(gòu)后,依據(jù)數(shù)據(jù)結(jié)構(gòu)中本CPU的初始化信息啟動(dòng)初始化,并在初始化成功后通知主CPU更新本CPU的狀態(tài)信息;各總線(xiàn)上,完成初始化的組長(zhǎng)CPU在主CPU的控制下,加載數(shù)據(jù)結(jié)構(gòu)至本總線(xiàn)上其它從CPU;至全部CPU均初始化成功,完成所述系統(tǒng)的啟動(dòng)。大大提高系統(tǒng)啟動(dòng)速度;不用增加新的硬件,節(jié)省了成本。
文檔編號(hào)G06F9/48GK101876911SQ20091024967
公開(kāi)日2010年11月3日 申請(qǐng)日期2009年12月11日 優(yōu)先權(quán)日2009年11月4日
發(fā)明者胡揚(yáng)忠, 趙先林, 鄔偉琪, 金偉 申請(qǐng)人:杭州??低晹?shù)字技術(shù)股份有限公司