新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 提高實(shí)時(shí)操作系統(tǒng)的實(shí)時(shí)性能和可靠性策略

提高實(shí)時(shí)操作系統(tǒng)的實(shí)時(shí)性能和可靠性策略

作者: 時(shí)間:2009-05-06 來(lái)源:網(wǎng)絡(luò) 收藏

本文引用地址:http://m.butianyuan.cn/article/258027.htm
可搶占的內(nèi)核

在大部分通用操作系統(tǒng)中,操作系統(tǒng)的內(nèi)核是不可搶占的。其結(jié)果是,一個(gè)高優(yōu)先級(jí)的進(jìn)程不可能搶占一個(gè)內(nèi)核調(diào)用,而是必須等待整個(gè)調(diào)用完成,即使這個(gè)調(diào)用是由系統(tǒng)中的低優(yōu)先級(jí)進(jìn)程發(fā)起的。另外,當(dāng)經(jīng)常在內(nèi)核調(diào)用中執(zhí)行的驅(qū)動(dòng)程序或其它系統(tǒng)服務(wù)代表一個(gè)客戶線程執(zhí)行的時(shí)候,所有的優(yōu)先級(jí)信息經(jīng)常會(huì)丟失,這導(dǎo)致了不可猜測(cè)的延遲并阻止了關(guān)鍵活動(dòng)的準(zhǔn)時(shí)完成。

而在中,內(nèi)核操作是可搶占的。盡管仍然會(huì)存在一些時(shí)間窗口,在這些時(shí)間窗口中可能沒(méi)有搶占,但是這些時(shí)間間隔應(yīng)該是相當(dāng)短暫的,通常在幾百納秒。另外,必須有一個(gè)關(guān)于搶占被推遲或中斷被禁止的時(shí)間上限,這樣開(kāi)發(fā)者可以確定最壞情形下的等待時(shí)間。

為了實(shí)現(xiàn)這個(gè)目標(biāo),操作系統(tǒng)內(nèi)核必須盡可能簡(jiǎn)潔,只有具有較短執(zhí)行路徑的服務(wù)才被包含在內(nèi)核中,任何需要大量工作的操作必須被安排到外部進(jìn)程或線程。這種方法有助于通過(guò)內(nèi)核確保最長(zhǎng)的不可搶占代碼路徑具有一個(gè)時(shí)間上限。

優(yōu)先級(jí)繼續(xù)

然而,為一個(gè)進(jìn)程設(shè)定一個(gè)高優(yōu)先級(jí)并不總能保證該進(jìn)程能夠搶占低優(yōu)先級(jí)的進(jìn)程。有時(shí)候,系統(tǒng)會(huì)出現(xiàn)一種稱為優(yōu)先級(jí)倒置的狀態(tài),在這種狀態(tài)下,低優(yōu)先級(jí)的進(jìn)程將在“無(wú)意中”阻止較高優(yōu)先級(jí)進(jìn)程占用。優(yōu)先級(jí)倒置可能會(huì)表現(xiàn)為幾種形式,為了防止發(fā)生這種情況,必須提供一種稱為優(yōu)先級(jí)繼續(xù)的功能。

假定系統(tǒng)有三個(gè)進(jìn)程:A,B,Z。這里Z是一個(gè)為A和B提供服務(wù)的“服務(wù)器”進(jìn)程。

現(xiàn)在假定A已經(jīng)請(qǐng)求Z來(lái)執(zhí)行一個(gè)計(jì)算,而在這期間,忽然B需要Z的服務(wù)。因?yàn)锽擁有比A更高的優(yōu)先級(jí),一般會(huì)認(rèn)為Z將立即掛起A的請(qǐng)求并將轉(zhuǎn)向?yàn)锽服務(wù)。但是實(shí)際情況并非如此,因?yàn)閆比B具有更高的優(yōu)先級(jí)。其結(jié)果是,B不能阻止Z完成它當(dāng)前的工作,即對(duì)A做出響應(yīng)。

從效果上看,低優(yōu)先級(jí)的進(jìn)程A占用了更高優(yōu)先級(jí)進(jìn)程B的時(shí)間,這是引入優(yōu)先級(jí)繼續(xù)的原因。通過(guò)使用提供的優(yōu)先級(jí)繼續(xù)機(jī)制,系統(tǒng)可以在A發(fā)出請(qǐng)求的情況下,讓Z繼續(xù)A的低優(yōu)先級(jí)。通過(guò)這種方式,B能夠在任何時(shí)候搶占A的請(qǐng)求。

假如一個(gè)應(yīng)用程序分布于幾個(gè)通過(guò)網(wǎng)絡(luò)連接的處理器,那么RTOS也應(yīng)該支持分布式優(yōu)先級(jí)繼續(xù),這樣可以按照優(yōu)先級(jí)的順序處理來(lái)自多個(gè)處理器的請(qǐng)求。假如沒(méi)有優(yōu)先級(jí)繼續(xù),一個(gè)多處理器系統(tǒng)可能會(huì)落入無(wú)限的優(yōu)先級(jí)倒置和死鎖中。

中斷處理

為了獲得對(duì)外部事件的及時(shí)響應(yīng),最小化硬件中斷發(fā)生到執(zhí)行該中斷的第一條代碼的時(shí)間很重要。這個(gè)時(shí)間間隔稱為中斷延遲,為了保證中斷延遲盡可能小,一個(gè)好的RTOS應(yīng)該在幾乎所有時(shí)間內(nèi)都支持產(chǎn)生中斷。正如在關(guān)于內(nèi)核搶占部分提到的那樣,一些重要的代碼段的確需要暫時(shí)屏蔽中斷。這種最大的屏蔽時(shí)間通常被定義為最大的中斷延遲。

在某些情況下,硬件中斷處理器必須調(diào)度并運(yùn)行一個(gè)更高優(yōu)先級(jí)的線程。在這樣的情況下,中斷處理器將返回并指示一個(gè)事件將被處理。這樣的處理將引入了第二種形式的延遲-調(diào)度延遲,這個(gè)延時(shí)必須在設(shè)計(jì)中加以考慮。調(diào)度延遲是介于用戶的中斷處理器的最后一條指令和驅(qū)動(dòng)程序線程第一條指令的執(zhí)行之間的時(shí)間。

在一個(gè)嵌入式系統(tǒng)中可能會(huì)同時(shí)出現(xiàn)多個(gè)硬件中斷。例如,在一個(gè)病人監(jiān)護(hù)系統(tǒng)中,當(dāng)一個(gè)傳感器記錄了病人心跳的一次變化并且網(wǎng)卡接收到網(wǎng)絡(luò)傳來(lái)的數(shù)據(jù)的同時(shí),護(hù)士按了觸摸屏。很明顯,一些中斷應(yīng)該立即得到處理,而其他的則可以延緩。通過(guò)提供對(duì)嵌套中斷的支持,RTOS支持嵌入式系統(tǒng)優(yōu)先處理更高優(yōu)先級(jí)的中斷。

如何提高可靠性

我們已經(jīng)明白怎樣使RTOS具有可以猜測(cè)性,但是如何實(shí)現(xiàn)其可靠性呢?答案在很大程度上取決于RTOS的架構(gòu)。

例如在實(shí)時(shí)執(zhí)行模式架構(gòu)中,大部分或所有軟件組件都在一個(gè)單一的內(nèi)存地址空間中運(yùn)行,包括操作系統(tǒng)內(nèi)核、網(wǎng)絡(luò)協(xié)議棧、設(shè)備驅(qū)動(dòng)程序、應(yīng)用程序等。雖然很有效率,但這種架構(gòu)有兩個(gè)明顯的缺陷:在任何組件中的一個(gè)指針錯(cuò)誤,不論這個(gè)錯(cuò)誤多么細(xì)微,都可能破壞操作系統(tǒng)內(nèi)核或任何其它組件,導(dǎo)致不可猜測(cè)的行為和整個(gè)系統(tǒng)的崩潰;很難動(dòng)態(tài)修復(fù)或替換任何有故障的組件。在大多數(shù)情況下,出現(xiàn)這些問(wèn)題時(shí)系統(tǒng)復(fù)位是唯一的選擇。

一些RTOS,也像Linux一樣,試圖通過(guò)使用單內(nèi)核架構(gòu)來(lái)解決這個(gè)問(wèn)題。在這種架構(gòu)中,用戶的應(yīng)用程序在隔離的、受保護(hù)內(nèi)存地址空間中運(yùn)行。假如一個(gè)應(yīng)用程序試圖訪問(wèn)其地址空間之外的數(shù)據(jù),內(nèi)存治理單元將通知操作系統(tǒng),操作系統(tǒng)可能會(huì)采取保護(hù)措施,例如終止出錯(cuò)進(jìn)程。然而,這樣的操作系統(tǒng)需要將大多數(shù)或所有驅(qū)動(dòng)程序、文件系統(tǒng)和其它系統(tǒng)服務(wù)綁定到內(nèi)核中。因此,任何組件中的一個(gè)錯(cuò)誤都可能帶來(lái)災(zāi)難性的內(nèi)核故障。

第三種方法是采用微內(nèi)核架構(gòu)來(lái)提供更精確的故障隔離,像QNXNeutrino這樣的操作系統(tǒng)都基于微內(nèi)核架構(gòu)。微內(nèi)核有兩個(gè)明確的特征:

在操作系統(tǒng)內(nèi)核中只實(shí)現(xiàn)了一個(gè)包含了基本OS服務(wù)的小內(nèi)核。包括驅(qū)動(dòng)程序、文件系統(tǒng)、協(xié)議棧和用戶應(yīng)用程序在內(nèi)的所有其它的組件在內(nèi)核外部分離的、保護(hù)內(nèi)存的進(jìn)程中運(yùn)行。有問(wèn)題的系統(tǒng)服務(wù)不再作為孤立的故障點(diǎn),而是在它破壞其它服務(wù)或操作系統(tǒng)內(nèi)核之前被終止并重啟。

所有的組件能夠通過(guò)消息傳遞進(jìn)行通信,一個(gè)定義良好的通信機(jī)制保障了程序在保持彼此安全隔離的前提下進(jìn)行數(shù)據(jù)交換。適當(dāng)實(shí)現(xiàn)的消息傳遞也可以作為一個(gè)虛擬的“軟件總線”,答應(yīng)幾乎任何的軟件組件,甚至是一個(gè)設(shè)備驅(qū)動(dòng)程序被動(dòng)態(tài)地加入或替換,對(duì)于必須提供連續(xù)服務(wù)的系統(tǒng)而言這是一項(xiàng)關(guān)鍵要求。

和傳統(tǒng)的操作系統(tǒng)架構(gòu)相比,微內(nèi)核支持嵌入式設(shè)備贏得明顯更快的平均修復(fù)時(shí)間。例如,假如一個(gè)設(shè)備驅(qū)動(dòng)程序失敗將可能出現(xiàn)以下情況:操作系統(tǒng)可以終止該驅(qū)動(dòng)程序,回收其正在使用的資源,并對(duì)其進(jìn)行重新啟動(dòng),這個(gè)過(guò)程通常這只需要幾個(gè)毫秒時(shí)間。

盡管和傳統(tǒng)的操作系統(tǒng)相比,基于消息傳遞的微內(nèi)核RTOS通常提供了更好的容錯(cuò)性和動(dòng)態(tài)升級(jí)能力,也有一些觀點(diǎn)認(rèn)為消息傳遞增加了開(kāi)銷(xiāo)。在實(shí)際應(yīng)用中,假如實(shí)現(xiàn)正確,消息傳遞的性能可以接近底層硬件的內(nèi)存帶寬。例如,一個(gè)微內(nèi)核RTOS可以采用多段式消息和線程到線程的消息數(shù)據(jù)直接拷貝等各種技術(shù),來(lái)確保系統(tǒng)性能可以達(dá)到傳統(tǒng)的進(jìn)程間通信方法的水平。由一些組織如DedicatedSystems等進(jìn)行的獨(dú)立測(cè)試證實(shí),和傳統(tǒng)的RTOS相比,微內(nèi)核RTOS在一系列的實(shí)時(shí)指標(biāo)方面表現(xiàn)良好,在很多情況下甚至有更好的表現(xiàn)。


評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉