多處理器下的硬實時操作系統(tǒng)研究
0、引言
Linux 是一個具有廣闊前景的操作系統(tǒng),從桌面工作站到低端服務(wù)器,處處都可見它的身影?,F(xiàn)如今,Linux 正全力進軍嵌入式系統(tǒng)和高端服務(wù)器系統(tǒng)領(lǐng)域,但它的技術(shù)缺陷卻限制了它的競爭力:雖然Linux繼承了傳統(tǒng)Unix的公平調(diào)度機制即分時調(diào)度策略,提供了一個穩(wěn)定的操作系統(tǒng)的管理系統(tǒng),但是它仍然不能解決實時系統(tǒng)要求的納秒級的中斷延遲、任務(wù)切換時間,即便是當前的2.6內(nèi)核,也只是在linux內(nèi)核中添加了一些可搶占點,對實時性的支持也還是不盡人意。
現(xiàn)如今提出了一種將實時任務(wù)與SMP體系結(jié)構(gòu)相結(jié)合的方案,由于它將處理器以實時與非實時的方式進行了劃分,所以稱之為不對稱的多處理器原則。盡管這種方案是可行的,但是它仍存在一個很大的弊端:在非實時處理器負載過重的情況下,實時處理器可能會處在空閑的狀態(tài),這樣就造成了極大的資源浪費。于是一種對這種方案進行拓展的實時系統(tǒng)――ARTiS系統(tǒng)便應(yīng)運而生。
1、 ATRiS簡介
ATRiS是一個以多處理器(SMP)架構(gòu)為基礎(chǔ),對linux進行實時拓展的系統(tǒng)。它的核心思想是:“將多個處理器進行分類,即分為實時處理器(RT CPU)和非實時處理器(NRT CPU),在實際的運行當中,它將通過自身的遷移機制實現(xiàn)非實時任務(wù)在進入不可強占狀態(tài)前遷移到非實時處理器,以便實時處理器及時響應(yīng)實時任務(wù)。并通過改進的負載平衡機制使ATRiS系統(tǒng)充分發(fā)揮SMP架構(gòu)的優(yōu)勢。
1.1 ATRiS任務(wù)與處理器的劃分
在ATRiS系統(tǒng)中不僅將處理器分為了實時處理器與非實時處理器,而且將任務(wù)也分成了三種類型,分別是RT0任務(wù)、RT1+任務(wù)以及Linux任務(wù),分別對應(yīng)于現(xiàn)實中的硬實時任務(wù),軟實時任務(wù)和非實時任務(wù)。下面給出了處理器與任務(wù)之間的關(guān)系:
RT0任務(wù):對應(yīng)于要處理的硬實時任務(wù),具有最高的優(yōu)先級。并且每一個RT0任務(wù)都會與唯一的一個實時處理器綁定,于是RT0任務(wù)就只能運行在實時的處理器上。
RT1+任務(wù):對應(yīng)于要處理的軟實時任務(wù),可以運行在實時處理器,也可以運行在非實時處理器上。但是當它要運行在實時處理器上時,必須是處于可搶占的狀態(tài),否則就要遷移到非實時處理器上。
Linux任務(wù):即非實時的linux任務(wù),與RT1+任務(wù)一樣,它也可以運行在實時處理器上,并且當它執(zhí)行到一段不可搶占的代碼時需要遷移至非實時的處理器。
1.2 遷移機制
ARTiS中遷移機制的目標是:在保證可以實時響應(yīng)RT0任務(wù)的前提下,盡可能多的發(fā)揮多處理器的并行特性。為了滿足這一目標,它要求實時處理器上的非RT0任務(wù)在進入到不可搶占的代碼段時必須自動遷移到非實時處理器。為了使遷移不受阻礙的發(fā)生,ARTiS去掉了處理器之間的共享鎖,取而代之的是一個FIFO隊列,用它來實現(xiàn)非實時處理器與實時處理器之間的交互。也就是說,ARTiS中的處理器將通過這個FIFO隊列來存放或者取出需要遷移的非RT0任務(wù)。
1.3 負載平衡機制
通常的負載平衡機制是指:通過在多臺計算機之間合理地分配負載,使各臺計算機的負載基本均衡。但是在ARTiS系統(tǒng)中RT0任務(wù)是不可遷移的,而且 linux原有的負載平衡機制只是針對于處理對稱處理器(實時處理器與實時處理器,非實時處理器與非實時處理器)之間的負載平衡,并未設(shè)計不對稱處理器之間平衡負載的方法。所以相對的負載平衡機制也更加復(fù)雜。
2、ATRiS機制實現(xiàn)
ATRiS系統(tǒng)的實現(xiàn)機制是通過改變內(nèi)核源碼實現(xiàn)的,由于它所要實現(xiàn)的只是在實時處理器空閑時將非實時任務(wù)遷移至實時處理器,而在非實時任務(wù)到達不可搶占代碼時遷移出實時處理器,所以它所要執(zhí)行的主要功能就是:在實時處理器空閑的狀態(tài)下,通過自身的負載平衡機制將非實時處理器上的任務(wù)遷移至實時處理器。而當非實時任務(wù)執(zhí)行到不可搶占的代碼時,利用自身的遷移機制將非實時任務(wù)遷移至非實時處理器。
盡管如此,ARTiS并不是完全另起爐灶,它只是在linux原有的任務(wù)遷移和負載平衡機制上添加一些自己的函數(shù),由此來實現(xiàn)自身特有的任務(wù)遷移和負載平衡機制。
2.1 任務(wù)遷移機制
ATRiS系統(tǒng)的遷移機制的核心就是:當一個非RT0任務(wù)將要執(zhí)行到不可搶占的代碼部分時,將會自動的從實時處理器遷移至非實時處理器??梢詫⒃摍C制看作兩步:第一步是確定非RT0任務(wù)的不可搶占點,即確定遷移的時機;第二步則是要將任務(wù)從實時處理器遷移至非實時處理器,即實現(xiàn)遷移。
確定遷移的時機
在ARTiS系統(tǒng)中的任務(wù)是通過注冊而產(chǎn)生的(RT0任務(wù)就是通過int artis_enter_rt0(pid_t pid, int rt_cpu)函數(shù)注冊的,RT1+任務(wù)是通int artis_enter_rt1plus(pid_t pid, int policy, int priority)函數(shù)注冊),由于RT0任務(wù)是不存在被搶占的問題的,所以這里只考慮RT1+問題發(fā)生遷移的時機,ARTiS系統(tǒng)認為,如果一個任務(wù)執(zhí)行了系統(tǒng)函數(shù)preempt_disable()或local_irp_disable()時,則表明他將要進入不可搶占狀態(tài),即需要進行任務(wù)的遷移。 ARTiS系統(tǒng)在上述的兩個函數(shù)中添加了函數(shù)artis_try_to_migrate(),該函數(shù)首先會判斷是否滿足遷移其他條件(例如:判斷當前運行的處理器是否是實時處理器等),然后調(diào)用函數(shù)artis_request_for_migration()請求遷移。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論