新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > CBS算法的RTAI內核調度器設計

CBS算法的RTAI內核調度器設計

作者: 時間:2011-06-06 來源:網(wǎng)絡 收藏

近年來基于雙架構增強Linux操作系統(tǒng)實時性的[1](RealTime Application Interface)在工業(yè)控制等硬實時領域已經(jīng)得到了越來越多的應用。本文提出的器通過采用基于服務策略的對RATI下的EDF器進行擴展,可以保證分配一定的CPU資源供Linux上的軟實時應用,即使在有硬實時任務并發(fā)時也能得到處理器資源。實驗結果證明了基于擴展器的正確性。

本文引用地址:http://www.butianyuan.cn/article/150622.htm

關鍵詞 Linux 內核調度器

引言

  嵌入式系統(tǒng)大多工作在有實時性要求的環(huán)境中,有些嵌入式設備可能需要軟件在ms級時間單位內做出響應,而有些實時任務則要無任何延時地以幾ms的周期執(zhí)行,這就迫切需要一個功能強大、配置方便的實時操作系統(tǒng)來支持。一些商業(yè)的嵌入式實時操作系統(tǒng)(如Windows CE、VxWorks等)價格都比較昂貴,這就促使人們轉向了改造通用嵌入式操作系統(tǒng),使其滿足實時性。這種改造要求源代碼必須開放,而Linux是嵌入式應用中的通用嵌入式操作系統(tǒng),源代碼開放,滿足改造研究上的需求。

  對Linux實時化改造的方案很多,主要有兩種:一種直接修改內核,另一種是采用雙內核機制。第一種方法只能用于軟實時應用,只有雙內核架構的方案可以保障硬實時應用的截止期不被錯過。但是,雙內核架構在軟、硬實時任務混合的應用環(huán)境中還存在一些問題。由于硬實時任務工作在RTAI實時內核空間中,而軟實時任務工作在Linux內核空間中,Linux作為優(yōu)先級最低的任務被頂層實時內核調度執(zhí)行,在一段時間內可以分配給軟實時任務的處理器時間依賴于RTAI硬實時應用對處理器帶寬的要求,而且在不同的時間段內可用的處理器時間一般會有很大的不同。這就難以保障運行在Linux中的軟時應用達到預先設定的服務質量水平。

1 基于服務策略算法的實時調度器

  針對雙內核架構下增強Linux實時性時存在的問題,本文提出一種實時調度器,采用基于服務策略的CBS算法對RTAI內核下的EDF調度器進行擴展,保證在有硬實時任務的同時滿足Linux內核空間下軟實時任務的周轉時間。

1.1 實時調度器基于的CBS算法定義

  為了縮短混合實時任務調度中軟實時任務的響應時間,以及減少軟實時任務錯失截止期,人們提出了多種軟實時任務的調度算法。典型的有基于服務策略的算法,又稱“帶寬預留算法”。該算法在保證硬實時周期任務滿足截止期的前提下,預留出適當?shù)奶幚砥鲙捵鳛榉掌鱽硖幚碥泴崟r任務,常用的算法有CBS、TBS算法等。服務策略的含義是: 服務器把到達的任務放入一個非優(yōu)先規(guī)則的隊列中,該隊列的第一個任務根據(jù)分配的截止期插入EDF調度隊列中,如果隊列的第一個任務被插入到調度隊列等待調度,則稱“服務器是合格的”,否則稱“服務器是不合格的”;如果隊列的第一個任務正在執(zhí)行,則稱“服務器為活動的”。下面給出了采用CBS算法時軟實時任務在不影響硬實時任務截止期的情況下是否可以調度的判別準則。

  假定某一實時任務Ti的處理器帶寬記為(Ci,Pi),表示任務Ti在周期Pi內最多占用Ci的處理器時間。定義實時任務Ti的處理器利用率為:

按此在新窗口瀏覽圖片

  現(xiàn)假定系統(tǒng)中n個實時任務,記為{T1,T2,…,Tn},對應著n個處理器帶寬參數(shù),記為(Ci,Pi),其中i=1, 2,…,n。則此任務集可調度的條件為:

按此在新窗口瀏覽圖片

滿足上式時任務集是可調度的。其中Umax是EDF算法調度時CPU處理器利用率的最大值。

  CBS算法步驟詳細定義如下:

 ?、?一個CBS服務器用預留執(zhí)行能力cs和有序對(Qs,Ts)來表示。其中,Qs表示服務器的最大執(zhí)行能力補充值,Ts表示服務器周期。服務器帶寬Us=Qs/Ts。服務器截止期的初始值ds,0=0,而任意時刻,服務器的修正截止期ds,k和服務器相關聯(lián)。
 ?、?被服務器服務的任務(隊列的第一個任務)被分配一個動態(tài)截止期di,j,該截止期等于當前服務器截止期ds,k。
  ③ 不管一個任務什么時候執(zhí)行,服務器的預留執(zhí)行能力cs都以相同的數(shù)量遞減。
  ④ 當預留執(zhí)行能力cs遞減到零時,馬上被重置為最大執(zhí)行能力補充值Qs,同時產生新的服務器截止期ds,k+1=ds,k+Ts。
 ?、?在時刻t,如果存在一個服務的任務Ji,j(ri,j≤t≤fi,j),那么稱“CBS處于活動狀態(tài)”,否則稱為“空閑狀態(tài)”。
  ⑥ 當一個作業(yè)Ji,j到達時,如果此時服務器處于活動狀態(tài),那么任務的服務請求進入掛起任務隊列,此隊列需是非搶先原則的隊列(如先進先出隊列)。
 ?、?當一個任務Ji,j到達,且服務器處于空閑狀態(tài)時,如果cs≥(ds,k-ri,j)Us,那么服務器產生一個新的服務器截止期ds,k+1=ri,j+Ts,并且把預留執(zhí)行能力cs重置為最大執(zhí)行能力補充值Qs,否則服務器使用當前的服務器截止期ds,k和當前的預留執(zhí)行能力cs來對任務進行服務。
 ?、?當一個任務完成時,服務器利用當前的預留執(zhí)行能力和截止期繼續(xù)為掛起任務隊列中的任務服務。如果掛起任務隊列中沒有任務,那么服務器變成空閑狀態(tài)。
 ?、?在任何時刻,服務器分配給任務的截止期為最后生成的服務器截止期。

1.2 EDF調度器的CBS算法擴展

1.2.1 EDF調度器的總體結構

  先引入一種“虛擬任務”的概念。所謂“虛擬任務”,就是指由RTAI底層實時小內核按EDF算法直接調度執(zhí)行的一種特殊的硬實時任務,對應于Linux用戶空間的某一軟實時應用。其任務截止期由RTAI內核下的CBS服務器計算得出。

  本文將RATI內核下的EDF調度器進行了以下擴展:

  ① 在EDF調度層,仍然采用原RTAI內核下調度器采用的EDF調度算法,對硬實時周期任務和虛擬任務集合進行調度;而CBS服務器則按一定的比例占用處理機時間,同時通過服務器接口與一個實時應用相對應,為其提供資源服務。
 ?、?在服務器層有CBS服務器核和CBS服務器接口。

  CBS服務器核的主要功能是根據(jù)傳入的相關調度信息維護底層實時小內核中的可用CBS服務器隊列,在任務開始、掛起、終止等調度時執(zhí)行相應的事件處理函數(shù)來調整CBS服務器的屬性參數(shù),實現(xiàn)CBS算法。

  EDF調度器擴展如圖1所示。

按此在新窗口瀏覽圖片
圖1 EDF調度器擴展

  在服務器接口中,由于硬實時任務工作在RTAI實時內核下,而軟實時任務一般工作在Linux內核下,因此服務器維護的虛擬任務為了與實際的實時任務建立對應,就需要一個接口來實現(xiàn)它們的映射關系。本文通過這個接口層來為Linux內核中的實時任務和RTAI內核下的虛擬任務提供映射實現(xiàn)。

1.2.2 EDF調度器擴展后調度主要算法步驟

 ?、?不同類型的新應用程序到達時,通過服務器接口層中的系統(tǒng)調用對其進行判別控制檢查,主要通過式(2)來進行。如果通過檢查,則說明調度新到達的應用程序不會影響硬實時任務的截止期。
 ?、谕ㄟ^判別檢查之后,CBS服務器為其創(chuàng)建一個與新應用程序對應的虛擬任務,并根據(jù)新應用程序傳入的調度參數(shù)和自己的調度策略,計算得到虛擬任務的任務截止期。如果此時服務器是活動的,將此新虛擬任務掛入服務器維護的先進先出隊列。取出服務器的先進先出隊列隊首虛擬任務,并根據(jù)任務截止期大小進入RTAI實時內核的EDF就緒隊列;同時,新應用程序也加入到Linux內核下相應的調度對象集合中,調度對象集合是一個由與新任務相匹配的具體調度器調度的集合,這個調度器基于某種調度算法,不是本文的討論重點,但是如果從整個系統(tǒng)的實現(xiàn)來說,這些都是必不可少的部分。本文重點實現(xiàn)的是RTAI內核下對軟硬實時混合調度的支持。
  ③ 虛擬任務與RATI下的硬實時周期任務一起由EDF調度器統(tǒng)一調度分配。

1.3 EDF調度器的擴展實現(xiàn)

  根據(jù)擴展方案,下面討論在對EDF調度器進行擴展時所涉及的關鍵問題及解決途徑。

1.3.1 EDF調度層擴展的關鍵問題

  首先是實時內核的虛擬任務和Linux用戶空間中的軟實時任務的映射問題。軟實時任務是運行在用戶空間的Linux進程中。它通過CBS服務器接口層中的新增系統(tǒng)調用rt_schedule_test()進入準入測試后,調用CBS服務器接口層的新增系統(tǒng)調用rt_create_virtual_task()創(chuàng)建虛擬任務,并且傳入軟實時應用的進程ID,應用調度器ID在虛擬任務結構體中保存下來。當虛擬任務被EDF算法調度執(zhí)行時,它通過實時內核中的軟中斷模擬機制保存對應的進程ID,應用調度器ID到中斷暫存表,然后調用rt_switch_to_linux切換到Linux內核。Linux內核通過應用調度器ID找到調度器,將要調度執(zhí)行的進程ID傳給此調度器,由調度器調度此進程執(zhí)行,這就實現(xiàn)了虛擬任務與軟實時應用的對應。

1.3.2 服務器核實現(xiàn)的關鍵問題

 ?、?為減少系統(tǒng)中的全局數(shù)據(jù)結構種類,虛擬任務與實時任務使用同樣的數(shù)據(jù)結構定義。為此,修改了RTAI的實時任務的rt_task_struct結構定義:添加了與虛擬任務相關的屬性,如對應的具體軟實時任務的ID、軟實時任務調度器ID、任務截止期和指向CBS服務器的指針;定義了服務器數(shù)據(jù)結構體rt_CBSServer,屬性參數(shù)有服務器的預留執(zhí)行能力計算值、已使用的服務器預留的計算值、周期、開始時間、截止時間以及服務器先進先出隊列VTQueue。
 ?、?CBS服務器算法的實現(xiàn)。CBS服務器算法需要在虛擬任務到達事件、虛擬任務完成事件以及服務器預留執(zhí)行能力耗盡事件發(fā)生時刻,及時對服務器的相關屬性和虛擬任務屬性進行調整,特別是虛擬任務的截止期和服務器的截止期。

  下面介紹基于服務策略的CBS算法的偽代碼實現(xiàn)。


上一頁 1 2 下一頁

評論


相關推薦

技術專區(qū)

關閉