《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 硬件實(shí)時(shí)操作系統(tǒng)信號(hào)量管理的設(shè)計(jì)與實(shí)現(xiàn)
硬件實(shí)時(shí)操作系統(tǒng)信號(hào)量管理的設(shè)計(jì)與實(shí)現(xiàn)
來源:電子技術(shù)應(yīng)用2010年第11期
李 巖,谷萍萍
(哈爾濱理工大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,,黑龍江 哈爾濱 150080)
摘要: 信號(hào)量管理是操作系統(tǒng)中頻繁運(yùn)行的程序段之一,。為提高實(shí)時(shí)操作系統(tǒng)RTOS的響應(yīng)能力,提出了基于FPGA硬件實(shí)現(xiàn)信號(hào)量管理的設(shè)計(jì)方案,。采用片內(nèi)寄存器實(shí)現(xiàn)事件控制塊(ECB),、映射表等存儲(chǔ)結(jié)構(gòu),使用組合邏輯電路實(shí)現(xiàn)信號(hào)量管理模塊,,提高了信號(hào)量創(chuàng)建,、刪除及P/V操作的執(zhí)行速度。
中圖分類號(hào): TP316.2
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2010)11-0048-04
Design and realization of semaphore management in hardware RTOS
LI Yan,,Gu Ping Ping
Harbin University of Science and Technology,Harbin 150080,,China
Abstract: The semaphore management is a program segment which runs frequently in the operating system, in order to enhance the response capability of the real-time operating system RTOS, the design solution that implement the semaphore management based on FPGA is put forward. The storage structure, event control block(ECB) and mapping table, are realized by on-chip registers; The semaphore management is realized by combinational logic circuit; Both of them bring about high speed in creating semaphore, deleting semaphore and P/V operations.
Key words : hardware real-time operating system;semaphore management,;ECB,;FPGA

    隨著嵌入式技術(shù)的發(fā)展,實(shí)時(shí)操作系統(tǒng)RTOS(Real Time Operating System)被越來越多地應(yīng)用在嵌入式系統(tǒng)中,,但是對(duì)現(xiàn)有基于軟件實(shí)現(xiàn)的RTOS,,單純依靠改進(jìn)調(diào)度算法已經(jīng)不能使系統(tǒng)的實(shí)時(shí)性有很大提高。為提高系統(tǒng)的響應(yīng)能力,,國內(nèi)外一些研究機(jī)構(gòu)提出RTOS硬化的方法,,并開始做這方面的研究工作[1]。目前,,軟件硬化常用的有兩種方法:(1)微程序方式,,特點(diǎn)是成本較低,方便靈活,;(2)組合邏輯方式,,特點(diǎn)是速度快、可靠性高,,隨著大規(guī)模集成電路的發(fā)展,,這種方式逐漸顯示出優(yōu)越性[2]。信號(hào)量管理是RTOS中頻繁運(yùn)行的程序段之一,,如果將這一部分用硬件實(shí)現(xiàn),,對(duì)提高機(jī)器的速度將有很明顯的效果。本文采用組合邏輯方式參照uC/OS-II將信號(hào)量管理及ECB管理硬化到一片芯片上,,作為獨(dú)立的模塊與處理器并行工作,。
1 信號(hào)量管理的工作原理
     uC/OS-II中信號(hào)量主要數(shù)據(jù)結(jié)構(gòu)由兩部分組成:(1)信號(hào)量的計(jì)數(shù)值Cnt。當(dāng)數(shù)值為正時(shí)用于記錄可使用的資源數(shù),,當(dāng)數(shù)值為負(fù),,其絕對(duì)值表示等待當(dāng)前信號(hào)量的任務(wù)個(gè)數(shù),;(2)等待該信號(hào)量的任務(wù)列表。信號(hào)量的基本數(shù)據(jù)結(jié)構(gòu)需要申請(qǐng)一個(gè)ECB來存儲(chǔ),。一個(gè)任務(wù)或ISR可以通過ECB向另外的任務(wù)發(fā)信號(hào),,一個(gè)任務(wù)可以等待另一個(gè)任務(wù)或中斷服務(wù)子程序給它發(fā)送信號(hào),多個(gè)任務(wù)可同時(shí)等待同一個(gè)事件的發(fā)生[3],。當(dāng)事件發(fā)生后,,等待該事件的優(yōu)先級(jí)最高的任務(wù)進(jìn)入就緒狀態(tài),觸發(fā)一次任務(wù)調(diào)度[3],。任務(wù)或者中斷服務(wù)子程序都可以給ECB發(fā)信號(hào),,對(duì)ECB進(jìn)行操作。
    信號(hào)量管理的工作原理框圖如圖1所示,。信號(hào)量管理模塊以及事件控制塊管理都是獨(dú)立于CPU的邏輯結(jié)構(gòu),,都可以直接從數(shù)據(jù)總線上獲得數(shù)據(jù)信息進(jìn)行處理,在信號(hào)量管理模塊與ECB的存儲(chǔ)模塊間建立一條數(shù)據(jù)通路,,在不增加總線負(fù)擔(dān)的情況下加快二者間的通信,。這些硬件邏輯獨(dú)立于CPU工作,減少了CPU的工作,,從而提高系統(tǒng)的響應(yīng)能力,。

2 信號(hào)量管理的硬件設(shè)計(jì)與實(shí)現(xiàn)
2.1 ECB的設(shè)計(jì)與實(shí)現(xiàn)

    ECB是實(shí)現(xiàn)信號(hào)量管理的基本數(shù)據(jù)結(jié)構(gòu),因此在設(shè)計(jì)實(shí)現(xiàn)信號(hào)量管理之前,,要先完成ECB管理的設(shè)計(jì)與實(shí)現(xiàn),。本系統(tǒng)中ECB的結(jié)構(gòu)參照μC/OS-II中ECB的結(jié)構(gòu)設(shè)計(jì)。每個(gè)ECB存儲(chǔ)單元包含一個(gè)EventType(事件類型),,用于標(biāo)記當(dāng)前ECB被分配給信號(hào)量,、互斥型信號(hào)量、郵箱還是消息隊(duì)列,;當(dāng)一個(gè)ECB被分配給信號(hào)量時(shí),,Cnt做為信號(hào)量的計(jì)數(shù)器;ECB中的等待表lut用于存儲(chǔ)等待當(dāng)前信號(hào)量任務(wù)的優(yōu)先級(jí)(μC/OS-II中沒有兩個(gè)任務(wù)有相同的優(yōu)先級(jí))[3],。
    ECB中等待表硬件實(shí)現(xiàn)的結(jié)構(gòu)示意圖如圖2所示,。等待表的結(jié)構(gòu)類似一個(gè)8行8列的矩陣,存儲(chǔ)單元編號(hào)從00~77,。當(dāng)一個(gè)任務(wù)在申請(qǐng)當(dāng)前信號(hào)量而沒有獲得時(shí),,應(yīng)將當(dāng)前任務(wù)設(shè)置為等待狀態(tài),令Wr有效,,以申請(qǐng)?jiān)撔盘?hào)量任務(wù)的優(yōu)先級(jí)為地址,,進(jìn)行譯碼,選通相應(yīng)單元后再進(jìn)行寫1操作,。例如,,申請(qǐng)?jiān)撔盘?hào)量的任務(wù)優(yōu)先級(jí)Sid為111111時(shí),,對(duì)其進(jìn)行譯碼,,高三位行地址譯碼為10000000,,低三位列地址譯碼為10000000,選中77單元向其寫入1,,則優(yōu)先級(jí)為111111的任務(wù)進(jìn)入等待狀態(tài),。若要將一個(gè)處于等待表中的任務(wù)刪除,令De有效,,同樣,,根據(jù)地址線選通某一存儲(chǔ)單元,向單元內(nèi)寫0,,從而刪除某一處于等待狀態(tài)的任務(wù),。在控制電路中設(shè)置EventGrp 8位寄存器,用于記錄當(dāng)前各行中是否有等待任務(wù),;如圖2所示,,第i行中某一位置為1,EventGrp(i)=1,,圖中狀態(tài)EventGrp(7)=1,、EventGrp(6)=1、EventGrp(0)=0,。Rd有效時(shí),,控制電路根據(jù)EventGrp采用一定算法生成優(yōu)先級(jí)的高三位;根據(jù)EventGrp讀出某行后生成優(yōu)先級(jí)低三位,;下一時(shí)鐘送出最高優(yōu)先級(jí),。以上為對(duì)等待表進(jìn)行基本讀寫操作的過程。

    該硬件系統(tǒng)中ECB基本存儲(chǔ)單元通過調(diào)用系統(tǒng)的IP核來實(shí)現(xiàn),,根據(jù)存儲(chǔ)數(shù)據(jù)的不同,,采用不同的IP核;多個(gè)基本單元通過一個(gè)上層文件生成一個(gè)ECB單元,,每個(gè)單元再作為一個(gè)基本器件用于實(shí)現(xiàn)整個(gè)ECB的存儲(chǔ)體,。通過地址的譯碼選通ECB單元,根據(jù)控制信號(hào)對(duì)數(shù)據(jù)做讀寫操作,。
2.2 創(chuàng)建/刪除一個(gè)信號(hào)量
    ECB是公共數(shù)據(jù)結(jié)構(gòu),,在傳統(tǒng)的操作系統(tǒng)中創(chuàng)建一個(gè)信號(hào)量時(shí),首先需要申請(qǐng)一個(gè)ECB,,初始化后才可以對(duì)這個(gè)信號(hào)量進(jìn)行P/V等操作,;在刪除一個(gè)信號(hào)量后,要對(duì)信號(hào)量占用的ECB進(jìn)行釋放,。創(chuàng)建信號(hào)量時(shí),,信號(hào)量管理模塊首先要申請(qǐng)一個(gè)空ECB,,查找ECB的整個(gè)存儲(chǔ)體判斷是否有空余的ECB。如果沒有空余ECB,,則信號(hào)量管理模塊將獲得一個(gè)申請(qǐng)失敗信號(hào),;否則將獲得一個(gè)空ECB的地址,并將其返回給創(chuàng)建該信號(hào)量的任務(wù),;再根據(jù)地址初始化ECB[3],。如果用硬件實(shí)現(xiàn)信號(hào)量管理后,按照以上過程進(jìn)行操作會(huì)浪費(fèi)很多時(shí)鐘,,數(shù)據(jù)在模塊間來回傳送增加通信次數(shù),,必然降低系統(tǒng)的執(zhí)行速度。針對(duì)這個(gè)問題,,提出了在信號(hào)量管理模塊中設(shè)置一個(gè)用于記錄ECB使用情況的映射表,,如圖3所示。為方便討論,,假設(shè)系統(tǒng)中ECB有64個(gè)(可以根據(jù)系統(tǒng)中ECB的個(gè)數(shù)來改變表的大小),,表的每個(gè)位置對(duì)應(yīng)一個(gè)ECB,當(dāng)某一位置為0時(shí)表示該位置對(duì)應(yīng)的ECB空閑,,為1時(shí)表示該位置對(duì)應(yīng)的ECB被占用,。如圖3所示,第1行,、第8列為1,,表示偏移地址為000111的ECB被占用;第2行,、第2 列為1,,偏移地址為010010的ECB被占用。

    在創(chuàng)建一個(gè)信號(hào)量時(shí),,查找ECB映射表,,判斷是否有為0的位置。如果沒有則返回申請(qǐng)失??;否則尋找一個(gè)為0的位置,生成ECB的地址,,返回給創(chuàng)建該信號(hào)量的任務(wù),。在映射表中相應(yīng)位置寫1表明該ECB已經(jīng)被占用,下一時(shí)鐘對(duì)申請(qǐng)到的ECB進(jìn)行初始化,,寫入信號(hào)量初始值,。在刪除一個(gè)信號(hào)量時(shí),首先根據(jù)信號(hào)量的ECB地址查詢映射表中對(duì)應(yīng)位置是否為0,,如果為0,,則表示該信號(hào)量已經(jīng)被其他任務(wù)刪除,,返回刪除錯(cuò)誤;否則清除該信號(hào)量在映射表中的記錄,,通知ECB管理模塊將等待該信號(hào)的所有任務(wù)置為就緒態(tài),,觸發(fā)一次任務(wù)調(diào)度,清除ECB中的該信號(hào)量的所有信息,。以上過程中不需要頻繁地去ECB管理模塊中進(jìn)行整體查詢,,因此節(jié)省了大量的通信時(shí)間,。
2.3 申請(qǐng)/釋放一個(gè)信號(hào)量(P/V操作)
    信號(hào)量管理中的主要操作就是P/V操作,,P/V操作實(shí)現(xiàn)的RTL圖如圖4所示。

    (1)P操作(申請(qǐng)某個(gè)信號(hào)量),。令pend_sem有效,,首先應(yīng)判斷申請(qǐng)信號(hào)量的任務(wù)是否為中斷服務(wù)程序(在μC/OS-II中,中斷服務(wù)程序不允許申請(qǐng)一個(gè)信號(hào)量),,如果是則返回申請(qǐng)錯(cuò)誤信息(pend_err為高),,否則進(jìn)行以下操作:令read_cnt有效去ECB管理模塊讀Cnt值;讀回后判斷Cnt的值,。如果Cnt>0,,當(dāng)前申請(qǐng)任務(wù)獲得該信號(hào)量,任務(wù)繼續(xù)執(zhí)行,,返回申請(qǐng)成功信號(hào)pend_err為低,;否則pend_err為高阻,根據(jù)申請(qǐng)類型Pend_type(申請(qǐng)類型在μC/OS-II中分為有等待申請(qǐng)和無等待申請(qǐng))來決定是否修改Cnt值,,是否將申請(qǐng)信號(hào)量的任務(wù)置為等待態(tài),。
    (2)V操作(釋放某個(gè)信號(hào)量)。令post_sem有效,,通過硬件電路使read_cnt有效,,同時(shí)給出信號(hào)量的ECB地址,下一時(shí)鐘讀出Cnt值,,并判斷,;如果Cnt>0則表示沒有任務(wù)等待當(dāng)前信號(hào)量,修改Cnt值,;如果Cnt<0則表示當(dāng)前有任務(wù)等待該信號(hào)量,,修改Cnt值,令select_h有效,,從ECB任務(wù)等待表中找出優(yōu)先級(jí)最高的任務(wù),,通知任務(wù)管理器將該任務(wù)置為就緒態(tài),觸發(fā)一次任務(wù)調(diào)度,。
3 功能仿真
    為驗(yàn)證設(shè)計(jì)對(duì)系統(tǒng)性能的影響,,采用ISE 8.2軟件對(duì)各個(gè)模塊進(jìn)行時(shí)序仿真,。P/V操作仿真結(jié)果如圖5所示。P/V操作需要在兩個(gè)模塊之間進(jìn)行讀寫數(shù)據(jù),,操作過程中,,P/V信號(hào)始終有效。

    (1)pend_sem有效(P操作),。申請(qǐng)信號(hào)量任務(wù)的優(yōu)先級(jí)為01,,申請(qǐng)信號(hào)量的地址為05。pend_sem有效,,令read_cnt為高,,根據(jù)地址pend_addr讀當(dāng)前信號(hào)量的值Cnt,下一個(gè)時(shí)鐘返回?cái)?shù)值Cnt_in為0002,,大于0,;任務(wù)獲得信號(hào)量繼續(xù)執(zhí)行,wr_cnt為高,,Cnt值進(jìn)行減1操作后送Cnt_out寫回ECB,。
    (2)post_sem有效(V操作)。根據(jù)地址讀Cnt值,,Cnt值為FFFE<0(Cnt值以補(bǔ)碼形式存儲(chǔ)),。下一個(gè)時(shí)鐘Cnt進(jìn)行加1操作后寫回ECB,同時(shí)Select_h為高,,從等待該信號(hào)量的任務(wù)列表中選擇出優(yōu)先級(jí)最高的任務(wù)設(shè)置為就緒態(tài),,觸發(fā)一次任務(wù)調(diào)度。
    (3)申請(qǐng)一個(gè)信號(hào)量,。申請(qǐng)信號(hào)量任務(wù)的優(yōu)先級(jí)為03,,申請(qǐng)的信號(hào)量的地址為09。如果下一個(gè)時(shí)鐘讀回的Cnt值為FFFD<0,,并且申請(qǐng)類型為高(有等待申請(qǐng)),,則修改Cnt值寫回,令wr_sid為高,,將當(dāng)前申請(qǐng)任務(wù)的優(yōu)先級(jí)送pend_prio_out寫入等待該信號(hào)的任務(wù)列表中,。如果pend_err為高,則通知任務(wù)管理器將當(dāng)前申請(qǐng)信號(hào)量的任務(wù)阻塞,,并觸發(fā)一次任務(wù)調(diào)度,。
    (4)申請(qǐng)一個(gè)信號(hào)量,讀回的Cnt值為FFFA<0,,但當(dāng)前申請(qǐng)類型為低(無等待申請(qǐng)),,不進(jìn)行任何操作,返回申請(qǐng)失敗,通知任務(wù)管理器將當(dāng)前任務(wù)阻塞,。
    用戶程序在創(chuàng)建,、刪除一個(gè)信號(hào)量以及申請(qǐng)某類共享資源進(jìn)行P/V操作時(shí),用軟件實(shí)現(xiàn)信號(hào)量管理中,,一般先從用戶態(tài)轉(zhuǎn)到系統(tǒng)態(tài),,然后進(jìn)行基本數(shù)據(jù)的查詢、讀出,、比較,、判斷等,再轉(zhuǎn)相應(yīng)的程序入口,,最后還要從系統(tǒng)態(tài)轉(zhuǎn)回用戶態(tài),。而用硬件實(shí)現(xiàn)信號(hào)量管理后進(jìn)行以上操作只需一條讀或?qū)懼噶睿⑶疫@條指令在用軟件實(shí)現(xiàn)的信號(hào)量管理中也是必須的,,其他操作都由硬件邏輯來實(shí)現(xiàn),,簡化了操作過程。從仿真結(jié)果看,,進(jìn)行P/V操作時(shí)只需要3個(gè)時(shí)鐘節(jié)拍,整體的執(zhí)行速度遠(yuǎn)遠(yuǎn)高于軟件,。同時(shí),,RTOS中信號(hào)量的個(gè)數(shù)為多個(gè),信號(hào)量管理在RTOS中頻繁運(yùn)行,。因此,,硬化信號(hào)量管理后對(duì)整個(gè)機(jī)器速度的提高是非常明顯的,特別是對(duì)資源種類多,、數(shù)量大的計(jì)算機(jī)系統(tǒng),,速度的提高就會(huì)更加明顯。另一方面,,由于硬件的可靠性遠(yuǎn)超過軟件的可靠性,,所以硬化后可提高RTOS的可靠性。
參考文獻(xiàn)
[1] 崔建華,,孫紅勝,,王保進(jìn).硬件實(shí)時(shí)操作系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)應(yīng)用,2008(5):34-37.
[2] 屈玉貴,,趙保華,,森下嚴(yán).操作系統(tǒng)中信號(hào)量管理的固化[J].計(jì)算機(jī)應(yīng)用與軟件,1990(06):29-33.
[3] LABROSSE J J.嵌入式實(shí)時(shí)操作系統(tǒng)&mu;C/OS-Ⅱ[M].邵貝貝譯.北京:北京航空航天大學(xué)出版社,,2001:156-176
 

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。