亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

多cpu對臨界資源進(jìn)行互斥訪問的方法和裝置的制作方法

文檔序號:6609333閱讀:392來源:國知局
專利名稱:多cpu對臨界資源進(jìn)行互斥訪問的方法和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及多處理器技術(shù)領(lǐng)域,尤其涉及一種多CPU(Center ProcessingUnit,中央處理單元)對臨界資源進(jìn)行互斥訪問的方法和裝置。
背景技術(shù)
支持多硬件線程技術(shù)的處理器等目前已經(jīng)越來越廣泛的應(yīng)用,其特點(diǎn)是處理器擁有多個(gè)Hardware-Thread(硬件線程),每個(gè)Hardware-Thread擁有獨(dú)立的指令針,共享Pipeline(管線資源)資源。Pipeline資源指能執(zhí)行軟件指令的物理電路,如整型運(yùn)算單元、取指單元、譯碼單元等。支持多硬件線程的處理器使用特定的調(diào)度方式對Hardware-Thread進(jìn)行調(diào)度,實(shí)現(xiàn)Hardware-Thread對Pipeline資源的時(shí)分復(fù)用。每個(gè)Hardware-Thread擁有獨(dú)立的Context(上下文)如指令指針、寄存器組等,可以完成Hardware-Thread間快速切換。從軟件角度,可以將支持多硬件線程的處理器視作多個(gè)CPU(Center Processing Unit,中央處理單元)并發(fā)的系統(tǒng),將每個(gè)Hardware-Thread視為一個(gè)CPU,如對于單核4硬件線程CPU,可以視為4個(gè)CPU并發(fā)的系統(tǒng),對于雙核各有4硬件線程CPU,可以視為8個(gè)CPU并發(fā)的系統(tǒng)。
一般地,在處理系統(tǒng)中都存在著臨界資源,臨界資源是指多CPU必須互斥訪問的資源,即某一時(shí)刻不允許多個(gè)CPU同時(shí)訪問而只能單個(gè)CPU訪問的資源。支持多硬件線程的處理器中多個(gè)CPU并發(fā)執(zhí)行的特點(diǎn)決定了對臨界資源的保護(hù)機(jī)制需要重點(diǎn)關(guān)注兩個(gè)需求支持不同CPU間對臨界資源進(jìn)行互斥訪問;等待資源時(shí)CPU應(yīng)主動掛起,資源釋放時(shí)CPU應(yīng)能夠被喚醒。如果某個(gè)CPU等待資源時(shí)未能掛起,則將占用Pipeline資源,影響其他CPU的性能。
目前,單CPU操作系統(tǒng)中的信號量、關(guān)中斷操作等方法不能用于多CPU間的互斥訪問。對于多CPU對臨界資源進(jìn)行互斥訪問,普遍采用自旋鎖實(shí)現(xiàn)。自旋鎖的信號量包括兩種狀態(tài),分別為空閑狀態(tài)和被占用狀態(tài),空閑狀態(tài)表示當(dāng)前臨界資源空閑,可以使用;被占用狀態(tài)表示當(dāng)前臨界資源正在被使用中,需要等待被釋放后才能使用。自旋鎖的原理是,在臨界資源被訪問時(shí),等待臨界資源的CPU不斷輪詢檢測信號量,直到自旋鎖的信號量空閑,該CPU才能獲得資源,稱為信號量的P操作;CPU訪問完臨界資源后,釋放信號量,稱為信號量的V操作。
假設(shè)CPUi、CPUj、CPUk先后訪問同一臨界資源,申請?jiān)L問資源的順序是CPUi、CPUj、CPUk,如圖1A所示,CPUi首先訪問臨界資源,在此期間,CPUj、CPUk輪詢等待信號量被釋放。當(dāng)CPUi訪問臨界資源完畢時(shí),如圖1B所示,CPUi釋放信號量,此時(shí)CPUj檢測到信號量被釋放,開始訪問臨界資源,而CPUk輪詢等待信號量下一次被釋放。
以上通過自旋鎖實(shí)現(xiàn)CPUi、CPUj、CPUk先后訪問同一臨界資源的具體流程如圖2所示,包括以下步驟步驟s101、與臨界資源相關(guān)的自旋鎖的信號量空閑。
步驟s102、CPUi請求訪問臨界資源時(shí),檢測信號量,發(fā)現(xiàn)信號量為空閑。
步驟s103、CPUi訪問臨界資源。
步驟s104、由于CPUi的訪問,與臨界資源相關(guān)的自旋鎖的信號量被占用。
步驟s105、CPUj請求訪問臨界資源時(shí),檢測信號量,發(fā)現(xiàn)信號量被占用,輪詢等待信號量被釋放。
步驟s106、CPUk請求訪問臨界資源時(shí),檢測信號量,發(fā)現(xiàn)信號量被占用,輪詢等待信號量被釋放。
步驟s107、CPUi訪問臨界資源完畢,釋放信號量。
步驟s108、與臨界資源相關(guān)的自旋鎖的信號量空閑。
步驟s109、CPUj檢測到信號量為空閑。
步驟s110、CPUj訪問臨界資源。
步驟s111、由于CPUj的訪問,與臨界資源相關(guān)的自旋鎖的信號量被占用。
步驟s112、CPUk繼續(xù)輪詢等待信號量被釋放。
以上自旋鎖方案的缺陷在于,在臨界資源被訪問期間,等待訪問該臨界資源的CPU不斷輪詢等待信號量被釋放,一直占用Pipeline資源,大量Pipeline資源浪費(fèi)在輪詢檢測上。因?yàn)橹荒芡ㄟ^輪詢等待信號量被釋放,沒有喚醒/掛起機(jī)制,因此大大降低了系統(tǒng)的性能。

發(fā)明內(nèi)容
本發(fā)明要解決的問題是提供一種實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的方法和設(shè)備,以在支持多CPU對臨界資源進(jìn)行互斥訪問的同時(shí),通過喚醒機(jī)制提高多CPU處理系統(tǒng)的性能。
為達(dá)到上述目的,本發(fā)明提供一種實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的方法,包括以下步驟配置與臨界資源對應(yīng)的消息鎖隊(duì)列的地址并通知各CPU;請求訪問所述臨界資源的CPU根據(jù)所述地址將自身的標(biāo)識加入所述消息鎖隊(duì)列;所述CPU按照所述消息鎖隊(duì)列中標(biāo)識的加入順序訪問所述臨界資源。
其中,所述CPU按照所述消息鎖隊(duì)列中標(biāo)識的加入順序訪問所述臨界資源的步驟具體為所述請求訪問臨界資源的CPU根據(jù)所述地址將自身的標(biāo)識加入所述消息鎖隊(duì)列后,若自身的標(biāo)識前無其他CPU的標(biāo)識,則所述CPU訪問所述臨界資源。
其中,所述CPU按照所述消息鎖隊(duì)列中標(biāo)識的加入順序訪問所述臨界資源的步驟具體為所述請求訪問臨界資源的CPU根據(jù)所述地址將自身的標(biāo)識加入所述消息鎖隊(duì)列后,若自身的標(biāo)識前有其他CPU的標(biāo)識,則所述CPU進(jìn)入掛機(jī)狀態(tài);所述處于掛機(jī)狀態(tài)的CPU接收到其他CPU發(fā)送的通知消息時(shí),進(jìn)入喚醒狀態(tài)并訪問所述臨界資源。
其中,所述CPU訪問所述臨界資源結(jié)束后,還包括訪問所述臨界資源結(jié)束后,所述CPU將自身的標(biāo)識從所述消息鎖隊(duì)列中刪除;所述CPU獲取位于所述消息鎖隊(duì)列的隊(duì)列頭的CPU的標(biāo)識;
所述CPU根據(jù)所述標(biāo)識向下一請求訪問所述臨界資源的CPU發(fā)送通知消息。
其中,接收到所述通知消息的CPU從掛機(jī)狀態(tài)進(jìn)入喚醒狀態(tài)并訪問所述臨界資源。
其中,所述通知消息為資源釋放消息。
本發(fā)明還提供一種實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的裝置,包括消息鎖隊(duì)列配置模塊,用于存儲臨界資源與消息鎖隊(duì)列地址的對應(yīng)關(guān)系;請求模塊,用于在請求訪問臨界資源時(shí),根據(jù)所述消息鎖隊(duì)列配置模塊存儲的對應(yīng)關(guān)系,將自身CPU的標(biāo)識加入與所述臨界資源對應(yīng)的消息鎖隊(duì)列;隊(duì)列獲取模塊,用于在請求訪問臨界資源時(shí),根據(jù)所述消息鎖隊(duì)列配置模塊存儲的對應(yīng)關(guān)系,獲取與所述臨界資源對應(yīng)的消息鎖隊(duì)列中自身CPU的標(biāo)識前有無其他CPU的標(biāo)識,無其他CPU的標(biāo)識時(shí),向所述臨界資源訪問模塊發(fā)送消息;臨界資源訪問模塊,根據(jù)接收到的消息訪問所述臨界資源。
其中,還包括狀態(tài)切換模塊,用于在所述隊(duì)列獲取模塊獲取到的消息鎖隊(duì)列中自身CPU的標(biāo)識前有其他CPU的標(biāo)識時(shí),將當(dāng)前狀態(tài)切換為掛機(jī)狀態(tài);在所述接收模塊接收到其他CPU發(fā)送的通知消息時(shí),將當(dāng)前狀態(tài)切換為喚醒狀態(tài)并向所述臨界資源訪問模塊發(fā)送消息;接收模塊,用于在接收到其他CPU發(fā)送的通知消息時(shí),通知所述狀態(tài)切換模塊。
其中,還包括刪除模塊,用于在訪問臨界資源結(jié)束時(shí),根據(jù)所述消息鎖隊(duì)列配置模塊存儲的對應(yīng)關(guān)系,將自身CPU的標(biāo)識從與所述臨界資源對應(yīng)的消息鎖隊(duì)列中刪除;標(biāo)識獲取模塊,用于在訪問臨界資源完成后,獲取位于與所述臨界資源對應(yīng)的消息鎖隊(duì)列中下一請求訪問所述臨界資源的CPU的標(biāo)識,并將所述下一請求訪問所述臨界資源的CPU的標(biāo)識發(fā)送到發(fā)送模塊;
發(fā)送模塊,用于在接收到所述標(biāo)識獲取模塊發(fā)送的CPU的標(biāo)識時(shí),根據(jù)所述接收到的CPU的標(biāo)識通知下一請求訪問所述臨界資源的CPU。
本發(fā)明還提供一種實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的裝置的消息鎖,包括隊(duì)列維護(hù)模塊,用于維護(hù)請求對臨界資源進(jìn)行訪問的CPU的標(biāo)識的隊(duì)列,并向已經(jīng)結(jié)束訪問所述臨界資源的CPU提供下一個(gè)請求訪問所述臨界資源的CPU的標(biāo)識。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn)本發(fā)明支持多CPU間對臨界資源進(jìn)行互斥訪問,并擁有掛起/喚醒機(jī)制,使等待臨界資源的CPU能夠主動掛起,在臨界資源可用時(shí)才被喚醒,從而節(jié)省了Pipeline資源。


圖1A和圖1B是現(xiàn)有技術(shù)中通過自旋鎖實(shí)現(xiàn)臨界資源互斥訪問的示意圖;圖2是現(xiàn)有技術(shù)中通過自旋鎖實(shí)現(xiàn)臨界資源互斥訪問的方法流程圖;圖3是本發(fā)明實(shí)施例一中實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的方法的流程圖;圖4是本發(fā)明實(shí)施例二中實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的方法的示意圖;圖5A和圖5B是本發(fā)明實(shí)施例三中實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的示意圖;圖6是本發(fā)明實(shí)施例三中實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的方法的流程圖;圖7是本發(fā)明實(shí)施例三中實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的裝置結(jié)構(gòu)示意圖。
具體實(shí)施例方式
本發(fā)明的核心在于,多線程處理器中,等待訪問臨界資源的CPU將自身標(biāo)識加入消息鎖隊(duì)列后主動掛起等待消息,在一CPU對臨界資源的訪問完成后,根據(jù)消息鎖隊(duì)列主動喚醒等待中的下一個(gè)CPU,依次傳遞,通過喚醒機(jī)制實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問。
以下結(jié)合附圖和具體實(shí)施例,對本發(fā)明的實(shí)施方式作進(jìn)一步說明。
本發(fā)明的實(shí)施例一中,一種實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的方法,如圖3所示,包括以下步驟,步驟s201、配置與臨界資源對應(yīng)的消息鎖隊(duì)列的地址并通知各CPU。
步驟s202、請求訪問臨界資源的CPU根據(jù)消息鎖隊(duì)列的地址將自身的標(biāo)識加入消息鎖隊(duì)列。
步驟s203、CPU按照該消息鎖隊(duì)列中標(biāo)識的加入順序訪問臨界資源。
本發(fā)明的實(shí)施例二中,通過不同CPU通過消息鎖隊(duì)列訪問臨界資源的過程,描述本發(fā)明實(shí)現(xiàn)臨界資源進(jìn)行互斥訪問的方法,如圖4所示,包括以下步驟步驟s301、對消息鎖隊(duì)列的地址進(jìn)行配置并通知各CPU。
該消息鎖隊(duì)列的地址可以為系統(tǒng)內(nèi)存或其他存儲單元中的一個(gè)指定位置,且該消息鎖隊(duì)列對應(yīng)特定的臨界資源。配置該消息鎖隊(duì)列的地址完畢后,還需通過系統(tǒng)消息等方式將該消息鎖隊(duì)列的地址以及該消息鎖隊(duì)列所對應(yīng)的臨界資源的信息通知系統(tǒng)中的各個(gè)CPU。以便系統(tǒng)中的CPU在需要訪問該特定的臨界資源時(shí),對該消息鎖隊(duì)列進(jìn)行讀取、寫入、刪除等操作。
步驟s302、CPU申請?jiān)L問臨界資源,將自身的CPU ID插入到消息鎖的隊(duì)列的最后。
消息鎖的隊(duì)列為一FIFO(First Input First Output,先入先出)隊(duì)列,隊(duì)列中的內(nèi)容是等待訪問臨界資源的CPU標(biāo)識(CPU_ID)。CPU根據(jù)消息鎖的隊(duì)列中的內(nèi)容,可以得到臨界資源的被使用情況以及下一個(gè)等待訪問臨界資源的CPU的信息。
步驟s303、CPU檢測消息鎖隊(duì)列中自身CPU_ID前是否存在其他的CPU_ID,如果存在則進(jìn)行步驟s304,否則進(jìn)行步驟s306。
步驟s304、CPU掛起,等待資源釋放消息。
步驟s305、CPU檢測是否接收到資源釋放消息,如果接收到則進(jìn)行步驟s306,否則返回步驟s304。
步驟s306、CPU訪問臨界資源,此時(shí),CPU獲得了臨界資源的訪問權(quán)。
步驟s307、CPU訪問臨界資源完畢,將自身的CPU_ID從消息鎖隊(duì)列刪除。
步驟s308、CPU檢測隊(duì)列中是否有其他CPU_ID,如果存在則進(jìn)行步驟s309,否則結(jié)束。
步驟s309、CPU向消息鎖隊(duì)列頭的CPU_ID對應(yīng)的CPU發(fā)送資源釋放消息。該資源釋放消息為一具有消息代碼的硬件消息,通過該代碼標(biāo)識當(dāng)前消息為一資源釋放消息。
本發(fā)明的實(shí)施例三中,結(jié)合具體的應(yīng)用場景,對本發(fā)明的實(shí)施方式進(jìn)行進(jìn)一步的說明。假設(shè)CPUi、CPUj、CPUk獲得了與臨界資源對應(yīng)的消息鎖隊(duì)列的地址后,先后訪問同一臨界資源,申請?jiān)L問該臨界資源的順序是CPUi、CPUj、CPUk。如圖5A所示,CPUi首先訪問臨界資源,在此期間,CPUj、CPUk將自身的CPU標(biāo)識加入消息鎖隊(duì)列并掛起。當(dāng)CPUi訪問臨界資源完畢時(shí),如圖5B所示,CPUi向CPUj發(fā)送資源釋放消息,CPUj開始訪問臨界資源,而CPUk仍保持掛機(jī)狀態(tài)。
以上通過消息鎖實(shí)現(xiàn)CPUi、CPUj、CPUk先后訪問同一臨界資源的具體流程如圖6所示,包括以下步驟步驟s501、與臨界資源相關(guān)的消息鎖的隊(duì)列為空。
步驟s502、CPUi請求訪問臨界資源,將CPU_i插入到消息鎖的隊(duì)列。
步驟s503、消息鎖的隊(duì)列中,CPU_i前無其他CPU的標(biāo)識,CPUi訪問臨界資源。
步驟s504、與臨界資源相關(guān)的消息鎖隊(duì)列中包括CPU_i。
步驟s505、CPUj請求訪問臨界資源,將CPU_j插入到消息鎖的隊(duì)列。此時(shí)消息鎖隊(duì)列中依次包括CPU_i、CPU_j,CPUj進(jìn)入掛機(jī)狀態(tài)。
步驟s506、CPUk請求訪問臨界資源,將CPU_k插入到消息鎖的隊(duì)列。此時(shí)消息鎖隊(duì)列中依次包括CPU_i、CPU_j、CPU_k,CPUk進(jìn)入掛機(jī)狀態(tài)。
步驟s507、CPUi訪問臨界資源完畢,將CPU_i從消息鎖隊(duì)列刪除。
步驟s508、與臨界資源相關(guān)的消息鎖隊(duì)列中包括CPU_j、CPU_k。
步驟s509、CPUi向CPUj發(fā)送資源釋放消息。
步驟s510、CPUj進(jìn)入喚醒狀態(tài),訪問臨界資源。
步驟s511、與臨界資源相關(guān)的消息鎖隊(duì)列中包括CPU_j、CPU_k。
步驟s512、CPUj訪問臨界資源完畢,將CPU_j從消息鎖隊(duì)列刪除。
步驟s513、與臨界資源相關(guān)的消息鎖隊(duì)列中包括CPU_k。
步驟s514、CPUj向CPUk發(fā)送資源釋放消息。
步驟s515、CPUk進(jìn)入喚醒狀態(tài),訪問臨界資源。
步驟s516、與臨界資源相關(guān)的消息鎖隊(duì)列中包括CPU_k。
步驟s517、CPUk訪問臨界資源完畢,將CPU_k從消息鎖隊(duì)列刪除。
步驟s518、與臨界資源相關(guān)的消息鎖的隊(duì)列為空。
通過使用上述實(shí)施例一至實(shí)施例三所描述的實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的方法,通過消息鎖隊(duì)列支持多CPU間對臨界資源進(jìn)行互斥訪問,并擁有掛起/喚醒機(jī)制,使等待臨界資源的CPU能夠主動掛起,在臨界資源可用時(shí)才被喚醒,從而節(jié)省了Pipeline資源。
本發(fā)明的實(shí)施例四中,一種實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的裝置的結(jié)構(gòu)如圖7所示,包括消息鎖隊(duì)列配置模塊11,請求模塊12,隊(duì)列獲取模塊13和臨界資源訪問模塊14。具體地消息鎖隊(duì)列配置模塊11,用于存儲與臨界資源對應(yīng)的消息鎖隊(duì)列的地址,并在其他模塊需要調(diào)用與臨界資源對應(yīng)的消息鎖隊(duì)列時(shí),提供與臨界資源對應(yīng)的消息鎖隊(duì)列的地址。
請求模塊12,用于在請求臨界資源時(shí),根據(jù)消息鎖隊(duì)列配置模塊11存儲的對應(yīng)關(guān)系,將自身CPU的標(biāo)識加入與臨界資源對應(yīng)的消息鎖隊(duì)列。
隊(duì)列獲取模塊13,用于在請求訪問臨界資源時(shí),根據(jù)消息鎖隊(duì)列配置模塊11存儲的對應(yīng)關(guān)系,獲取與臨界資源對應(yīng)的消息鎖隊(duì)列中自身CPU的標(biāo)識前有無其他CPU的標(biāo)識,無其他CPU的標(biāo)識時(shí),向臨界資源訪問模塊14發(fā)送消息。
臨界資源訪問模塊14,根據(jù)接收到的消息訪問臨界資源。
另外,該裝置還包括狀態(tài)切換模塊15和接收模塊16。具體地狀態(tài)切換模塊15,用于將CPU在掛機(jī)狀態(tài)與喚醒狀態(tài)間切換。具體的,在請求訪問臨界資源時(shí),若隊(duì)列獲取模塊13獲取到的與該臨界資源對應(yīng)的消息鎖隊(duì)列中自身標(biāo)識前有其他CPU的標(biāo)識時(shí),將當(dāng)前狀態(tài)切換為掛機(jī)狀態(tài);在接收模塊16接收到其他CPU發(fā)送的資源釋放消息時(shí),將當(dāng)前狀態(tài)切換為喚醒狀態(tài)并向臨界資源訪問模塊14發(fā)送消息。
接收模塊16,用于在接收到其他CPU發(fā)送的資源釋放消息時(shí),通知狀態(tài)切換模塊15。
另外,該裝置還包括標(biāo)識獲取模塊17,發(fā)送模塊18和刪除模塊19。具體地標(biāo)識獲取模塊17,用于在訪問臨界資源完成后,根據(jù)消息鎖隊(duì)列配置模塊11存儲的對應(yīng)關(guān)系,獲取位于與該臨界資源對應(yīng)的消息鎖隊(duì)列頭的CPU的標(biāo)識,并將該標(biāo)識發(fā)送到發(fā)送模塊18。
發(fā)送模塊18,用于在訪問臨界資源結(jié)束時(shí),根據(jù)消息鎖隊(duì)列向下一請求訪問臨界資源的CPU發(fā)送消息。具體的,根據(jù)標(biāo)識獲取模塊17獲取的位于與該臨界資源對應(yīng)的消息鎖隊(duì)列頭的CPU的標(biāo)識,向與該標(biāo)識對應(yīng)的CPU發(fā)送資源釋放消息。
刪除模塊19,用于在訪問臨界資源結(jié)束時(shí),根據(jù)消息鎖隊(duì)列配置模塊11存儲的對應(yīng)關(guān)系,將自身CPU標(biāo)識從與該臨界資源對應(yīng)的消息鎖隊(duì)列中刪除。
本發(fā)明的實(shí)施例五中,提供了一種實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的消息鎖,包括隊(duì)列維護(hù)模塊,用于維護(hù)請求對臨界資源進(jìn)行訪問的CPU的標(biāo)識的隊(duì)列,通過該隊(duì)列,實(shí)現(xiàn)多CPU對臨界資源進(jìn)行的依次互斥訪問。同時(shí),向已經(jīng)結(jié)束訪問臨界資源的CPU提供了下一個(gè)請求訪問臨界資源的CPU的標(biāo)識。該消息鎖可以為一存儲實(shí)體中的存儲單元,可供不同的CPU讀寫調(diào)用。
通過使用以上實(shí)施例四和實(shí)施例五所描述的實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的裝置以及消息鎖,通過消息鎖隊(duì)列支持多CPU間對臨界資源進(jìn)行互斥訪問,并擁有掛起/喚醒機(jī)制,使等待臨界資源的CPU能夠主動掛起,在臨界資源可用時(shí)才被喚醒,從而節(jié)省了Pipeline資源。
以上公開的僅為本發(fā)明的幾個(gè)具體實(shí)施例,但是,本發(fā)明并非局限于此,任何本領(lǐng)域的技術(shù)人員能思之的變化都應(yīng)落入本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的方法,其特征在于,包括以下步驟配置與臨界資源對應(yīng)的消息鎖隊(duì)列的地址并通知各CPU;請求訪問所述臨界資源的CPU根據(jù)所述地址將自身的標(biāo)識加入所述消息鎖隊(duì)列;所述CPU按照所述消息鎖隊(duì)列中標(biāo)識的加入順序訪問所述臨界資源。
2.如權(quán)利要求1所述實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的方法,其特征在于,所述CPU按照所述消息鎖隊(duì)列中標(biāo)識的加入順序訪問所述臨界資源的步驟具體為所述請求訪問臨界資源的CPU根據(jù)所述地址將自身的標(biāo)識加入所述消息鎖隊(duì)列后,若自身的標(biāo)識前無其他CPU的標(biāo)識,則所述CPU訪問所述臨界資源。
3.如權(quán)利要求1所述實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的方法,其特征在于,所述CPU按照所述消息鎖隊(duì)列中標(biāo)識的加入順序訪問所述臨界資源的步驟具體為所述請求訪問臨界資源的CPU根據(jù)所述地址將自身的標(biāo)識加入所述消息鎖隊(duì)列后,若自身的標(biāo)識前有其他CPU的標(biāo)識,則所述CPU進(jìn)入掛機(jī)狀態(tài);所述處于掛機(jī)狀態(tài)的CPU接收到其他CPU發(fā)送的通知消息時(shí),進(jìn)入喚醒狀態(tài)并訪問所述臨界資源。
4.如權(quán)利要求2或3所述實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的方法,其特征在于,所述CPU訪問所述臨界資源結(jié)束后,還包括訪問所述臨界資源結(jié)束后,所述CPU將自身的標(biāo)識從所述消息鎖隊(duì)列中刪除;所述CPU獲取位于所述消息鎖隊(duì)列的隊(duì)列頭的CPU的標(biāo)識;所述CPU根據(jù)所述標(biāo)識向下一請求訪問所述臨界資源的CPU發(fā)送通知消息。
5.如權(quán)利要求4所述實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的方法,其特征在于,接收到所述通知消息的CPU從掛機(jī)狀態(tài)進(jìn)入喚醒狀態(tài)并訪問所述臨界資源。
6.如權(quán)利要求3或5所述實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的方法,其特征在于,所述通知消息為資源釋放消息。
7.一種實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的裝置,其特征在于,包括消息鎖隊(duì)列配置模塊,用于存儲臨界資源與消息鎖隊(duì)列地址的對應(yīng)關(guān)系;請求模塊,用于在請求訪問臨界資源時(shí),根據(jù)所述消息鎖隊(duì)列配置模塊存儲的對應(yīng)關(guān)系,將自身CPU的標(biāo)識加入與所述臨界資源對應(yīng)的消息鎖隊(duì)列;隊(duì)列獲取模塊,用于在請求訪問臨界資源時(shí),根據(jù)所述消息鎖隊(duì)列配置模塊存儲的對應(yīng)關(guān)系,獲取與所述臨界資源對應(yīng)的消息鎖隊(duì)列中自身CPU的標(biāo)識前有無其他CPU的標(biāo)識,無其他CPU的標(biāo)識時(shí),向所述臨界資源訪問模塊發(fā)送消息;臨界資源訪問模塊,根據(jù)接收到的消息訪問所述臨界資源。
8.如權(quán)利要求7所述實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的裝置,其特征在于,還包括狀態(tài)切換模塊,用于在所述隊(duì)列獲取模塊獲取到的消息鎖隊(duì)列中自身CPU的標(biāo)識前有其他CPU的標(biāo)識時(shí),將當(dāng)前狀態(tài)切換為掛機(jī)狀態(tài);在所述接收模塊接收到其他CPU發(fā)送的通知消息時(shí),將當(dāng)前狀態(tài)切換為喚醒狀態(tài)并向所述臨界資源訪問模塊發(fā)送消息;接收模塊,用于在接收到其他CPU發(fā)送的通知消息時(shí),通知所述狀態(tài)切換模塊。
9.如權(quán)利要求7所述實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的裝置,其特征在于,還包括刪除模塊,用于在訪問臨界資源結(jié)束時(shí),根據(jù)所述消息鎖隊(duì)列配置模塊存儲的對應(yīng)關(guān)系,將自身CPU的標(biāo)識從與所述臨界資源對應(yīng)的消息鎖隊(duì)列中刪除;標(biāo)識獲取模塊,用于在訪問臨界資源完成后,獲取位于與所述臨界資源對應(yīng)的消息鎖隊(duì)列中下一請求訪問所述臨界資源的CPU的標(biāo)識,并將所述下一請求訪問所述臨界資源的CPU的標(biāo)識發(fā)送到發(fā)送模塊;發(fā)送模塊,用于在接收到所述標(biāo)識獲取模塊發(fā)送的CPU的標(biāo)識時(shí),根據(jù)所述接收到的CPU的標(biāo)識通知下一請求訪問所述臨界資源的CPU。
10.一種實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的裝置的消息鎖,其特征在于,包括隊(duì)列維護(hù)模塊,用于維護(hù)請求對臨界資源進(jìn)行訪問的CPU的標(biāo)識的隊(duì)列,并向已經(jīng)結(jié)束訪問所述臨界資源的CPU提供下一個(gè)請求訪問所述臨界資源的CPU的標(biāo)識。
全文摘要
本發(fā)明公開了一種實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的方法,包括以下步驟配置與臨界資源對應(yīng)的消息鎖隊(duì)列的地址并通知各CPU;請求訪問臨界資源的CPU根據(jù)消息鎖隊(duì)列的地址將自身的標(biāo)識加入消息鎖隊(duì)列;CPU按照該消息鎖隊(duì)列中標(biāo)識的加入順序訪問臨界資源。本發(fā)明還公開了一種實(shí)現(xiàn)多CPU對臨界資源進(jìn)行互斥訪問的裝置和消息鎖。通過使用本發(fā)明,實(shí)現(xiàn)了多CPU間對臨界資源進(jìn)行互斥訪問,使等待臨界資源的CPU能夠主動掛起,在臨界資源可用時(shí)才被喚醒,從而節(jié)省了Pipeline資源。
文檔編號G06F9/46GK101051281SQ20071010698
公開日2007年10月10日 申請日期2007年5月16日 優(yōu)先權(quán)日2007年5月16日
發(fā)明者李文群 申請人:杭州華三通信技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1