• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      多核實(shí)時(shí)操作系統(tǒng)TOPPERS/FMP移植研究※

      2013-09-25 03:05:18方華啟任慰何頂新
      關(guān)鍵詞:內(nèi)核調(diào)用隊(duì)列

      方華啟,任慰,何頂新

      (華中科技大學(xué)自動(dòng)化學(xué)院,武漢430074)

      引 言

      TOPPERS/FMP是由日本名古屋大學(xué)高田廣章教授發(fā)起的開放實(shí)時(shí)嵌入式軟件平臺TOPPERS(Toyohashi Open Platform for Embedded Real-time Systems)中的一個(gè)面向于多核環(huán)境的嵌入式實(shí)時(shí)操作系統(tǒng),全稱是Flexible Multiprocessor Profile RTOS。FMP目前已經(jīng)移植到了部分ARM架構(gòu)的處理器、Nios II處理器以及瑞薩的SH處理器。

      1 TOPPERS/FMP的多核擴(kuò)展

      TOPPERS組織為功能分散型多核處理器開發(fā)了一款實(shí)時(shí)操作系統(tǒng)TOPPERS/FDMP(Function Distributed MultiProcessor RTOS kernel),也是遵循μITRON規(guī)范標(biāo)準(zhǔn)功能集。在TOPPERS/FDMP內(nèi)核的基礎(chǔ)上,TOPPERS組織開發(fā)一個(gè)新的內(nèi)核TOPPERS/FMP,支持動(dòng)態(tài)任務(wù)遷移功能,也是針對TOPPERS/ASP內(nèi)核實(shí)現(xiàn)的多核擴(kuò)展,主要支持對稱多核處理器。

      1.1 總體結(jié)構(gòu)

      TOPPERS/FMP內(nèi)核總體結(jié)構(gòu)如圖1所示,F(xiàn)MP內(nèi)核支持對稱多核處理器,所有的處理器共享同一個(gè)程序鏡像。

      圖1 TOPPERS/FMP內(nèi)核總體結(jié)構(gòu)

      FMP內(nèi)核還引入了自旋鎖的機(jī)制,主要用在處理器間進(jìn)行資源競爭時(shí)保護(hù)共享資源。

      1.2 內(nèi)核管理與調(diào)度

      TOPPERS/FMP內(nèi)核中新增了一個(gè)結(jié)構(gòu)體,叫做PCB(Processor Control Block),主要用于管理每個(gè)處理器的數(shù)據(jù),內(nèi)核為每個(gè)處理器維護(hù)一個(gè)這樣的結(jié)構(gòu)體。內(nèi)核可以單獨(dú)管理每個(gè)處理器的狀態(tài)。內(nèi)核中task、task excpt、cyc handler、alm handler這些可執(zhí)行單元(Processing Unit)被劃分到指定的處理器上,屬于處理器私有資源,對應(yīng)的處理器上的內(nèi)核代碼會對其進(jìn)行初始化操作。而dataqueue、eventflag、mailbox、memfix、pridataq、spin_lock這些內(nèi)核對象(Kernel Object)屬于共享資源,由主處理器完成初始化操作。為了方便應(yīng)用開發(fā),TOPPERS/FMP內(nèi)核擴(kuò)展了靜態(tài)配置器,使其支持對多核處理器進(jìn)行配置,屬于某一個(gè)處理器內(nèi)核的可執(zhí)行單元和內(nèi)核對象,被歸為一個(gè)類型,在靜態(tài)配置腳本中叫做CLASS,配置腳本示例略——編者注。

      內(nèi)核采用了局部隊(duì)列調(diào)度的方式,在PCB中維護(hù)了一個(gè)局部的就緒隊(duì)列(ready_queue)。采用這種調(diào)度方式,任務(wù)基本無需在不同處理器間切換,提高了任務(wù)執(zhí)行的效率,但是如果應(yīng)用開發(fā)者沒有設(shè)計(jì)好應(yīng)用程序,有可能出現(xiàn)某些處理器核心負(fù)載很輕,某些處理器核心負(fù)載很重的負(fù)載不均衡的狀態(tài),多核處理器的性能將無法充分發(fā)揮。為了解決負(fù)載不均衡的狀態(tài),TOPPERS/FMP內(nèi)核提供了一組用于任務(wù)遷移的系統(tǒng)調(diào)用API,應(yīng)用開發(fā)者可以根據(jù)自己需求來進(jìn)行應(yīng)用層的任務(wù)遷移管理,TOPPERS/FMP內(nèi)核沒有直接在內(nèi)核層提供動(dòng)態(tài)遷移的功能的主要原因是由于無法確保內(nèi)核的實(shí)時(shí)性。

      1.3 中斷管理

      多核處理器中中斷管理分為兩種類型:①所有處理器共享一個(gè)中斷源;②每個(gè)處理器有自己的中斷源。多核處理器一般引入全局中斷控制器進(jìn)行總體的中斷管理,每個(gè)處理器內(nèi)部有自己私有的中斷控制器。針對這樣的改變,F(xiàn)MP內(nèi)核也引入全局中斷的管理部分,將中斷號與中斷處理程序號的高位區(qū)域(如果是32位的編號,就是高16位)用于標(biāo)示對應(yīng)進(jìn)行處理的處理器ID。這樣對于那些中斷號一樣的中斷,通過高位區(qū)域進(jìn)行處理器ID的判別也可以知道哪個(gè)處理器響應(yīng)哪個(gè)中斷[8]。對于每個(gè)處理器內(nèi)部的中斷處理流程還是采用TOPPERS標(biāo)準(zhǔn)中斷模型。

      1.4 處理器間通信

      多核操作系統(tǒng)實(shí)現(xiàn)處理器間系統(tǒng)調(diào)用(inter-processor system call)采用兩種實(shí)現(xiàn)方式:直接內(nèi)存操作(direct memory access)和遠(yuǎn)程過程調(diào)用(remote procedure call)。遠(yuǎn)程過程調(diào)用方式廣泛應(yīng)用于非對稱處理器,或是不存在共享內(nèi)存的消息傳遞型處理器中,執(zhí)行時(shí)間不確定。TOPPERS/FMP內(nèi)核為了保證實(shí)時(shí)性,采用了直接內(nèi)存操作的方式。

      1.5 同 步

      TOPPERS/FMP內(nèi)核啟動(dòng)過程中,采用了多級屏障鎖的方式保證每個(gè)處理器的啟動(dòng)進(jìn)程一致,以確保內(nèi)核正確啟動(dòng)。

      TOPPERS/FMP內(nèi)核采用了直接操作其他處理器控制塊(Control Block)的方式來實(shí)現(xiàn)處理器間的系統(tǒng)調(diào)用,這就需要保證處理器間的操作是互斥的。TOPPERS/FMP內(nèi)核采用了自旋鎖的方式來實(shí)現(xiàn)互斥,自旋鎖是通過test and set的方式實(shí)現(xiàn)的。鎖的粒度嚴(yán)重影響著系統(tǒng)調(diào)用的靈活性以及響應(yīng)時(shí)間,鎖的粒度越高,并行性越好,但是響應(yīng)時(shí)間就有可能得不到保證,TOPPERS/FMP實(shí)現(xiàn)了三種不同粒度的鎖,用戶可以在內(nèi)核配置的時(shí)候進(jìn)行選擇。這三種粒度的鎖分別是巨鎖(giant lock)、處理器鎖(processor lock)、細(xì)粒度鎖(fine-grained lock)。FMP內(nèi)核在每個(gè)處理器上將會定義兩種鎖:任務(wù)鎖(task lock)和對象鎖(object lock)。為了避免死鎖,TOPPERS/FMP內(nèi)核規(guī)定了鎖獲取的順序。在進(jìn)行系統(tǒng)調(diào)用時(shí),先獲取對象鎖然后獲取任務(wù)鎖,釋放鎖時(shí)先釋放任務(wù)鎖,再釋放對象鎖。由于獲取到對象鎖后,其他的任務(wù)有可能修改了待獲取的任務(wù)控制塊,TOPPERS/FMP內(nèi)核采用一種簡單的重試機(jī)制,在獲取到任務(wù)鎖時(shí),檢查對應(yīng)的任務(wù)是否已經(jīng)被修改,如果被修改就釋放對應(yīng)的任務(wù)鎖,開始重新獲取任務(wù)鎖,循環(huán)往復(fù)。

      2 TOPPERS/FMP在ZYNQ上的移植

      2.1 移植工作

      TOPPERS/FMP的代碼主要也是在GNU環(huán)境下進(jìn)行開發(fā)的,而且開發(fā)移植大致與TOPPERS/ASP的移植[10]基本一致,只是增加了一些多核相關(guān)的移植工作。

      2.1.1 內(nèi)核的啟動(dòng)

      TOPPERS/FMP內(nèi)核在ZYNQ上的啟動(dòng)如圖2所示,主要分為三個(gè)流程:Bootloader階段,內(nèi)核啟動(dòng)——匯編部分,內(nèi)核啟動(dòng)——C語言部分。

      由于各自處理器執(zhí)行的初始化內(nèi)容不一樣,導(dǎo)致執(zhí)行每一階段的耗時(shí)不一樣,為了能保證每個(gè)階段處理器都能同時(shí)開始運(yùn)行,引入屏障同步的功能來實(shí)現(xiàn)處理器同步。

      2.1.2 標(biāo)準(zhǔn)中斷處理模型移植

      ZYNQ上的中斷分為私有外設(shè)中斷(PPI)、共享外設(shè)中斷(SPI)和軟中斷(SGI)。軟中斷主要用于處理器間通信。中斷優(yōu)先級總共有32級,所有的中斷產(chǎn)生以后,將會產(chǎn)生IRQ或者FIQ異常。FMP內(nèi)核中配置成IRQ模式進(jìn)行中斷處理,因此所有的中斷產(chǎn)生后,將直接跳轉(zhuǎn)到IRQ的中斷向量入口處,程序可以通過查詢中斷控制器中的相應(yīng)的寄存器獲知當(dāng)前的請求的中斷號,然后通過查表的方式就可以跳轉(zhuǎn)到對應(yīng)的中斷處理程序。

      中斷處理的實(shí)現(xiàn)的流程圖如圖3所示,需要注意的是如果內(nèi)核配置時(shí)采用了處理器鎖或者細(xì)粒度鎖的方式就需要釋放已經(jīng)獲取的第一階段和第二階段鎖。還有在進(jìn)行中斷處理時(shí)還需要判斷對應(yīng)的中斷是不是偽中斷,如果是的話就直接返回。偽中斷表示原始的中斷已經(jīng)不再等待處理了,通常是因?yàn)榱硗庖粋€(gè)處理器已經(jīng)在處理這個(gè)中斷了。

      圖2 TOPPERS/FMP內(nèi)核的啟動(dòng)流程

      2.1.3 任務(wù)遷移支持

      為了實(shí)現(xiàn)任務(wù)遷移,需要在目標(biāo)依賴部分實(shí)現(xiàn)如下功能的函數(shù):①用于當(dāng)前任務(wù)的遷移函數(shù)支持,dispatch_and_migrate;②用于任務(wù)結(jié)束時(shí)的遷移函數(shù)支持,exit_and_migrate。兩個(gè)函數(shù)均在任務(wù)上下文中,在CPU鎖定狀態(tài)下,獲取到待遷移任務(wù)的源處理器和目的處理器的鎖后被調(diào)用。實(shí)現(xiàn)的流程圖如圖4所示。

      本文分別實(shí)現(xiàn)采用私有定時(shí)器、私有看門狗定時(shí)器、全局定時(shí)器三種方式作為系統(tǒng)時(shí)鐘驅(qū)動(dòng)。還有為了實(shí)現(xiàn)每個(gè)處理器單獨(dú)的日志輸出功能,在ZedBoard上通過MIO引出另外一路串口,并且在程序上實(shí)現(xiàn)了雙串口的驅(qū)動(dòng)程序。然后采用FMP內(nèi)核自帶的sample測試?yán)踢M(jìn)行測試,驗(yàn)證功能正常,移植成功。

      2.2 內(nèi)核性能測試

      2.2.1 測試環(huán)境說明

      本文所做的評測實(shí)驗(yàn)均是在ZedBoard上完成,ZYNQ處理器運(yùn)行在667MHz,MMU和數(shù)據(jù)Cache、指令Cache均使能,所有測試均運(yùn)行10 000次,分別在DDR RAM和片內(nèi)的OCM RAM單獨(dú)進(jìn)行測試。

      FMP內(nèi)核配置:內(nèi)核采用巨鎖方式,內(nèi)核系統(tǒng)時(shí)鐘采用32位私有定時(shí)器實(shí)現(xiàn),測試所用計(jì)時(shí)器采用64位的全局定時(shí)器。

      2.2.2 測試結(jié)果

      本文對內(nèi)核進(jìn)行了如下評測實(shí)驗(yàn):內(nèi)核啟動(dòng)、任務(wù)切換、任務(wù)遷移、信號量、事件標(biāo)志位以及優(yōu)先級數(shù)據(jù)隊(duì)列的時(shí)間消耗測試。

      測試發(fā)現(xiàn)啟用了MMU和Cache后,除了內(nèi)核啟動(dòng)外,在DDR RAM和OCM RAM的測試時(shí)間基本一致。

      按照圖2中FMP內(nèi)核啟動(dòng)流程所示,程序中將從各處理器的必要的硬件相關(guān)初始化開始到第三階段屏障同步開始記作FMP內(nèi)核啟動(dòng)消耗時(shí)間,各處理器消耗的啟動(dòng)時(shí)間表略——編者注。由于處理器1作為主處理器比從處理器多的任務(wù)因此啟動(dòng)時(shí)間比處理器2長一些,由于MMU和Cache是在啟動(dòng)過程使能的,導(dǎo)致在OCM中運(yùn)行FMP內(nèi)核的啟動(dòng)時(shí)間稍快于DDR。

      FMP內(nèi)核中各個(gè)API執(zhí)行的場景不同導(dǎo)致執(zhí)行時(shí)間不同,表略——編者注。

      任務(wù)激活A(yù)PI act_tsk按照5種測試場景進(jìn)行測試。具體測試場景略——編者注。

      任務(wù)指定處理器激活A(yù)PI mact_tsk按照2種測試場景進(jìn)行測試。具體測試場景略——編者注。

      任務(wù)遷移API mig_tsk按照以下3種測試場景進(jìn)行測試。具體測試場景略——編者注。

      任務(wù)休眠API slp_tsk和任務(wù)喚醒API wup_tsk測試了均會引起任務(wù)切換的場景。

      信號量釋放API sig_sem按照以下2種測試場景進(jìn)行測試。具體測試場景略——編者注。

      優(yōu)先級數(shù)據(jù)隊(duì)列發(fā)送API snd_pdq按照如下方法進(jìn)行測試:在發(fā)送低優(yōu)先級的數(shù)據(jù)隊(duì)列前,先發(fā)送若干個(gè)高優(yōu)先級的數(shù)據(jù)隊(duì)列,測試了高優(yōu)先級數(shù)據(jù)隊(duì)列的個(gè)數(shù)與snd_pdq的執(zhí)行時(shí)間的關(guān)系,如圖5所示,執(zhí)行時(shí)間與高優(yōu)先級數(shù)據(jù)隊(duì)列個(gè)數(shù)近似成正比關(guān)系。

      圖3 TOPPERS/FMP內(nèi)核中斷移植

      圖4 任務(wù)遷移目標(biāo)依賴部分需實(shí)現(xiàn)函數(shù)

      圖5 優(yōu)先級數(shù)據(jù)隊(duì)列發(fā)送snd_pdq執(zhí)行時(shí)間

      事件標(biāo)志位設(shè)置API set_flg按照如下方法進(jìn)行測試:在set_flg執(zhí)行之前,有若干個(gè)低優(yōu)先級的任務(wù)等待事件標(biāo)志位,測試了等待事件標(biāo)志位的任務(wù)的個(gè)數(shù)與set_flg執(zhí)行的時(shí)間的關(guān)系,如圖6所示,執(zhí)行時(shí)間與等待事件標(biāo)志位的低優(yōu)先級的任務(wù)的個(gè)數(shù)近似成正比關(guān)系。

      結(jié) 語

      圖6 事件標(biāo)志位設(shè)置set_flg執(zhí)行時(shí)間

      鑒于ZYNQ處理器上支持TrustZone功能,下一步將移植TOPPERS/SAFEG[9]嵌入式虛擬機(jī)到ZYNQ處理器上,以實(shí)現(xiàn)在該處理器上同時(shí)運(yùn)行兩個(gè)操作系統(tǒng),一個(gè)實(shí)時(shí)操作系統(tǒng)用于實(shí)時(shí)控制,另外一個(gè)通用操作系統(tǒng)(如Linux)用于實(shí)現(xiàn)一些比較復(fù)雜的功能,如人機(jī)交互、網(wǎng)絡(luò)通信等。

      編者注:本文為期刊縮略版,全文見本刊網(wǎng)站www.mesnet.com.cn。

      [1] 薛一波,王海霞.計(jì)算機(jī)系統(tǒng)發(fā)展的必然趨勢——多核計(jì)算[J] .中國計(jì)算機(jī)學(xué)會通訊,2010,11(6):60-62.

      [2] 多核[EB/OL] .[2013-06] .http://baike.baidu.com/view/2219502.htm.

      [3] 彭曉明,郭浩然,龐建民.多核處理器——技術(shù),趨勢和挑戰(zhàn)[J] .計(jì)算機(jī)科學(xué),2012,39(z3).

      [4] 李彥冬,雷航.多核操作系統(tǒng)發(fā)展綜述[J] .計(jì)算機(jī)應(yīng)用研究,2011,28(9):3215-3219.

      [5] Tomiyama H,Honda S,Takada H.Real-time operating systems for multicore embedded systems[C]//SoC Design Conference,2008.ISOCC'08.International.IEEE,2008:I-62-I-67.

      [6] 姜春茂,倪蘊(yùn)濤,黃春梅.嵌入式多核操作系統(tǒng)關(guān)鍵技術(shù)[J] .科技導(dǎo)報(bào),2012(11):30.

      [7] 黃國睿,張平,魏廣博.多核處理器的關(guān)鍵技術(shù)及其發(fā)展趨勢[J] .計(jì)算機(jī)工程與設(shè)計(jì),2009,30(10):2414-2418.

      [8] Xilinx.Zynq-7000All Programmable SoC Technical Refer ence Manual(UG585V1.5),2013.

      [9] 任慰,何頂新,趙金.開放實(shí)時(shí)嵌入式軟件平臺TOPPERS的研究現(xiàn)狀[J] .單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2012,12(10):8-11.

      [10] 任慰,何頂新,趙金.一種新型嵌入式實(shí)時(shí)操作系統(tǒng)的移植研究[J] .Computer Engineering,2013,39(5).

      猜你喜歡
      內(nèi)核調(diào)用隊(duì)列
      萬物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
      強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
      隊(duì)列里的小秘密
      基于多隊(duì)列切換的SDN擁塞控制*
      軟件(2020年3期)2020-04-20 00:58:44
      核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
      基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
      Linux內(nèi)核mmap保護(hù)機(jī)制研究
      在隊(duì)列里
      LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
      豐田加速駛?cè)胱詣?dòng)駕駛隊(duì)列
      天津市| 普陀区| 雷波县| 新宁县| 罗平县| 天台县| 鱼台县| 永丰县| 绥中县| 墨玉县| 黔南| 竹北市| 东莞市| 婺源县| 贵阳市| 利辛县| 麦盖提县| 巴塘县| 龙南县| 手机| 通江县| 富源县| 安康市| 海原县| 昭觉县| 西昌市| 井研县| 延安市| 二手房| 沛县| 苍南县| 新沂市| 班戈县| 松江区| 绥江县| 乐至县| 广西| 达拉特旗| 辉南县| 桦川县| 城市|