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