本發(fā)明涉及一種操作系統(tǒng)及方法,特別是涉及一種基于AHB總線的多核SOC中實現(xiàn)原子操作系統(tǒng)及方法。
背景技術(shù):
在基于AHB(AHB是Advanced High performance Bus的縮寫,高級高性能總線)總線的SOC(System on Chip,片上系統(tǒng))芯片中,要實現(xiàn)多個主設(shè)備對共享變量的原子操作,通常采用鎖定(LOCK)傳輸,但是這種傳輸通常只允許一個主設(shè)備占用總線。這樣一來,如果有兩個主設(shè)備向兩個不同的從設(shè)備同時發(fā)送操作,其中一個主設(shè)備操作共享變量,另一個主設(shè)備訪問的是非共享變量,操作共享變量的主設(shè)備會鎖定總線,導(dǎo)致另一個訪問非共享變量的主設(shè)備發(fā)送的操作無法使用總線,必須要等操作共享變量的主設(shè)備完成所有的鎖定傳輸后,才能使用總線,導(dǎo)致總線的使用效率降低。
一、假設(shè)第三CUP模塊和第四CUP模塊都對第十正常存儲模塊的某個共享變量K進行加1計數(shù)操作,則需要先讀出變量K的初始值(假設(shè)為2),然后在CUP將加操作后的結(jié)果3,重新寫回第十正常存儲模塊內(nèi)部。這樣一來,如果不使用原子操作,可能會導(dǎo)致最終結(jié)果出錯(期望的結(jié)果為4,實際結(jié)果為3)。為解決這個問題第三CUP模塊和第四CUP模塊需要對該共享變量發(fā)送LOCK操作,假設(shè)總線先響應(yīng)第三CUP模塊的LOCK(鎖定)操作,則總線會等第三CUP模塊的操作完成后(即此時第三CUP模塊加1操作已經(jīng)完成,共享變量K的值此時為3),然后響應(yīng)第四CUP模塊的LOCK操作(第四CUP模塊讀取變量K的值為3,然后加1,將最終結(jié)果4寫入第十正常存儲模塊)。
二、如果第三CUP模塊對第十正常存儲模塊的某個共享變量進行加1計數(shù)操作,而第四CUP模塊是對第十一正常存儲模塊的某個非共享變量進行加1計數(shù)操作,從原則上兩個CUP的操作是互相不沖突的,可以同時進行。但是由于第三CUP模塊對共享變量的LOCK操作會鎖定總線,導(dǎo)致總線不會響應(yīng)第四CUP模塊的操作,這樣第四CUP模塊的操作就必須等第三CUP模塊的操作完成,解鎖總線后才能進行,降低總線使用效率。如果總線上掛接的主設(shè)備比較多,那影響更明顯。
技術(shù)實現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是提供一種基于AHB總線的多核SOC中實現(xiàn)原子操作系統(tǒng)及方法,其能夠提高總線利用效率。
本發(fā)明是通過下述技術(shù)方案來解決上述技術(shù)問題的:一種基于AHB總線的多核SOC中實現(xiàn)原子操作系統(tǒng),其特征在于,其包括其包括第一CUP模塊、第二CUP模塊、總線模塊、AOC本體模塊、原子存儲模塊、第一正常存儲模塊、第二正常存儲模塊,第一CUP模塊、第二CUP模塊都與總線模塊相連,第一CUP模塊位于第二CUP模塊左側(cè),總線模塊通過AOC本體模塊與原子存儲模塊相連,第一正常存儲模塊、第二正常存儲模塊都與總線模塊相連,第一正常存儲模塊位于第二正常存儲模塊左側(cè),AOC本體模塊、原子存儲模塊都位于第一正常存儲模塊左側(cè)。
本發(fā)明還提供一種基于AHB總線的多核SOC中實現(xiàn)原子操作方法,其包括以下步驟:
一種基于AHB總線的多核SOC中實現(xiàn)原子操作方法,其特征在于,其包括以下步驟:
步驟一,第一CUP模塊、第二CUP模塊對第一正常存儲模塊的某個共享變量K同時進行加1計數(shù)操作,則需要先向AOC本體模塊申請原子操作權(quán)限,如果此空間未被占用,則申請成功,然后開始對共享變量K進行加1計數(shù)操作,加1計數(shù)操作完成后,再向AOC本體模塊發(fā)送釋放原子操作空間的命令;如果此空間正在被占用,則申請失敗,不能對共享變量進行加1計數(shù)操作,需要繼續(xù)申請此空間,直到此空間被釋放,申請成功,然后再進行加1計數(shù)操作;
步驟二,第一CUP模塊對第一正常存儲模塊的某個共享變量K進行加1計數(shù)操作,第四CUP模塊同時對第二正常存儲模塊的另外一個共享變量M進行加1計數(shù)操作;
步驟三,第一CUP模塊對第一正常存儲模塊的某個共享變量K進行加1計數(shù)操作,而第二CUP模塊同時對第二正常存儲模塊的某個非共享變量N進行加1計數(shù)操作,K和N是自然數(shù)。
優(yōu)選地,所述步驟一包括以下步驟:
步驟十一,第一CUP模塊、第二CUP模塊都需要對第一正常存儲模塊空間的第二地址B進行操作,則需要先向AOC本體模塊的第一地址A發(fā)送申請對第二地址B的操作權(quán)限,當AOC本體模塊檢測到CUP對第一地址A的讀操作后,會向原子存儲模塊的第一地址A發(fā)送一個讀操作,然后判斷讀回數(shù)據(jù)的值,如果是0,則表示此時沒有CUP對第二地址B進行操作,然后將0返回給CUP;同時,會向原子存儲模塊的第一地址A發(fā)送一個寫操作,對該地址寫入1,表示已經(jīng)有CUP在對第二地址B進行操作了,如果從原子存儲模塊的第一地址A返回的讀數(shù)據(jù)為1,則表示此時已經(jīng)有CUP在對第二地址B進行操作,直接將1返回第一CUP模塊或第二CUP模塊;
步驟十二,當?shù)谝籆UP模塊或第二CUP模塊收到AOC本體模塊返回的結(jié)果后,會進行判斷,如果結(jié)果為0,表示此時第一CUP模塊或第二CUP模塊享有對第二地址B的操作權(quán),則會對第二地址B進行各種操作,由于AOC本體模塊已經(jīng)保證了不會同時給多個第一CUP模塊或第二CUP模塊返回0,所以得到權(quán)限的第一CUP模塊或第二CUP模塊對第二地址B的任何操作都不需要鎖定總線模塊;如果收到的返回結(jié)果為1,則不會對第二地址B進行任何操作,而是會繼續(xù)向第一地址A發(fā)送讀操作,去申請對第二地址B的操作權(quán)限;
步驟十三,當?shù)玫綑?quán)限的第一CUP模塊或第二CUP模塊完成了對第二地址B的一系列操作后,會向第一地址A發(fā)送一個寫0操作,以釋放對第二地址B的操作權(quán)限;AOC本體模塊檢測到對第一地址A的寫0操作后,會向原子存儲模塊發(fā)送一個寫操作,將數(shù)據(jù)0寫入第一地址A,表示第二地址B的操作權(quán)限已經(jīng)被釋放;
步驟十四,上次未申請到對第二地址B操作權(quán)限的第一CUP模塊或第二CUP模塊繼續(xù)發(fā)送讀操作,AOC本體模塊檢測到對第一地址A的讀操作后,會向第一地址A發(fā)送一個讀操作,由于此空間已經(jīng)被釋放,讀到的數(shù)據(jù)為0,將0返回給發(fā)起申請權(quán)限的第一CUP模塊或第二CUP模塊,該第一CUP模塊或第二CUP模塊獲得對第二地址B的操作權(quán),便開始進行對第二地址B的一系列操作。
優(yōu)選地,所述步驟二包括以下步驟:
步驟二十一,第一CUP模塊對第一正常存儲模塊空間的第二地址B進行操作,第二CUP模塊對第二正常存儲模塊空間的第四地址BB進行操作;則第一CUP模塊向AOC本體模塊的第一地址A發(fā)送讀操作,申請對第二地址B的操作權(quán)限,第二CUP模塊向AOC本體模塊的AA發(fā)送讀操作,申請第四地址BB的操作權(quán)限;假設(shè)在這之前第二地址B與第四地址BB的操作權(quán)限都已經(jīng)被釋放;當AOC本體模塊檢測到第一CUP模塊對第一地址A的讀操作后,會向原子存儲模塊的第一地址A發(fā)送一個讀操作,讀到的數(shù)據(jù)為0,將0返回給第一CUP模塊,表示第一CUP模塊取得對第二地址B的操作權(quán);同時,會向第一地址A發(fā)送一個寫操作,對該地址寫入1;由于第一地址A與第三地址AA是兩個不同的地址,AOC本體模塊對第一地址A的寫1操作不會影響到第三地址AA的值;因此,第二CUP模塊對第三地址AA的讀操作返回的數(shù)據(jù)也為0,第二CUP模塊取得對第四地址BB的操作權(quán);
步驟二十二,第一CUP模塊取得對第二地址B的操作權(quán)后,便開始對第二地址B進行一系列操作;同時,第二CUP模塊取得對第四地址BB的操作權(quán)后,也開始對第四地址BB進行一系列操作,而不需要等到第一CUP模塊完成對第二地址B的操作;同理,第一CUP模塊的對第二地址B的一系列操作,也不需要等第二CUP模塊對第四地址BB的一系列操作完成;
步驟二十三,第一CUP模塊完成對第二地址B的操作后,對第一地址A進行寫0操作,釋放對第二地址B的操作權(quán);同理,第二CUP模塊完成對第四地址BB的操作后,對第三地址AA進行寫0操作,釋放對第四地址BB的操作權(quán);
所述步驟三由于變量N是非共享的,因此,第二CUP模塊不需要從AOC本體模塊處申請對變量N的操作權(quán),直接操作即可;而第一CUP模塊對共享變量K的操作不會鎖定總線模塊,因此,不會影響第二CUP模塊對N的操作,可以并行完成,提高總線利用效率。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果:在AOC本體模塊與總線模塊接口處,讀寫操作是串行進入AOC本體模塊內(nèi)部的,即如果上一個讀寫操作未完成,AOC本體模塊不會響應(yīng)下一個操作的讀寫命令;本發(fā)明的應(yīng)用不限于只是對共享變量的原子操作;本發(fā)明中并不限定返回0代表獲取總線權(quán)限成功,也不限定返回1代表獲取總線失敗,也可以是返回1代表獲取總線成功,返回0代表獲取總線失敗等。
附圖說明
圖1為本發(fā)明的結(jié)構(gòu)示意圖。
具體實施方式
下面結(jié)合附圖給出本發(fā)明較佳實施例,以詳細說明本發(fā)明的技術(shù)方案。
如圖1所示,本發(fā)明基于AHB總線的多核SOC中實現(xiàn)原子操作系統(tǒng)包括第一CUP(Central Processing Unit,中央處理單元)模塊、第二CUP模塊、總線模塊、AOC(Atomic Operation Controller,原子操作控制器)本體模塊、原子存儲(Atomic_Mcmory)模塊、第一正常存儲(Normal_Memory)模塊、第二正常存儲模塊,第一CUP模塊、第二CUP模塊都與總線模塊相連,第一CUP模塊位于第二CUP模塊左側(cè),總線模塊通過AOC本體模塊與原子存儲模塊相連,第一正常存儲模塊、第二正常存儲模塊都與總線模塊相連,第一正常存儲模塊位于第二正常存儲模塊左側(cè),AOC本體模塊、原子存儲模塊都位于第一正常存儲模塊左側(cè)。
本發(fā)明基于AHB總線的多核SOC中實現(xiàn)原子操作方法包括以下步驟:
步驟一,第一CUP模塊、第二CUP模塊對第一正常存儲模塊的某個共享變量K同時進行加1計數(shù)操作,則需要先向AOC本體模塊申請原子操作權(quán)限,如果此空間未被占用,則申請成功,然后開始對共享變量K進行加1計數(shù)操作,加1計數(shù)操作完成后,再向AOC本體模塊發(fā)送釋放原子操作空間的命令;如果此空間正在被占用,則申請失敗,不能對共享變量進行加1計數(shù)操作,需要繼續(xù)申請此空間,直到此空間被釋放,申請成功,然后再進行加1計數(shù)操作;
步驟二,第一CUP模塊對第一正常存儲模塊的某個共享變量K進行加1計數(shù)操作,第四CUP模塊同時對第二正常存儲模塊的另外一個共享變量M進行加1計數(shù)操作;
步驟三,第一CUP模塊對第一正常存儲模塊的某個共享變量K進行加1(加1計數(shù)是指對共享變量K進行加1的操作)計數(shù)操作,而第二CUP模塊同時對第二正常存儲模塊的某個非共享變量N進行加1計數(shù)操作,K和N是自然數(shù)。
所述步驟一包括以下步驟:
步驟十一,第一CUP模塊、第二CUP模塊都需要對第一正常存儲模塊空間的第二地址B進行操作,則需要先向AOC本體模塊的第一地址A發(fā)送申請對第二地址B的操作權(quán)限(一個普通的讀操作),當AOC本體模塊檢測到CUP對第一地址A的讀操作后,會向原子存儲模塊的第一地址A發(fā)送一個讀操作,然后判斷讀回數(shù)據(jù)的值,如果是0,則表示此時沒有CUP對第二地址B進行操作,然后將0返回給CUP;同時,會向原子存儲模塊的第一地址A發(fā)送一個寫操作,對該地址寫入1,表示已經(jīng)有CUP在對第二地址B進行操作了,如果從原子存儲模塊的第一地址A返回的讀數(shù)據(jù)為1,則表示此時已經(jīng)有CUP在對第二地址B進行操作,直接將1返回第一CUP模塊或第二CUP模塊;
步驟十二,當?shù)谝籆UP模塊或第二CUP模塊收到AOC本體模塊返回的結(jié)果后,會進行判斷,如果結(jié)果為0,表示此時第一CUP模塊或第二CUP模塊享有對第二地址B的操作權(quán),則會對第二地址B進行各種操作,由于AOC本體模塊已經(jīng)保證了不會同時給多個第一CUP模塊或第二CUP模塊返回0(即不會同時授予多個第一CUP模塊或第二CUP模塊對第二地址B的操作權(quán)限),所以得到權(quán)限的第一CUP模塊或第二CUP模塊對第二地址B的任何操作都不需要鎖定總線模塊;如果收到的返回結(jié)果為1,則不會對第二地址B進行任何操作,而是會繼續(xù)向第一地址A發(fā)送讀操作,去申請對第二地址B的操作權(quán)限;
步驟十三,當?shù)玫綑?quán)限的第一CUP模塊或第二CUP模塊完成了對第二地址B的一系列操作后,會向第一地址A發(fā)送一個寫0操作,以釋放對第二地址B的操作權(quán)限;AOC本體模塊檢測到對第一地址A的寫0操作后,會向原子存儲模塊發(fā)送一個寫操作,將數(shù)據(jù)0寫入第一地址A,表示第二地址B的操作權(quán)限已經(jīng)被釋放;
步驟十四,上次未申請到對第二地址B操作權(quán)限的第一CUP模塊或第二CUP模塊繼續(xù)發(fā)送讀操作,AOC本體模塊檢測到對第一地址A的讀操作后,會向第一地址A發(fā)送一個讀操作,由于此空間已經(jīng)被釋放,讀到的數(shù)據(jù)為0,將0返回給發(fā)起申請權(quán)限的第一CUP模塊或第二CUP模塊,該第一CUP模塊或第二CUP模塊獲得對第二地址B的操作權(quán),便開始進行對第二地址B的一系列操作。
所述步驟二包括以下步驟:
步驟二十一,第一CUP模塊對第一正常存儲模塊空間的第二地址B進行操作,第二CUP模塊對第二正常存儲模塊空間的第四地址BB進行操作;則第一CUP模塊向AOC本體模塊的第一地址A發(fā)送讀操作,申請對第二地址B的操作權(quán)限,第二CUP模塊向AOC本體模塊的AA發(fā)送讀操作,申請第四地址BB的操作權(quán)限;假設(shè)在這之前第二地址B與第四地址BB的操作權(quán)限都已經(jīng)被釋放(即第一地址A與第三地址AA的值都為0);當AOC本體模塊檢測到第一CUP模塊對第一地址A的讀操作后,會向原子存儲模塊的第一地址A發(fā)送一個讀操作,讀到的數(shù)據(jù)為0,將0返回給第一CUP模塊,表示第一CUP模塊取得對第二地址B的操作權(quán);同時,會向第一地址A發(fā)送一個寫操作,對該地址寫入1;由于第一地址A與第三地址AA是兩個不同的地址,AOC本體模塊對第一地址A的寫1操作不會影響到第三地址AA的值;因此,第二CUP模塊對第三地址AA的讀操作返回的數(shù)據(jù)也為0,第二CUP模塊取得對第四地址BB的操作權(quán);
步驟二十二,第一CUP模塊取得對第二地址B的操作權(quán)后,便開始對第二地址B進行一系列操作;同時,第二CUP模塊取得對第四地址BB的操作權(quán)后,也開始對第四地址BB進行一系列操作,而不需要等到第一CUP模塊完成對第二地址B的操作;同理,第一CUP模塊的對第二地址B的一系列操作,也不需要等第二CUP模塊對第四地址BB的一系列操作完成;
步驟二十三,第一CUP模塊完成對第二地址B的操作后,對第一地址A進行寫0操作,釋放對第二地址B的操作權(quán);同理,第二CUP模塊完成對第四地址BB的操作后,對第三地址AA進行寫0操作,釋放對第四地址BB的操作權(quán)。
所述步驟三由于變量N是非共享的,因此,第二CUP模塊不需要從AOC本體模塊處申請對變量N的操作權(quán),直接操作即可;而第一CUP模塊對共享變量K的操作不會鎖定總線模塊,因此,不會影響第二CUP模塊對N的操作,可以并行完成,提高總線利用效率。
通常一個SOC系統(tǒng)中,除了一個CUP模塊和一個Memory(存儲)模塊外,還會存在其他的一個Master模塊(主模塊)與一個Slave模塊(從模塊);如果采用一個LOCK操作實現(xiàn)共享變量的原子操作,則在原子操作期間,其他Master訪問其他Slave的所有操作將都不被總線響應(yīng),極大降低了總線利用效率;而本方案實現(xiàn)原子操作不會采用任何LOCK操作,在原子操作期間,不會影響其他Master訪問其他Slave的操作,提高了總線利用效率。
以上所述的具體實施例,對本發(fā)明的解決的技術(shù)問題、技術(shù)方案和有益效果進行了進一步詳細說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實施例而已,并不用于限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。