專利名稱:單芯片多處理器任務(wù)調(diào)度管理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種單芯片多處理器任務(wù)管理調(diào)度方法??蓱?yīng)用于多指令多數(shù)據(jù)(MIMD) 架構(gòu)的單芯片多處理器系統(tǒng),子處理器既可以是同構(gòu)處理器也可以是異構(gòu)處理器,亦可應(yīng)用 于其它單芯片多處理器領(lǐng)域。
背景技術(shù):
單芯片多處理器任務(wù)調(diào)度是指調(diào)度和管理運行在用戶程序中的并行任務(wù),使得任務(wù)能夠 在各個子處理器中并發(fā)地執(zhí)行,從而達(dá)到程序的并行處理,提高了處理器的處理速度和處理 效率。
在過去的幾十年里,隨著微電子技術(shù)的不斷進(jìn)步,微處理器有了迅速的發(fā)展,微處理器 的工作頻率已從MHz級上升到GHz級。同時,處理器能夠在同一周期里執(zhí)行多條指令,可 以設(shè)計和開發(fā)指令并行處理,這些極大地提高了計算機的性能。如指令流水處理和超標(biāo)量 執(zhí)行,超長指令處理器等。但是,隨著指令并行度的增加和指令復(fù)雜度的提高,處理器的硬 件設(shè)計和編譯器設(shè)計將變得越來越復(fù)雜,而程序的并行處理反而得不到很大的提高,并且, 這些性能的提高很大程度還和處理器工作的時鐘頻率有關(guān)。同時, 一味地提高時鐘頻率,會 導(dǎo)致芯片功耗的增加,僅僅在時鐘上消耗的功率就占了整個芯片的50%以上。為此,以單芯 片多處理器架構(gòu)為基礎(chǔ)的任務(wù)并行處理方法可以很好地解決單純開發(fā)指令的并行性和提高工 作的時鐘頻率所帶來的一系列難題,多核處理器要發(fā)揮多核的性能需要提高程序的并行度, 單線程程序無法發(fā)揮多核處理器的優(yōu)勢。單芯片多處理器可以將具有內(nèi)在執(zhí)行并行性的復(fù)雜 任務(wù)分解為一系列緊密聯(lián)系的子任務(wù),并行實現(xiàn)要完成的任務(wù)。多核架構(gòu)的SOC (Multi-Processor System on Chip, MP SOC)可以完成將復(fù)雜任務(wù)分解到多個核中去執(zhí)行的任 務(wù)。由于不同內(nèi)核可以執(zhí)行不同的任務(wù),多核架構(gòu)在一個周期內(nèi)可以執(zhí)行多個指令。這種并 行處理使得整個系統(tǒng)的性能與使用單個處理器串行處理相同任務(wù)相比,有了很大的改進(jìn)。另 外,多核架構(gòu)的設(shè)計可以復(fù)用原有的成熟單核處理器作為處理器核心,從而可以縮短設(shè)計和 驗證周期,節(jié)省開發(fā)成本,符合SOC設(shè)計的基本思路,多核架構(gòu)是未來SOC發(fā)展的一個趨 勢。單芯片多處理器以數(shù)量的優(yōu)勢獲得性能的提高,且設(shè)計簡單,可以大大提高處理器的速 度,是未來處理器發(fā)展的一個重要方向。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種應(yīng)用于單芯片多處理器中的任務(wù)調(diào)度方法,它基于多指令多 數(shù)據(jù)流(MIMD)單芯片多處理器架構(gòu),能夠自動地分析系統(tǒng)的工作狀態(tài)并做出合理的任務(wù)分配
和調(diào)度,把系統(tǒng)中的各種并行任務(wù)分配到子處理器中,使得各個子處理器發(fā)揮最大的工作效 率,實現(xiàn)程序最大化并行處理。 為達(dá)到上述目的,本發(fā)明的構(gòu)思如下
單芯片多處理器的優(yōu)勢主要是任務(wù)的并行處理,借用并行處理的優(yōu)勢而提高處理器整體 的性能,所以,設(shè)計單芯片多處理器主要完成任務(wù)的合理并行處理。任務(wù)的合理調(diào)度和管理 是任務(wù)并行處理的關(guān)鍵。單芯片多處理器任務(wù)調(diào)度可以理解為運行在單芯片多處理器上的操 作系統(tǒng),不過,它是由硬件來實現(xiàn)的,不同于一般的軟件操作系統(tǒng)。它可以完成任務(wù)調(diào)度, 任務(wù)通信,存儲管理等一般軟件操作所做的工作。用戶程序?qū)θ蝿?wù)調(diào)度系統(tǒng)來說是一個主進(jìn) 程,主進(jìn)程里面調(diào)用了大量的子進(jìn)程或子任務(wù),這種硬件操作系統(tǒng)就是根據(jù)目前子處理器的 工作情況和內(nèi)存的使用情況,自動地分配任務(wù)給各個子處理器,實現(xiàn)任務(wù)的并行處理。任務(wù) 管理系統(tǒng)可以進(jìn)行任務(wù)預(yù)取,任務(wù)預(yù)取也就是預(yù)先取得任務(wù)號,取得的任務(wù)號放入任務(wù)池中, 任務(wù)池的大小和子處理器的數(shù)量成正比,可以由用戶自定義。任務(wù)調(diào)度管理系統(tǒng)根據(jù)各個子 處理器的工作情況,自動地從任務(wù)池中把任務(wù)分配給各個空閑的子處理器。子處理器的工作 情況用子處理器工作狀態(tài)寄存器SUB—PROCESSOR_STATE—REG來指示,其中的特定位表示 該子處理器的工作狀態(tài)為空閑或者忙。任務(wù)池的狀態(tài)用任務(wù)池狀態(tài)寄存器TASK—REG來指 示,用來表示任務(wù)池的狀態(tài)。任務(wù)調(diào)度管理模塊根據(jù)這兩個寄存器的狀態(tài)來判斷任務(wù)的分配 與否,通過DMA模塊把特定任務(wù)的可執(zhí)行代碼直接加載到子處理器的本地ROM中,并喚醒 子處理器,使得子處理器立刻處理分配的任務(wù)。 根據(jù)上述構(gòu)思,本發(fā)明采用下述技術(shù)方案
一種單芯片多處理器任務(wù)調(diào)度管理方法,其特征在于多指令多數(shù)據(jù)流(MIMD)單芯片多處理器 體系,對系統(tǒng)中的并行任務(wù)進(jìn)行任務(wù)調(diào)度,任務(wù)分配,任務(wù)管理以及對子處理器的管理,實 現(xiàn)單芯片多處理器快速的任務(wù)并行處理。 上述單芯片多處理器任務(wù)調(diào)度管理方法的具體步驟為
a. 設(shè)置一個具有任務(wù)緩沖功能的任務(wù)池TASK_POOL,它是一個任務(wù)隊列存儲器,任務(wù) 池的大小由用戶根據(jù)系統(tǒng)的要求自定義。
b. 設(shè)置一個任務(wù)調(diào)度管理模塊,用來調(diào)度和分配任務(wù)池中的任務(wù),任務(wù)的調(diào)度是根據(jù)子 處理器的工作情況自動地完成。
c. 設(shè)置一個任務(wù)加載DMA控制模塊,任務(wù)的加載是在任務(wù)調(diào)度管理模塊的控制下,由 DMA操作完成任務(wù)指令的加載。
設(shè)置上述任務(wù)池的方法為
a. 任務(wù)池的大小根據(jù)系統(tǒng)的大小來確定,當(dāng)系統(tǒng)處于復(fù)位狀態(tài)時,任務(wù)池處于關(guān)閉狀態(tài), 里面不存放任何任務(wù),復(fù)位結(jié)束后,立刻從任務(wù)庫中取得任務(wù)放入任務(wù)池,當(dāng)任務(wù)池 滿時,停止取任務(wù)。
b. 管理模塊分配任務(wù)給子處理器處理時,任務(wù)池流出以前取得的任務(wù),并從任務(wù)庫中取
得新的任務(wù)補充任務(wù)池,直至任務(wù)池滿為止。
c. 系統(tǒng)運行至將要結(jié)束而不需要從任務(wù)庫中取新的任務(wù)時,任務(wù)池只需要根據(jù)任務(wù)調(diào)度 模塊的任務(wù)分配情況流出任務(wù),而不在取新的任務(wù)補充任務(wù)池,程序運行結(jié)束時,任 務(wù)池為空。
設(shè)置上述任務(wù)管理調(diào)度模塊的具體步驟為
a. 任務(wù)池狀態(tài)寄存器TASK一REG,用來指示任務(wù)池的狀態(tài)。
b. 子處理器工作狀態(tài)寄存器SUB—PROCESSOR—STATE—REG,用來指示子處理器的工 作狀態(tài),寄存器的位數(shù)與子處理器的個數(shù)相同。子處理器工作狀態(tài)寄存器 SUB—PROCESSOR_STATE—REG的每一位的值與子處理器的工作狀態(tài)有關(guān),復(fù)位表 示子處理器空閑,置位表示子處理器忙。
c. 査詢?nèi)蝿?wù)池狀態(tài)寄存器TASK_REG和子處理器工作狀態(tài)寄存器 SUB—PRCEOSSOR—STATE_REG,根據(jù)兩個寄存器的狀態(tài)進(jìn)行任務(wù)的分配。
d. 査詢子處理器的工作狀態(tài),采用優(yōu)先權(quán)輪換的方式査詢各個子處理器的工作狀態(tài),根 據(jù)查詢結(jié)果,任務(wù)調(diào)度管理模塊具有以下幾種工作狀態(tài)
NO_TASK: 表示任務(wù)池中沒有任何任務(wù),停止任務(wù)分配,子處理器全部休眠。 ALL—BUSY:表示所有子處理器工作在忙狀態(tài),停止任務(wù)分配,等待有空閑的子處 理器出現(xiàn)后再分配。
BEGIN—LOAD:表示査詢得到某一子處理器空閑,開始分配任務(wù),發(fā)送LOAD—BEGIN
信號給DMA控制器。 LOAD: 表示等待接收DMA模塊的LOAD—END信號,LOAD—END=1,任務(wù)
分配結(jié)束,喚醒子處理器使它處理分配的任務(wù);LOAD—END=0,任務(wù)
分配還沒有結(jié)束,繼續(xù)分配任務(wù)。
e. 處理器控制模塊,控制子處理器的工作和休眠,子處理器控制模塊接收任務(wù)調(diào)度模塊 的START和STOP信號,START=1,任務(wù)分配結(jié)束,喚醒子處理器開始處理新分配 的任務(wù);STOP4,子處理器處理任務(wù)結(jié)束,休眠子處理器。
設(shè)置上述任務(wù)加載DMA控制器的具體步驟為
a.標(biāo)定 一 個任務(wù)在任務(wù)庫中的起始地址(TASK_BEGIN—ADDR)和結(jié)束地址 (TASK—END—ADDR)
b. 接收任務(wù)調(diào)度管理模塊發(fā)送的任務(wù)號(TASK NO),確定該任務(wù)的起始地址和結(jié)束地 址,并把它賦給DMA控制器的輸出地址信號ROM一ADDRESS。
c. 接收任務(wù)調(diào)度管理模塊的任務(wù)分配起始信號LOAD—BEGIN。
d. 逐步遞增DMA控制器的輸出地址信號ROM—ADDRESS,若該地址等于任務(wù)的結(jié)束 地址(TASK—END—ADDR),向任務(wù)管理調(diào)度模塊發(fā)出LOAD_END信號,表示任務(wù)分配 完畢。
設(shè)置上述任務(wù)池狀態(tài)寄存器的具體步驟為
a. 任務(wù)流出任務(wù)池,任務(wù)池狀態(tài)寄存器進(jìn)行一次左移操作,最高位補O
b. —個新的任務(wù)流入任務(wù)池,進(jìn)行一次右移操作,但最高位補l。
c. TASK—EMPTY信號表示任務(wù)池為空,TASK_FULL信號表示任務(wù)池為滿。 設(shè)置上述子處理器狀態(tài)寄存器的具體步驟為
a. 任務(wù)分配完成并喚醒子處理器后,設(shè)置子處理器為忙狀態(tài), SUB—PROCESSOR—STATE_REG對應(yīng)的位為1。
b. 子處理器處理完分配的任務(wù)后,設(shè)置子處理器為空閑狀態(tài), SUB—PROCESSOR—STATE_REG對應(yīng)的位為0。
c. SUB—PROCESSOR—ALL—BUSY信號表示子處理器全部處于忙狀態(tài),任務(wù)調(diào)度管理模 塊停止任務(wù)的分配。
設(shè)置上述査詢?nèi)蝿?wù)池狀態(tài)寄存器TASK—REG和子處理器工作狀態(tài)寄存器 SUB—PRCEOSSOR—STATE—REG的具體步驟為
a. 對任務(wù)池狀態(tài)寄存器TASK_REG做縮位"或"運算,并把結(jié)果給TASK_EMPTY信號, TASK_EMPTY- "0"表示任務(wù)池為空;對任務(wù)池狀態(tài)寄存器TASK_REG做縮位"與" 運算,并把結(jié)果給TASK—FULL信號,TASK_FULL=1;表示任務(wù)池為滿。
b. 查詢子處理器工作狀態(tài)寄存器SUB—PRCEOSSOR—STATE—REG的每一位就可以獲得 對應(yīng)子處理器的工作狀態(tài)。
c. 對子處理器工作狀態(tài)寄存器SUB—PRCEOSSOR—STATE—REG做縮位"與"運算,把 結(jié)果給SUB—PROCESSOR—ALL—BUSY信號,SUBPROCESS OR—ALL—BUSY-l,表 示子處理器全部處于忙狀態(tài)。
設(shè)置上述前向循環(huán)查詢子處理器的工作狀態(tài)的具體步驟為
a. 查詢SUB—PROCESSOR—ALL—BUSY信號,SUB—PROCESSOR—ALL BUSY
=1,停止査詢子處理器狀態(tài);SUB—PROCESSOR_ALL_BUSY=0,開始前向查詢子處 理器
b. 按P1->P2->P3->P4的順序査詢子處理器工作狀態(tài)寄存器的每一位,這里P1,P2,P3,P4
代表各個子處理器。
c. SUB—PRCEOSSOR—STATE_REG[X] = O,對X所對應(yīng)的處理器進(jìn)行任務(wù)分配; SUB—PRCEOSSOR—STATE—REG[X] = 1 ,繼續(xù)査SUB—PRCEOSSOR—STATE— REG的下一位,直到查到空閑的子處理器為止。這里"X"代表某個子處理器。 本發(fā)明與現(xiàn)有技術(shù)相比較,具有如下特點和優(yōu)點
本發(fā)明基于多指令多數(shù)據(jù)(MIMD)單芯片多處理器架構(gòu),把運行在單芯片多處理器中的復(fù) 雜任務(wù)有序地分配到多個子處理器中,能實現(xiàn)指令的并行處理。實現(xiàn)軟件操作系統(tǒng)的硬件處 理,提高了整個單芯片多處理器的處理速度和效率。在硬件上實現(xiàn)了動態(tài)的任務(wù)分配和管理, 由于任務(wù)調(diào)度管理模塊是一個獨立的任務(wù)管理模塊,可嵌入到同構(gòu)或者異構(gòu)的多處理器系統(tǒng) 中,所以本發(fā)明既可應(yīng)用于同構(gòu)的多處理器系統(tǒng),也可應(yīng)用于異構(gòu)的多處理器系統(tǒng)。本方法 可應(yīng)用于具有獨立本地ROM的各種子處理器組成的單芯片多處理器系統(tǒng),例如8051體系結(jié) 構(gòu)的MCU,并且子處理器之間可以是同構(gòu)也可以是異構(gòu)。
-
圖1是本發(fā)明一個實例的單芯片多處理器的結(jié)構(gòu)圖。 圖2是圖1示例任務(wù)池狀態(tài)寄存器操作圖。 圖3是圖1示例的子處理器狀態(tài)寄存器操作圖。 圖4是圖1示例的前向査詢操作示意圖。 圖5是圖1示例的子處理器控制示意圖。 圖6是圖1示例的DMA操作流程。
具體實施例方式
本發(fā)明的一個優(yōu)選實施例詳述如下本單芯片多處理器任務(wù)調(diào)度管理方法,其特征在于 多指令多數(shù)據(jù)流MIMD單芯片多處理器體系,用硬件的方式代替軟件操作系統(tǒng)中的進(jìn)程管理, 對運行于系統(tǒng)中的并行任務(wù)進(jìn)行任務(wù)調(diào)度,任務(wù)分配,任務(wù)管理以及對子處理器的管理,實 現(xiàn)單芯片多處理器快速的任務(wù)并行處理。本單芯片多處理器任務(wù)調(diào)度方法做成一個獨立的模 塊,嵌入在4個以51架構(gòu)作為子處理器的單芯片多處理器系統(tǒng)中,對4個子處理器進(jìn)行任務(wù) 調(diào)度和管理,四個子處理器分別命名為P1,P2,P3,P4。本任務(wù)調(diào)度管理模塊所應(yīng)用的系統(tǒng)具有如 下結(jié)構(gòu),如圖l所示-
1:具有一個任務(wù)庫,里面包含了各種任務(wù)的可執(zhí)行代碼,任務(wù)庫采用連續(xù)編址,用任務(wù)號對
每個任務(wù)的起始地址和結(jié)束地址進(jìn)行定位,任務(wù)庫的大小為4K。 2:具有一個容量大小為4的任務(wù)池,用來緩存用戶程序中的任務(wù)號,用任務(wù)號來指示單芯片
多處理器要處理的任務(wù)。 3:任務(wù)調(diào)度管理模塊內(nèi)嵌在本單芯片多處理器系統(tǒng)中,在完成任務(wù)調(diào)度管理的同時,分別完
成任務(wù)的DMA控制,子處理器的工作和休眠控制。 4: 4個子處理器為基于51架構(gòu)的MCU,能處理在獨立MCU上所能處理的所有任務(wù)。 5. —個DMA控制模塊,用來完成指令從任務(wù)庫到子處理器本地cache的數(shù)據(jù)直接寫入。
從以上的結(jié)構(gòu)可以看出,任務(wù)調(diào)度管理模塊管理著整個單芯片多處理器系統(tǒng)的運行,在提 高單芯片多處理器系統(tǒng)性能方面起著十分重要的作用。用戶程序是一個主進(jìn)程,內(nèi)部包含了 大量的子進(jìn)程,對應(yīng)于子處理器來說,就是任務(wù)。子處理器具有本地CACHE用于存放任務(wù) 指令。本單芯片多處理器系統(tǒng)具有一個龐大的任務(wù)庫,里面包含了任務(wù)對應(yīng)的可執(zhí)行代碼, 用戶程序經(jīng)過編譯器編譯后,抽取其中的并行任務(wù),并產(chǎn)生任務(wù)號流,任務(wù)號流入任務(wù)池, 任務(wù)調(diào)度管理模塊在取得任務(wù)號后,根據(jù)系統(tǒng)的運行狀態(tài)完成任務(wù)的分配,調(diào)度和管理,從 而實現(xiàn)任務(wù)的并行處理。 具體的實現(xiàn)方法為
(1) 任務(wù)池的設(shè)置
在任務(wù)管理調(diào)度模塊中,定義任務(wù)池狀態(tài)寄存器TASK—REG,系統(tǒng)復(fù)位后,任務(wù)池中沒 有任務(wù),系統(tǒng)會立刻取得任務(wù)號流入任務(wù)池,任務(wù)調(diào)度管理模塊發(fā)現(xiàn)任務(wù)池不為空后,立刻 啟動任務(wù)的調(diào)度分配。任務(wù)池會不斷地填充新的任務(wù),直到任務(wù)池滿(信號TASK—FULL有 效),停止新的任務(wù)流入。任務(wù)池有兩種工作狀態(tài)
a) :流入任務(wù),任務(wù)從經(jīng)過編譯器編譯的用戶程序中取得任務(wù)號,流入任務(wù)池,每流入一個
新的任務(wù),任務(wù)狀態(tài)寄存器TASK一REG將做一次右移操作,最高位補l。
b) :流出任務(wù),任務(wù)被任務(wù)調(diào)度管理模塊取走,任務(wù)流出任務(wù)池,任務(wù)狀態(tài)寄存器TASK一REG
做一個左移操作,最低位補O,任務(wù)狀態(tài)寄存器的內(nèi)容將被任務(wù)調(diào)度管理模塊査詢,以獲得
合理的任務(wù)分配,任務(wù)狀態(tài)寄存器的操作如圖2所示。 設(shè)置任務(wù)池的目的是任務(wù)預(yù)取,解決任務(wù)分配和任務(wù)取得之間的瓶頸,提高任務(wù)的調(diào)度和管 理速度。
(2) 子處理器狀態(tài)寄存器的設(shè)置
系統(tǒng)復(fù)位后,4個子處理器都工作在休眠狀態(tài),任務(wù)調(diào)度管理模塊根據(jù)任務(wù)池的情況對 子處理器分配任務(wù)結(jié)束后,將喚醒子處理器,并對子處理器狀態(tài)寄存器對應(yīng)的位置1,當(dāng)任 務(wù)處理器結(jié)束后,將子處理器處于休眠狀態(tài),把狀態(tài)寄存器對應(yīng)的位置0,子處理器狀態(tài)寄 存器操作如圖3所示
(3)前向査詢子處理器狀態(tài)
對于本例的單芯片多處理器的系統(tǒng),共有4個子處理器,在算法上按照Pl-P2-P3-P4的 順序查詢子處理器的工作狀態(tài),具體的操作流程如下
a) :系統(tǒng)剛開始運行時 系統(tǒng)剛開始運行時分為復(fù)位狀態(tài)和復(fù)位后的狀態(tài)。
1:系統(tǒng)復(fù)位時,所有的子處理器都工作在休眠模式下,任務(wù)調(diào)度管理模塊停止一切任務(wù)分 配。
2:系統(tǒng)復(fù)位后,任務(wù)調(diào)度管理模塊的操作歩驟如下
1) 首先啟動任務(wù)的獲取,任務(wù)調(diào)度管理模塊從用戶應(yīng)用程序中取得任務(wù)放入任務(wù)池, 如果任務(wù)數(shù)小于4個,則需要取到任務(wù)池滿信號TASK—FULL有效為止。
2) 任務(wù)池中有任務(wù)后,TASK—EMPTY-O,任務(wù)池不空,立刻進(jìn)行任務(wù)分配,首先分配子 處理器l(Pl)—個任務(wù),當(dāng)任務(wù)分配完畢后,喚醒Pl同時把子處理器狀態(tài)寄存器 SUB—PROCESSOR—STATE—REG的第0位置1 ,接著繼續(xù)査詢并分配任務(wù)給子處理 器2(P2)直至4個子處理器全部分配完。
b) :系統(tǒng)運行中間過程中
系統(tǒng)運行過程中的任務(wù)調(diào)度管理模塊主要負(fù)責(zé)子處理器的資源回收和新的任務(wù)的分配,具 體工作步驟如下
1) 當(dāng)子處理器向任務(wù)調(diào)度管理模塊發(fā)出任務(wù)操作結(jié)束信號(TASK一PROCESS一END)后,
將停止向該處理器驅(qū)動時鐘信號,迫使子處理器停止工作,等待下一個任務(wù)的處理。
2) 任務(wù)調(diào)度管理模塊連續(xù)查詢?nèi)蝿?wù)池狀態(tài)寄存器(TASK—REG)和子處理器狀態(tài)寄存器 (SUB PROCESSOR—STATE—REG)來確定新的任務(wù)的分配
*若子處理器全忙信號SUB—PRO—ALL_BUSY有效,停止任務(wù)分配,等待該信號無 效。
*按照P1-P2-P3-P4-P1前向查詢,優(yōu)先權(quán)輪換的方式查詢子處理器狀態(tài)寄存器 (SUB_PROCESSOR_STATE—REG),若査詢到某一位為0,則分配新的任務(wù)給對應(yīng) 的子處理器,并修改子處理器狀態(tài)寄存器的對應(yīng)位。 c):系統(tǒng)運行快結(jié)束時
當(dāng)系統(tǒng)運行至快要結(jié)束整個用戶程序時,預(yù)取的結(jié)束任務(wù)號(TASK—END—NO)為FF時, 表示用戶程序已經(jīng)沒有其他子任務(wù),將停止任務(wù)流入任務(wù)池,此時任務(wù)池只流出任務(wù),不流 進(jìn)任務(wù)。當(dāng)任務(wù)池空信號TASK一EMPTY有效時,停止任務(wù)的分配,等到最后一個任務(wù)被子
處理器處理完后,所有的子處理器都處于休眠模式,系統(tǒng)自動進(jìn)入完全低功耗運行的休眠模 式。
整個任務(wù)調(diào)度管理模塊是個龐大的狀態(tài)機,它需要分析系統(tǒng)運行的狀態(tài),主要是分析兩 個狀態(tài)寄存器任務(wù)池狀態(tài)寄存器和子處理器狀態(tài)寄存器,根據(jù)這兩個狀態(tài)寄存器的信息進(jìn) 行狀態(tài)的轉(zhuǎn)移,前向査詢子處理器進(jìn)行任務(wù)分配如圖4所示。
(4) 子處理器控制模塊
子處理器控制模塊的設(shè)計主要是協(xié)助任務(wù)調(diào)度管理模塊控制子處理器的運行或者休眠, 主要通過控制子處理器的時鐘使能來實現(xiàn)。如圖5所示,它主要接受任務(wù)調(diào)度管理模塊的 START信號和STOP信號,子處理器控制模塊是一個獨立的狀態(tài)機,具有兩種工作狀態(tài)分 別為RUN和STOP。
STOP:系統(tǒng)復(fù)位或在RUN狀態(tài)下接收到STOP信號后,進(jìn)入STOP狀態(tài),子處理器時鐘使 能信號PX—CLOCK—ENABLE信號無效,停止子處理器時鐘的輸入。
RUN:在STOP狀態(tài)下接收到START信號后,進(jìn)入RUN狀態(tài),喚醒處于休眠狀態(tài)下的子處 理器,子處理器時鐘使能信號PX一CLOCK一ENABLE有效,子處理器正常工作。
(5) DMA控制模塊
DMA控制模塊主要負(fù)責(zé)把子處理器要處理的任務(wù)從任務(wù)庫中加載到子處理器的本地 CACHE里面,如圖6所示,它的具體操作步驟如下
a) 接受任務(wù)調(diào)度管理模塊的任務(wù)號(TASKNO)
b) 根據(jù)任務(wù)調(diào)度管理模塊發(fā)送的任務(wù)號,查找得到該任務(wù)在任務(wù)庫的起始地址和結(jié)束地址, 并把這兩個地址賦給ROM—ADDRESS—BEGIN和ROM_ADDRESS—END兩個寄存器。
c) 接收任務(wù)管理調(diào)度模塊的任務(wù)加載啟動信號LOAD—BEGIN,若LOAD—BEGIN=l,啟動 DMA操作,產(chǎn)生兩套地址,分別為RAM—ADDRESS和ROM—ADDRESS 。RAM—ADDRESS 為子處理器本地CACHE的地址信號,ROM—ADDRESS為任務(wù)庫的ROM地址信號, ROM—ADDRESS的起始地址為ROM—ADDRESS—BEGIN,兩個地址分別在時鐘信號的每 一拍加一,同時CACHE和任務(wù)庫ROM的片選信號CS—LIB_ROM和CS_PRO—RAM使 能有效,子處理器CACHE的使能信號WR—PRO—RAM使能有效,任務(wù)庫ROM和子字處 理器本地CACHE通過數(shù)據(jù)總線之間相連,根據(jù)兩個RAM的TIMING的對比,使得數(shù) 據(jù)能夠完全地讀出和寫入。
d) DMA模塊會不斷地監(jiān)視 ROM—ADDRESS信號,若
ROM_ADDRESS=ROM—ADDRESS—END ,表示本次任務(wù)分配結(jié)束,停止地址信號 RAM_ADDRESS和ROM_ADDRESS的遞增。并使 CS—LIB—ROM , CS—PRO—RAM,WR一PRO—RAM等控制信號無效,并在下一個時鐘周期清零RAM—ADDRESS 和ROM—ADDRESS信號,同時向任務(wù)調(diào)度管理模塊發(fā)生任務(wù)加載結(jié)束信號LOAD一END。
權(quán)利要求
1. 一種單芯片多處理器任務(wù)調(diào)度管理方法,其特征在于多指令多數(shù)據(jù)流MIMD單芯片多處理器體系,用硬件的方式代替軟件操作系統(tǒng)中的進(jìn)程管理,對運行于系統(tǒng)中的并行任務(wù)進(jìn)行任務(wù)調(diào)度,任務(wù)分配,任務(wù)管理以及對子處理器的管理,實現(xiàn)單芯片多處理器快速的任務(wù)并行處理;具體步驟為a. 設(shè)置一個具有任務(wù)緩沖功能的任務(wù)池TASK POOL,它是一個任務(wù)隊列存儲器,任務(wù)池的大小由用戶根據(jù)系統(tǒng)的要求自定義;b. 設(shè)置一個任務(wù)調(diào)度管理模塊,用來調(diào)度和分配任務(wù)池中的任務(wù),任務(wù)的調(diào)度和管理是根據(jù)子處理器的工作情況自動完成的;c. 設(shè)置一個任務(wù)加載DMA模塊,任務(wù)的加載是在任務(wù)調(diào)度管理模塊的控制下,由DMA操作完成任務(wù)指令的加載;2. 根據(jù)權(quán)利1所述的任務(wù)調(diào)度管理方法,其特征在于所述設(shè)置任務(wù)池的方法為a. 任務(wù)池的大小根據(jù)系統(tǒng)的大小來確定,當(dāng)系統(tǒng)處于復(fù)位狀態(tài)時,任務(wù)池處于關(guān)閉狀態(tài),里面不存放任何任務(wù),復(fù)位結(jié)束后,立刻從任務(wù)庫中取得任務(wù)放入任務(wù)池,當(dāng)任務(wù)池滿時,停止取任務(wù);b. 任務(wù)管理模塊分配任務(wù)給子處理器處理時,任務(wù)池流出以前取得的任務(wù),并從任務(wù)庫中取得新的任務(wù)補充任務(wù)池,直至任務(wù)池滿為止;c. 系統(tǒng)運行至將要結(jié)束而不需要從任務(wù)庫中取新的任務(wù)時,任務(wù)池只需要根據(jù)任務(wù)調(diào)度模塊的任務(wù)分配情況流出任務(wù),而不再取新的任務(wù)補充任務(wù)池,系統(tǒng)運行結(jié)束時,任務(wù)池為空。
2. 根據(jù)權(quán)利1所述的任務(wù)調(diào)度管理方法,其特征在于所述設(shè)置任務(wù)池的方法為a. 任務(wù)池的大小根據(jù)系統(tǒng)的大小來確定,當(dāng)系統(tǒng)處于復(fù)位狀態(tài)時,任務(wù)池處于關(guān)閉狀態(tài), 里面不存放任何任務(wù),復(fù)位結(jié)束后,立刻從任務(wù)庫中取得任務(wù)放入任務(wù)池,當(dāng)任務(wù)池 滿時,停止取任務(wù);b. 任務(wù)管理模塊分配任務(wù)給子處理器處理時,任務(wù)池流出以前取得的任務(wù),并從任務(wù)庫 中取得新的任務(wù)補充任務(wù)池,直至任務(wù)池滿為止;c. 系統(tǒng)運行至將要結(jié)束而不需要從任務(wù)庫中取新的任務(wù)時,任務(wù)池只需要根據(jù)任務(wù)調(diào)度 模塊的任務(wù)分配情況流出任務(wù),而不再取新的任務(wù)補充任務(wù)池,系統(tǒng)運行結(jié)束時,任 務(wù)池為空。
3. 根據(jù)權(quán)利1所述的任務(wù)調(diào)度管理方法,其特征在于所述設(shè)置任務(wù)管理調(diào)度模塊的具體步 驟為a. 設(shè)置任務(wù)池狀態(tài)寄存器TASK_REG,用來指示任務(wù)池的狀態(tài);TASK_REG中"1"的 個數(shù)就是任務(wù)的個數(shù);b. 設(shè)置子處理器工作狀態(tài)寄存器SUB_PROCESSOR—STATE—REG,用來指示子處理器 的工作狀態(tài),寄存器的位數(shù)與子處理器的個數(shù)相同;子處理器工作狀態(tài)寄存器 SUB—PROCESSOR—STATE_REG的每一位的值與子處理器的工作狀態(tài)有關(guān),"0"表 示子處理器空閑,"1"表示子處理器忙;c. 査詢?nèi)蝿?wù)池狀態(tài)寄存器TASK—REG和子處理器工作狀態(tài)寄存器 SUB_PRCEOSSOR—STATE—REG,根據(jù)兩個寄存器的狀態(tài)進(jìn)行任務(wù)的分配;d. 前向循環(huán)査詢子處理器的工作狀態(tài),根據(jù)優(yōu)先權(quán)輪換的原則順序查詢子處理器的工作 狀態(tài),根據(jù)查詢結(jié)果,任務(wù)調(diào)度管理模塊具有以下幾種工作狀態(tài)NO—TASK: 任務(wù)池中沒有任務(wù),停止任務(wù)分配,子處理器休眠; ALL_BUSY: 所有子處理器處于忙狀態(tài),停止任務(wù)分配,等待有空閑的子處理器出 現(xiàn)后再分配;BEGIN_LOAD:查詢得到某子處理器空閑,開始分配任務(wù),發(fā)送LOAD_BEGIN信號 給DMA控制器;LOAD: 等待接受DMA模塊的LOAD—END信號,LOAD_END=1,任務(wù)分配結(jié)束,喚醒子處理器使它處理分配的任務(wù);LOAD_END=0,任務(wù)分配 還沒有結(jié)束,繼續(xù)分配任務(wù); e.設(shè)置子處理器控制模塊,控制子處理器的工作和休眠,子處理器控制模塊接收任務(wù)調(diào) 度模塊的START和STOP信號,START=1,表示任務(wù)分配結(jié)束,喚醒子處理器處理 新分配的任務(wù);STOP4,子處理器處理任務(wù)結(jié)束,休眠子處理器。
4. 根據(jù)權(quán)利1所述的任務(wù)調(diào)度管理方法,其特征在于所述設(shè)置任務(wù)加載DMA模塊的具體步 驟為a. 標(biāo)定每一個任務(wù)在任務(wù)庫中的起始地址TASK_BEGIN_ADDR和結(jié)束地址 TASK_END_ADDR;b. 接收任務(wù)管理調(diào)度模塊發(fā)送的任務(wù)號,確定該任務(wù)的起始地址和結(jié)束地址,并把它賦 給DMA控制器的子任務(wù)起始地址寄存器ROM_ADDRESS—BEGIN和子任務(wù)結(jié)束地 址寄存器ROM_ADDRESS_END, DMA模塊還輸出任務(wù)庫地址信號ROM_ADDRESS 和子處理器本地CACHE地址信號RAM_ADDRESS;c. 接受任務(wù)調(diào)度管理模塊的任務(wù)分配起始信號LOAD_BEGIN;d. 連續(xù)增加DMA控制器輸出的任務(wù)庫地址信號ROM_ADDRESS和子處理器本地 CACHE地址信號RAM_ADDRESS,若ROM_ADDRESS等于子任務(wù)的結(jié)束地址寄存 器ROM_ADDRESS_END的值,表示任務(wù)分配結(jié)束,向任務(wù)管理調(diào)度模塊發(fā)出 LOAD_END信號,指示任務(wù)分配完畢。
5. 根據(jù)權(quán)利3所述的任務(wù)調(diào)度管理方法,其特征在于所述設(shè)置任務(wù)池狀態(tài)寄存器的具體步 驟為-a. —個任務(wù)流出任務(wù)池,任務(wù)池狀態(tài)寄存器進(jìn)行一次左移操作,最低位補O;b. —個新的任務(wù)流入任務(wù)池,進(jìn)行一次右移操作,但最高位補l;c. 用TASK_EMPTY信號表示任務(wù)池為空,TASK_FULL信號表示任務(wù)池為滿。
6. 根據(jù)權(quán)利3所述的任務(wù)調(diào)度管理方法,其特征在于所述設(shè)置子處理器狀態(tài)寄存器的具體 步驟為a.任務(wù)分配完成并喚醒之處理器后,設(shè)置子處為忙狀態(tài), SUB_PROCESSOR_STATE_REG對應(yīng)的位為1;b. 子處理器處理完分配的任務(wù)后,設(shè)置子處理器為空閑狀態(tài), SUB—PROCESSOR—STATE—REG對應(yīng)的位為0;c. 用SUB_PROCESSOR—ALL_BUSY信號表示子處理器全部處于忙狀態(tài),任務(wù)調(diào)度管 理模塊停止任務(wù)的分配。
7. 根據(jù)權(quán)利3所述的任務(wù)調(diào)度管理方法,其特征在于所述査詢?nèi)蝿?wù)池狀態(tài)寄存器 TASK—REG和子處理器工作狀態(tài)寄存器SUB—PRCEOSSOR_STATE_REG的具體步驟為a. 對池狀態(tài)寄存器TASK_REG做縮位"或"運算,并把結(jié)果給TASK—EMPTY信號, TASK一EMPTY = 0表示任務(wù)池為空;對任務(wù)池狀態(tài)寄存器TASK—REG做縮位"與" 運算,并把結(jié)果給TASK一FULL信號,TASK_FULL=1;表示任務(wù)池滿;b. 査詢子處理器工作狀態(tài)寄存器SUB—PRCEOSSOR_STATE_REG的每一位就可以獲得 對應(yīng)子處理器的工作狀態(tài);c. 對子處理器工作狀態(tài)寄存器SUB—PRCEOSSOR_STATE—REG做縮位"與"運算,把 結(jié)果給SUB_PROCESSOR_ALL—BUSY信號,SUB—PROCESS—ALLBUSY二l,表示子處理器全部處于忙狀態(tài)。
8. 根據(jù)權(quán)利3所述的任務(wù)調(diào)度管理方法,其特征在于所述前向循環(huán)査詢子處理器的工作狀 態(tài)的具體步驟為-a. 査詢SUB—PROCESSOR—ALL—BUSY信號,SUB_PROCESSOR_ALL—BUSY=1,停止查詢子處理器狀態(tài);SUB_PROCESSOR—ALL_BUSY=0,開 始前向查詢子處理器;b. 按優(yōu)先權(quán)輪換的原則順序查詢子處理器工作狀態(tài);c. 如果SUB—PRCEOSSOR_STATE—REG[X] = O,則對X所對應(yīng)的子處理器進(jìn)行任務(wù)分 酉己 ; SUB—PRCEOSSOR—STATE_REG[X]=1 , 繼 續(xù) 査 詢 SUB—PRCEOSSOR_STATE_REG的下一位,直到查到空閑的子處理器為止,這里X 對應(yīng)著某個子處理器。
全文摘要
本發(fā)明涉及一種單芯片多處理器任務(wù)管理調(diào)度方法。本方法是基于多指令多數(shù)據(jù)流(MIMD)單芯片多處理器結(jié)構(gòu)體系,對運行于系統(tǒng)中的并行任務(wù)進(jìn)行任務(wù)調(diào)度,任務(wù)分配,任務(wù)管理和子處理器管理,實現(xiàn)單芯片多處理器的并行處理。單芯片多處理器任務(wù)調(diào)度管理方法可以應(yīng)用于具有獨立本地ROM的各種子處理器組成的單芯片多處理器系統(tǒng),例如8051體系結(jié)構(gòu)的MCU,并且子處理器之間可以是同構(gòu)也可以是異構(gòu)。
文檔編號G06F9/38GK101387952SQ200810200288
公開日2009年3月18日 申請日期2008年9月24日 優(yōu)先權(quán)日2008年9月24日
發(fā)明者峰 冉, 斌 孫, 張一馳, 王堯明, 胡越黎, 科 閆 申請人:上海大學(xué)