乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      VxWorks內(nèi)核解讀-1

       立志德美 2019-04-22

       本文首先從實(shí)時(shí)內(nèi)核的定義出發(fā),對(duì)實(shí)時(shí)操作系統(tǒng)進(jìn)行了介紹,并對(duì)實(shí)時(shí)操作系統(tǒng)的特點(diǎn)進(jìn)行了說(shuō)明,接著從內(nèi)核的功能和結(jié)構(gòu)角度介紹了整體式內(nèi)核,層次式內(nèi)核,以及微內(nèi)核。最后對(duì)具有微內(nèi)核特性的VxWorks Wind內(nèi)核進(jìn)行了介紹。

        1.1實(shí)時(shí)內(nèi)核概述

      “實(shí)時(shí)”表示控制系統(tǒng)能夠及時(shí)處理系統(tǒng)中發(fā)生的要求控制的外部事件。從事件發(fā)生到系統(tǒng)產(chǎn)生響應(yīng)的反應(yīng)時(shí)間稱為延遲(Latency)。對(duì)于實(shí)時(shí)系統(tǒng),一個(gè)最重要的條件就是延遲有確定的上界(這樣的系統(tǒng)屬于確定性系統(tǒng))。滿足這個(gè)條件后,根據(jù)這個(gè)上界大小再區(qū)分不同實(shí)時(shí)系統(tǒng)的性能。這里的“系統(tǒng)”是從系統(tǒng)論的觀點(diǎn)講的一個(gè)功能完整的設(shè)計(jì),能夠獨(dú)立和外部世界交互、實(shí)現(xiàn)預(yù)期功能。這包括實(shí)時(shí)硬件系統(tǒng)設(shè)計(jì)、實(shí)時(shí)操作系統(tǒng)設(shè)計(jì)、實(shí)時(shí)多任務(wù)設(shè)計(jì)3部分。后兩者可以概括為實(shí)時(shí)軟件系統(tǒng)設(shè)計(jì)。實(shí)現(xiàn)實(shí)時(shí)系統(tǒng)是這3部分有機(jī)結(jié)合的結(jié)果。

      從另外一個(gè)角度,即實(shí)時(shí)程度看,可以把系統(tǒng)分為硬實(shí)時(shí)系統(tǒng)和軟實(shí)時(shí)系統(tǒng)。硬實(shí)時(shí)系統(tǒng)是這樣一種系統(tǒng),它的時(shí)間要求有一個(gè)確定的截止期限(Deadline),超出截止期限的響應(yīng),即是計(jì)算無(wú)誤,也是無(wú)法容忍的錯(cuò)誤結(jié)果,通常會(huì)引起嚴(yán)重的后果,這樣的系統(tǒng)屬于硬實(shí)時(shí)系統(tǒng)。對(duì)于軟實(shí)時(shí)系統(tǒng)來(lái)說(shuō),“實(shí)時(shí)性”僅僅是“程度”概念,在提交諸如中斷、計(jì)時(shí)和調(diào)度的操作系統(tǒng)服務(wù)時(shí),系統(tǒng)定義一個(gè)時(shí)間范圍內(nèi)的延遲。在該范圍內(nèi),越早給出響應(yīng)越有價(jià)值,只要不超出范圍,晚點(diǎn)給出的結(jié)果價(jià)值下降,但可以容忍。

      因此一個(gè)RTOS內(nèi)核必須滿足許多特定的實(shí)時(shí)環(huán)境所提出的基本要求,這些包括:

      • 多任務(wù):由于真實(shí)世界的事件的異步性,能夠運(yùn)行許多并發(fā)進(jìn)程或任務(wù)是很重要的。多任務(wù)提供了一個(gè)較好的對(duì)真實(shí)世界的匹配,因?yàn)樗试S對(duì)應(yīng)于許多外部事件的多線程執(zhí)行。系統(tǒng)內(nèi)核分配CPU給這些任務(wù)來(lái)獲得并發(fā)性。
      • 搶占調(diào)度:真實(shí)世界的事件具有繼承的優(yōu)先級(jí),在分配CPU的時(shí)候要注意到這些優(yōu)先級(jí)?;趦?yōu)先級(jí)的搶占調(diào)度,任務(wù)都被指定了優(yōu)先級(jí), 在能夠執(zhí)行的任務(wù)(沒(méi)有被掛起或正在等待資源)中,優(yōu)先級(jí)最高的任務(wù)被分配CPU資源。換句話說(shuō),當(dāng)一個(gè)高優(yōu)先級(jí)的任務(wù)變?yōu)榭蓤?zhí)行態(tài)(Wind內(nèi)核中稱為就緒態(tài)Ready State),它會(huì)立即搶占當(dāng)前正在運(yùn)行的較低優(yōu)先級(jí)的任務(wù)。
      • 快速靈活的任務(wù)間的通信與同步:在一個(gè)實(shí)時(shí)系統(tǒng)中,可能有許多任務(wù)作為一個(gè)應(yīng)用的一部分執(zhí)行。系統(tǒng)必須提供這些任務(wù)間的快速且功能強(qiáng)大的通信機(jī)制。內(nèi)核也要提供為了有效地共享不可搶占的資源或臨界區(qū)所需的同步機(jī)制。
      • 方便的任務(wù)與中斷之間的通信:盡管真實(shí)世界的事件通常作為中斷方式到來(lái),但為了提供有效的排隊(duì)、優(yōu)先化和減少中斷延時(shí),我們通常希望在任務(wù)級(jí)處理相應(yīng)的工作(uC/OS-III內(nèi)核采用了這種策略)。所以需要任務(wù)級(jí)和中斷級(jí)之間存在通信。
      • 性能邊界:一個(gè)實(shí)時(shí)內(nèi)核必須提供最壞情況的性能優(yōu)化,而非針對(duì)吞吐量的性能優(yōu)化。我們更期望一個(gè)系統(tǒng)能夠始終以50微妙(us)執(zhí)行一個(gè)函數(shù),而不期望系統(tǒng)平均以10微妙(us)執(zhí)行該函數(shù),但偶爾會(huì)以75微妙(us)執(zhí)行它。
      • 特殊考慮:由于對(duì)實(shí)時(shí)內(nèi)核的要求的增加,必須考慮對(duì)內(nèi)核支持不斷增加的復(fù)雜功能的要求。這包括多進(jìn)程處理(比如VxWorks RTP),對(duì)更新的、功能更強(qiáng)的處理器結(jié)構(gòu)(比如Multicore CPU)的支持。

      1.  實(shí)時(shí)硬件系統(tǒng)設(shè)計(jì)

      實(shí)時(shí)硬件系統(tǒng)設(shè)計(jì)是其它兩部分的基礎(chǔ)。實(shí)時(shí)硬件系統(tǒng)設(shè)計(jì)要求在滿足軟件系統(tǒng)充分高效的前提下,必須提供足夠的處理能力。例如,硬件系統(tǒng)提供的中斷處理邏輯能同時(shí)響應(yīng)的外部事件數(shù)量、硬件反應(yīng)時(shí)間、內(nèi)存大小、處理器計(jì)算能力、總線能力等,以保證最壞情況下所有計(jì)算仍然得以完成。多處理的硬件系統(tǒng)還包括內(nèi)部通信速率設(shè)計(jì)。當(dāng)硬件系統(tǒng)不能保證達(dá)到實(shí)時(shí)要求時(shí),可以確信整個(gè)系統(tǒng)不是實(shí)時(shí)的。目前,各種硬件速度不斷提高,先進(jìn)技術(shù)大量涌現(xiàn),硬件在大多數(shù)應(yīng)用中已經(jīng)不是實(shí)時(shí)系統(tǒng)的瓶頸。因而,實(shí)時(shí)系統(tǒng)的關(guān)鍵集中在實(shí)時(shí)軟件系統(tǒng)設(shè)計(jì),這方面也成了實(shí)時(shí)性研究的主要內(nèi)容,也是最復(fù)雜的部分。許多場(chǎng)合甚至對(duì)實(shí)時(shí)硬件系統(tǒng)和實(shí)時(shí)操作系統(tǒng)不加區(qū)分。

      1.  實(shí)時(shí)操作系統(tǒng)設(shè)計(jì)

      先來(lái)看實(shí)時(shí)操作系統(tǒng)性能評(píng)價(jià)的幾個(gè)主要指標(biāo):

      • 中斷延遲時(shí)間:對(duì)一個(gè)實(shí)時(shí)操作系統(tǒng)來(lái)說(shuō),最重要的指標(biāo)就是中斷關(guān)了多長(zhǎng)時(shí)間,所有實(shí)時(shí)系統(tǒng)在進(jìn)入臨界區(qū)代碼段之前都要關(guān)中斷,執(zhí)行完臨界代碼之后再開中斷。關(guān)中斷的時(shí)間越長(zhǎng),中斷延遲就越長(zhǎng)。因此中斷延遲時(shí)間可以表述為關(guān)中斷的最長(zhǎng)時(shí)間與開始執(zhí)行中斷服務(wù)子程序第一條指令的時(shí)間之和,有時(shí)也表述為從系統(tǒng)接收中斷信號(hào)到操作系統(tǒng)做出響應(yīng),進(jìn)入中斷服務(wù)程序的時(shí)間。
      • 中斷響應(yīng)時(shí)間:中斷響應(yīng)時(shí)間定義為從中斷發(fā)生到開始執(zhí)行用戶中斷服務(wù)子程序代碼來(lái)處理這個(gè)中斷的時(shí)間。中斷響應(yīng)時(shí)間包括開始處理這個(gè)中斷前的全部開銷。中斷響應(yīng)時(shí)間包含了中斷延遲時(shí)間,因此在考慮一個(gè)實(shí)時(shí)系統(tǒng)對(duì)外部中斷的處理時(shí)間時(shí),通常指考慮中斷響應(yīng)時(shí)間。典型地將執(zhí)行用戶代碼之前保護(hù)現(xiàn)場(chǎng),將CPU 的各寄存器推入堆棧的時(shí)間記為中斷響應(yīng)時(shí)間。
      • 任務(wù)切換時(shí)間:多任務(wù)之間進(jìn)行切換所花費(fèi)的時(shí)間,即從前一個(gè)任務(wù)開始保存上下文的第一條指令開始,到后一個(gè)任務(wù)恢復(fù)上下文開始運(yùn)行第一條指令為止的時(shí)間段。

      從實(shí)時(shí)性角度看,操作系統(tǒng)經(jīng)歷了前后臺(tái)系統(tǒng)、分時(shí)操作系統(tǒng)和實(shí)時(shí)操作系統(tǒng)3個(gè)階段。

      前后臺(tái)系統(tǒng)(Foreground/Background System)其實(shí)沒(méi)有操作系統(tǒng),系統(tǒng)中只運(yùn)行一個(gè)無(wú)限主循環(huán),沒(méi)有多任務(wù)的概念,但是通過(guò)中斷服務(wù)程序響應(yīng)外部事件。在前后臺(tái)系統(tǒng)中,對(duì)外部事件的實(shí)時(shí)響應(yīng)特性從兩方面看。

      • 中斷延遲時(shí)間:主循環(huán)一般保持中斷開放狀態(tài),因此前后臺(tái)系統(tǒng)中斷響應(yīng)非???,并且通常允許嵌套;
      • 中斷響應(yīng)時(shí)間:需要經(jīng)歷一次主循環(huán)才能對(duì)中斷服務(wù)程序中采集的外部請(qǐng)求進(jìn)行處理,因此系統(tǒng)響應(yīng)時(shí)間決定于主循環(huán)周期。

      分時(shí)操作系統(tǒng)(Time-sharing Operating System)將系統(tǒng)計(jì)算能力分成時(shí)間片,按照一定的策略分配給各個(gè)任務(wù),通常在分配過(guò)程中追求某種意義上的公平,分時(shí)操作系統(tǒng)不保證實(shí)時(shí)性。

      實(shí)時(shí)操作系統(tǒng)(RTOS)的目的是實(shí)現(xiàn)對(duì)外部事件的實(shí)時(shí)響應(yīng),即根據(jù)前面對(duì)實(shí)時(shí)性的定義,實(shí)時(shí)操作系統(tǒng)必須在確定的時(shí)間內(nèi)給出響應(yīng)。實(shí)時(shí)操作系統(tǒng)必須滿足下面4個(gè)條件:

      • 可搶占式的優(yōu)先級(jí)調(diào)度內(nèi)核,當(dāng)一個(gè)運(yùn)行著的任務(wù)使一個(gè)比它優(yōu)先級(jí)高的任務(wù)進(jìn)入了就緒態(tài),當(dāng)前任務(wù)的CPU 使用權(quán)就被剝奪了,或者說(shuō)被掛起了,那個(gè)高優(yōu)先級(jí)的任務(wù)立刻得到了CPU的控制權(quán),即始終保證優(yōu)先級(jí)最高的任務(wù)擁有CPU使用權(quán),如圖1.1所示

      VxWorks內(nèi)核解讀-1

      • 中斷具有優(yōu)先級(jí),且中斷可嵌套,即高優(yōu)先級(jí)的中斷可以打斷正在執(zhí)行的低優(yōu)先級(jí)中斷處理程序,優(yōu)先得到執(zhí)行,等到其處理完畢再回到低優(yōu)先級(jí)的任務(wù)繼續(xù)執(zhí)行,
      • 防止優(yōu)先級(jí)反轉(zhuǎn),系統(tǒng)服務(wù)的優(yōu)先級(jí)由請(qǐng)求該服務(wù)的任務(wù)的優(yōu)先級(jí)確定,具有優(yōu)先級(jí)保護(hù)機(jī)制,以防止優(yōu)先級(jí)翻轉(zhuǎn);優(yōu)先級(jí)翻轉(zhuǎn)式指當(dāng)一個(gè)高優(yōu)先級(jí)的任務(wù)被迫等待一個(gè)低優(yōu)先級(jí)的任務(wù)不確定的完成時(shí)間的時(shí)候,優(yōu)先級(jí)反轉(zhuǎn)將會(huì)發(fā)生。考慮下面的情景:任務(wù)T1、T2、T3是三個(gè)優(yōu)先級(jí)依次降低的任務(wù)。T3已經(jīng)通過(guò)獲取與保護(hù)資源相關(guān)的信號(hào)量,從而獲取了這些資源。當(dāng)T1搶占T3通過(guò)獲取相同的信號(hào)量來(lái)競(jìng)爭(zhēng)這些資源的時(shí)候,T3將會(huì)被阻塞。如果我們能夠保證T1阻塞的時(shí)間不會(huì)長(zhǎng)于T3正在執(zhí)行后釋放這些資源的時(shí)間,情況不會(huì)發(fā)生特別嚴(yán)重,畢竟T1占用的這個(gè)資源是不可搶占的。但是低優(yōu)先級(jí)的任務(wù)是脆弱的,通常會(huì)被中等優(yōu)先級(jí)的任務(wù)所搶占。例如此時(shí)的T2,這將會(huì)使T3無(wú)法釋放T1需要的資源。這種情況將會(huì)一直存在,將會(huì)使得處于最高優(yōu)先級(jí)的T1阻塞的時(shí)間不確定。示意圖如1.2。

      VxWorks內(nèi)核解讀-1

      1.2優(yōu)先級(jí)反轉(zhuǎn)示意圖

      上述問(wèn)題的一種解決方法是使用優(yōu)先級(jí)繼承協(xié)議(Priority Inheritance Protocol)。當(dāng)高優(yōu)先級(jí)任務(wù)需要低優(yōu)先級(jí)任務(wù)占用資源時(shí),將低優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí)別提高到和高優(yōu)先級(jí)同樣的級(jí)別,即相當(dāng)于低優(yōu)先級(jí)任務(wù)繼承高優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí)級(jí)別;防止優(yōu)先級(jí)翻轉(zhuǎn)的另外一種協(xié)議是優(yōu)先級(jí)天花板(Priority Ceiling),其設(shè)計(jì)策略是對(duì)優(yōu)先級(jí)翻轉(zhuǎn)采取“預(yù)防”,而不是“補(bǔ)救”。也就是說(shuō):不論是否阻塞了高優(yōu)先級(jí)任務(wù),持有該協(xié)議的任務(wù)在執(zhí)行期間都被賦予優(yōu)先級(jí)天花板所占用的優(yōu)先級(jí),以使任務(wù)盡快完成操作,因此可以把任務(wù)優(yōu)先級(jí)天花板看作是更“積極”的一種保護(hù)優(yōu)先級(jí)的方式,我們?cè)诤竺娴牟┪闹袑?huì)詳細(xì)分析者兩種方案的設(shè)計(jì)與實(shí)現(xiàn)。

      •  實(shí)時(shí)操作系統(tǒng)(RTOS)的性能評(píng)價(jià)指標(biāo)(中斷響應(yīng)時(shí)間和任務(wù)切換時(shí)間)具有固定上界。

      滿足上面4個(gè)必要條件后,RTOS內(nèi)核具體的實(shí)現(xiàn)機(jī)制就決定了其實(shí)時(shí)性的優(yōu)劣。VxWorks的Wind內(nèi)核是一個(gè)真正的實(shí)時(shí)微內(nèi)核,滿足上述條件。同時(shí)wind內(nèi)核采取單一實(shí)時(shí)地址空間,任務(wù)切換開銷非常低,相當(dāng)于在UNIX這樣的主機(jī)上切換到相同進(jìn)程內(nèi)的另一個(gè)線程,并且沒(méi)有系統(tǒng)調(diào)用開銷。高效的實(shí)時(shí)設(shè)計(jì)使Wind內(nèi)核在從工業(yè)現(xiàn)場(chǎng)控制到國(guó)防、航空等眾多領(lǐng)域中表現(xiàn)出優(yōu)秀的實(shí)時(shí)性(嚴(yán)格的說(shuō)用在航空領(lǐng)域的是VxWorks 653版本)。

      1.2微內(nèi)核操作系統(tǒng)設(shè)計(jì)理念

      傳統(tǒng)上,一個(gè)操作系統(tǒng)分為核心態(tài)和用戶態(tài)。內(nèi)核在核心態(tài)運(yùn)行,為用戶態(tài)的應(yīng)用程序提供服務(wù)。內(nèi)核是操作系統(tǒng)的靈魂和中心,決定了操作系統(tǒng)的效率和應(yīng)用領(lǐng)域。在設(shè)計(jì)操作系統(tǒng)時(shí),內(nèi)核包含哪些功能以及內(nèi)核功能采取何種組織結(jié)構(gòu),都是由設(shè)計(jì)者決定的。從內(nèi)核功能和結(jié)構(gòu)特點(diǎn)看,操作系統(tǒng)具有單體式內(nèi)核、層次式內(nèi)核、微內(nèi)核三種不同形式。

      單體式內(nèi)核以過(guò)程集合的方式編寫,鏈接成一個(gè)大型可執(zhí)行的二進(jìn)制程序。使用這種技術(shù),系統(tǒng)中的每一個(gè)過(guò)程可以自由調(diào)動(dòng)其它過(guò)程,只有后者提供了前者需要的一些有用的計(jì)算工作。這些可以不受限制,彼此調(diào)用的成千個(gè)過(guò)程,常常導(dǎo)致出現(xiàn)一個(gè)笨拙且難以理解的系統(tǒng)。單體式內(nèi)核結(jié)構(gòu)的操作系統(tǒng)不進(jìn)行任何的數(shù)據(jù)封裝和隱藏,在具有較高效率的同時(shí),存在著難以擴(kuò)展和升級(jí)的缺點(diǎn)。

      層次式內(nèi)核結(jié)構(gòu)的操作系統(tǒng)將模塊功能劃分為不同層次,下層模塊封裝內(nèi)部細(xì)節(jié),上層模塊調(diào)用下層模塊提供的接口。Unix,Linux,Multics等屬于層次結(jié)構(gòu)操作系統(tǒng)。層次化使操作系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,易于調(diào)試和擴(kuò)展。單體式內(nèi)核和層次式內(nèi)核結(jié)構(gòu)如圖1.3所示。

      VxWorks內(nèi)核解讀-1

      1.3整體式內(nèi)核和層次式內(nèi)核結(jié)構(gòu)圖

      不管單體式結(jié)構(gòu),還是層次式結(jié)構(gòu),它們的操作系統(tǒng)都包括了許多將其用于各種可能領(lǐng)域時(shí)需要的功能,故被稱為宏內(nèi)核(Monolithic kernel)操作系統(tǒng),整個(gè)核心程序都是以核心空間(Kernel Space)的身份及監(jiān)管者(也稱特權(quán))模式(Supervisor Mode)來(lái)運(yùn)行,以至于可以認(rèn)為該內(nèi)核本身便是一個(gè)完整的操作系統(tǒng)。以UNIX為例,其內(nèi)核包括了進(jìn)程管理、文件系統(tǒng)、設(shè)備管理、網(wǎng)絡(luò)通信等功能,用戶層僅僅提供一個(gè)操作系統(tǒng)外殼和一些實(shí)用工具程序。

      用層次式方法設(shè)計(jì)操作系統(tǒng),設(shè)計(jì)者需要確定在哪里劃分內(nèi)核-用戶的邊界。在傳統(tǒng)上,所有的層都在內(nèi)核中,但是這樣做是沒(méi)有必要的。事實(shí)上,盡可能減少內(nèi)核態(tài)功能的做法更好,因?yàn)閮?nèi)核中的錯(cuò)誤會(huì)快速拖累系統(tǒng);相反可以把用戶級(jí)任務(wù)設(shè)置位較小的權(quán)限,這樣某一個(gè)錯(cuò)誤的后果將不是致命的。微內(nèi)核的設(shè)計(jì)思想是,為了實(shí)現(xiàn)其高可靠性,將操作系統(tǒng)劃分為小的、定義良好的模塊,只有其中一個(gè)模塊(微內(nèi)核模塊)運(yùn)行在內(nèi)核態(tài)上,其余的模塊由于功能相對(duì)較弱,則作為普通用戶任務(wù)運(yùn)行。特別的是地,由于把每個(gè)設(shè)備驅(qū)動(dòng)和文件系統(tǒng)分別作為普通任務(wù),這些模塊中的錯(cuò)誤雖然會(huì)使得這些模塊崩潰,但不會(huì)使得整個(gè)系統(tǒng)死機(jī)。例如在音頻驅(qū)動(dòng)中的錯(cuò)誤會(huì)使得聲音斷續(xù)或者停止,但是不會(huì)使這個(gè)計(jì)算機(jī)系統(tǒng)崩潰。相反在宏內(nèi)核操作系統(tǒng)中,由于所有的設(shè)備驅(qū)動(dòng)都在內(nèi)核中,一個(gè)有故障的音頻驅(qū)動(dòng)很容易導(dǎo)致無(wú)效的地址引用,進(jìn)而造成惱人的系統(tǒng)停機(jī)。

      有許多微內(nèi)核已經(jīng)實(shí)現(xiàn)并投入應(yīng)用。微內(nèi)核在實(shí)時(shí)、工業(yè)、航空以及軍事應(yīng)用中特別流行,因?yàn)檫@些領(lǐng)域都是關(guān)鍵任務(wù),需要有高度的可靠性。因此嵌入式操作系統(tǒng)大多采用微內(nèi)核結(jié)構(gòu)。微內(nèi)核操作系統(tǒng)是近二十年新發(fā)展起來(lái)的技術(shù),內(nèi)核非常小但效率高,從數(shù)十KB到數(shù)百KB字節(jié),適合于資源相對(duì)有限的嵌入式應(yīng)用。微內(nèi)核將很多通用操作的功能從內(nèi)核中分離出來(lái)(如文件系統(tǒng),設(shè)備驅(qū)動(dòng),網(wǎng)絡(luò)協(xié)議棧等),只保留最基本的內(nèi)容。知名的內(nèi)核有Green Hills Software公司開發(fā)的INTEGRITY實(shí)時(shí)操作系統(tǒng),windriver系統(tǒng)公司開發(fā)的vxWorks,黑莓手機(jī)(BlackBerry)制造商RIM(Research In Motion Ltd.,RIM)使用的QNX實(shí)時(shí)系統(tǒng),以及L4、PikeOS、Minix3等。

      備注:從微內(nèi)核模塊運(yùn)行在CPU核心態(tài)上,其它模塊運(yùn)行在非核心態(tài),這個(gè)角度來(lái)說(shuō),VxWorks的Wind內(nèi)核并不能算是嚴(yán)格意義上的微內(nèi)核系統(tǒng)。Wind內(nèi)核通過(guò)全局變量kernelState模擬了Wind內(nèi)核的特權(quán)態(tài)。Wind內(nèi)核中以wind*開頭的例程構(gòu)成Wind內(nèi)核的核心服務(wù)例程。當(dāng)kernelState為FALSE時(shí),意味著Wind內(nèi)核此時(shí)沒(méi)有程序訪問(wèn),VxWorks的外圍模塊可以調(diào)試Wind內(nèi)核的核心服務(wù)例程;當(dāng)kernelState為TRUE時(shí),意味著其它程序正在使用內(nèi)核態(tài)例程,當(dāng)前需要調(diào)用核心服務(wù)例程的程序必須放置到延遲隊(duì)列中,直到處于核心態(tài)的程序退出內(nèi)核態(tài)(即kernelState為FALSE),延遲的內(nèi)核態(tài)例程才會(huì)被執(zhí)行,從這里我們可以看出,kernelState模擬的核心態(tài)是非搶占式的。VxWorks的wind內(nèi)核采用全局變量模擬了核心態(tài)服務(wù)例程,在加上其高度的可配置型,也具有一般微內(nèi)核操作系統(tǒng)所具有的的特性。

      一般認(rèn)為微內(nèi)核操作系統(tǒng)具有如下優(yōu)點(diǎn):

      •  統(tǒng)一的接口,在用戶態(tài)和核心態(tài)之間無(wú)需進(jìn)行識(shí)別;
      • 可伸縮性好,易于擴(kuò)充,能適應(yīng)硬件更新和應(yīng)用變化;
      • 可移植性好,操作系統(tǒng)要移植到不同的硬件平臺(tái)上,只需修改微內(nèi)核中極少代碼即可;
      • 實(shí)時(shí)性好,內(nèi)核響應(yīng)速度快,可以方便地支持實(shí)時(shí)處理;
      • 安全可靠性高,微內(nèi)核將安全性作為系統(tǒng)內(nèi)部特性來(lái)進(jìn)行設(shè)計(jì),對(duì)外僅使用少量應(yīng)用編程接口。

      由于操作系統(tǒng)核心常駐內(nèi)存,而微內(nèi)核結(jié)構(gòu)精簡(jiǎn)了操作系統(tǒng)的核心功能,內(nèi)核規(guī)模比較小,一些功能都移到了外存上,所以微內(nèi)核結(jié)構(gòu)十分適合嵌入式的專用系統(tǒng),如圖1-4所示的VxWorks系統(tǒng)結(jié)構(gòu),大家可以直觀的感受到Wind內(nèi)核在VxWorks系統(tǒng)中的地位O(∩_∩)O。

      VxWorks內(nèi)核解讀-1

      圖1-4 VxWorks系統(tǒng)結(jié)構(gòu)

      1.3 wind微內(nèi)核設(shè)計(jì)

      為了提高微內(nèi)核效率,有兩種實(shí)現(xiàn)模式:受保護(hù)的虛地址空間模式和無(wú)保護(hù)的單一實(shí)地址空間模式。前者在宏內(nèi)核操作系統(tǒng)(如Unix)和某些微內(nèi)核操作系統(tǒng)(如QNX,Minix3)中采用。這種模式的優(yōu)點(diǎn)是顯而易見(jiàn)的:任務(wù)獨(dú)立運(yùn)行、不受其他任務(wù)錯(cuò)誤影響、系統(tǒng)可靠性高。

      VxWorks的Wind內(nèi)核采取單一實(shí)地址空間模式,所有任務(wù)在同一地址空間運(yùn)行,不區(qū)分核心態(tài)和用戶態(tài)。其優(yōu)勢(shì)在于:

      • 任務(wù)切換時(shí)不需要進(jìn)行虛擬地址空間切換;
      • 任務(wù)間可以直接共享變量,不需要通過(guò)內(nèi)核在不同的地址空間復(fù)制數(shù)據(jù);
      • 系統(tǒng)調(diào)用時(shí)不需要在核心態(tài)和用戶態(tài)之間切換,相當(dāng)于直接的函數(shù)調(diào)用。

      備注:系統(tǒng)調(diào)用需要從用戶態(tài)切換到核心態(tài),以執(zhí)行用戶態(tài)下不能執(zhí)行的操作,在許多處理器上這是通過(guò)一條等價(jià)于系統(tǒng)調(diào)用的TRAP指令實(shí)現(xiàn)的,在執(zhí)行該指令前要經(jīng)過(guò)嚴(yán)格的參數(shù)檢查。VxWorks中不存在這樣的切換,因此系統(tǒng)調(diào)用和一般函數(shù)調(diào)用沒(méi)有什么差別。但本系列博文中仍然沿用一般說(shuō)法。

      對(duì)于兩種模式孰優(yōu)孰劣,各自的支持者們進(jìn)行了大量的爭(zhēng)論。比較各有所長(zhǎng)的東西往往非常困難。本文傾向于認(rèn)為,對(duì)于嵌入式實(shí)時(shí)應(yīng)用,單一實(shí)地址模式要合適一些。許多實(shí)踐也證明,依靠虛地址保護(hù)來(lái)提高可靠性總存在局限性,畢竟程序運(yùn)行出了錯(cuò)誤,從某種程度上說(shuō)虛地址保護(hù)只是使已經(jīng)出現(xiàn)的錯(cuò)誤經(jīng)過(guò)一個(gè)延遲、積累和放大的過(guò)程,用過(guò)Windows就會(huì)有這種感觸。而經(jīng)過(guò)大量關(guān)鍵應(yīng)用檢驗(yàn)的VxWorks操作系統(tǒng),則被充分證明是高度可靠的(當(dāng)然了,可靠的系統(tǒng)必須由可靠的操作系統(tǒng)和可靠的應(yīng)用系統(tǒng)組成)。

      層次結(jié)構(gòu)的Wind內(nèi)核僅提供多任務(wù)環(huán)境、進(jìn)程間通信和同步功能的服務(wù)例程。這些服務(wù)例程足夠支持VxWorks在較高層次所提供的豐富性能的要求。VxWorks的Wind內(nèi)核操作對(duì)于用戶是不可見(jiàn)的。應(yīng)用程序?yàn)榱藢?shí)現(xiàn)需要內(nèi)核參與的任務(wù)管理和同步使用一些系統(tǒng)調(diào)用,但這些調(diào)用的處理對(duì)于調(diào)用任務(wù)是不可見(jiàn)的。應(yīng)用程序僅鏈接恰當(dāng)?shù)腣xWorks例程(通常使用VxWorks的動(dòng)態(tài)鏈接功能),就象調(diào)用子程序一樣發(fā)出系統(tǒng)調(diào)用。這種接口不象Linux內(nèi)核需要一個(gè)跳轉(zhuǎn)表接口,用戶需要通過(guò)一個(gè)整數(shù)來(lái)指定一個(gè)內(nèi)核功能調(diào)用。

      1.4 Wind內(nèi)核類設(shè)計(jì)思想

      VxWorks采用類和對(duì)象的思想將Wind內(nèi)核分成5個(gè)組成部分:任務(wù)管理模塊、內(nèi)存管理模塊、消息隊(duì)列管理模塊、信號(hào)量管理模塊、以及看門狗管理模塊。

      備注:除了上面的五個(gè)模塊之后,還有虛擬內(nèi)存管理接口(VxVMI)模塊和TTY環(huán)形緩沖區(qū)管理模塊也是Wind內(nèi)核用類和對(duì)象思想管理的兩個(gè)模塊。虛擬內(nèi)存接口模塊(VxVMI)是VxWorks的一個(gè)功能模塊,它利用用戶片上或板上的內(nèi)存管理單元(MMU),為用戶提供了對(duì)內(nèi)存的高級(jí)管理功能;TTY環(huán)形緩沖區(qū)管理模塊是ttyDrv設(shè)備的核心,ttyDrv設(shè)備稱為虛擬設(shè)備,處在I/O系統(tǒng)和真正驅(qū)動(dòng)程序之間形成了一個(gè)轉(zhuǎn)換層,為VxWorks提供了一個(gè)標(biāo)準(zhǔn)的I/O接口,一個(gè)虛擬ttyDrv設(shè)備可以管理多個(gè)串行設(shè)備驅(qū)動(dòng)程序。這兩個(gè)模塊嚴(yán)格意義上來(lái)說(shuō)并不是一個(gè)RTOS內(nèi)核理論上的組成部分,因此才不把它們列在Wind內(nèi)核的組成部分上。

      在wind內(nèi)核中,所有的對(duì)象都是類的組成部分,類定義了操作對(duì)象的方法(Method),同時(shí)維護(hù)著對(duì)所有對(duì)象的操作記錄。Wind內(nèi)核采用了c++的語(yǔ)義,但是采用c語(yǔ)言來(lái)實(shí)現(xiàn)。整個(gè)Wind內(nèi)核通過(guò)顯式編碼實(shí)現(xiàn),其編譯過(guò)程并不依賴于具體的編譯器。這意味著Wind內(nèi)核不但可以在vxWorks自帶的diab編譯上編譯,也可以使用開源的gnu/gcc編譯器。VxWorks為Wind內(nèi)核設(shè)計(jì)了一個(gè)元類(Meta-class),所有的對(duì)象類(Obj-class)都是基于該元類。每個(gè)對(duì)象類只負(fù)責(zé)維護(hù)各自對(duì)象(Object)的操作方法(比如創(chuàng)建對(duì)象、初始化對(duì)象、注銷對(duì)象等)、以及管理統(tǒng)計(jì)記錄(比如一個(gè)創(chuàng)建對(duì)象的數(shù)據(jù)、銷毀對(duì)象的數(shù)目等)。圖1.5實(shí)現(xiàn)了元類、對(duì)象類、以及對(duì)象之間的邏輯關(guān)系。

      VxWorks內(nèi)核解讀-1

      圖1-5 元類、對(duì)象類、對(duì)象間關(guān)系圖

      備注:每次畫這種類和對(duì)象關(guān)系圖的時(shí)候,我就異常的糾結(jié)。因?yàn)樵趙ind內(nèi)核的設(shè)計(jì)中,元類classClass有一個(gè)ID號(hào)classClassId,每個(gè)對(duì)象類X-objClass也有一個(gè)ID號(hào)X-objClassId。在C語(yǔ)言的實(shí)現(xiàn)中classClassId和X-objClassId都是指針變量,存放的是相應(yīng)類的地址。在初始化對(duì)象類和對(duì)象時(shí),對(duì)象類和對(duì)象的objCore域存放的該指針變量的值(即相應(yīng)類的地址),跟classClassId沒(méi)有太大的關(guān)系。圖1.5真實(shí)地反應(yīng)了objCore存放的類地址這個(gè)真實(shí)的關(guān)系。

      如果從邏輯上來(lái)看的話,圖1.6看起來(lái)更舒服,雖然從C語(yǔ)言實(shí)現(xiàn)來(lái)說(shuō),classClassId和X-objClassId的作用是錯(cuò)誤的,但是從邏輯上看圖1.6能更清晰的描述問(wèn)題(并且圖也更美觀O(∩_∩)O),雖然圖1.6上objCore存放的指向類地址的指針。正因?yàn)槿绱耍诋嬵惡蛯?duì)象關(guān)系圖時(shí),我采用圖1-6所示的方式。

      VxWorks內(nèi)核解讀-1

      圖1-6 元類、對(duì)象類、對(duì)象間關(guān)系圖

      正如圖1-5,圖1-6所示的那樣每個(gè)對(duì)象類都指向元類classClass,每個(gè)對(duì)象類只負(fù)責(zé)管理各自的對(duì)象。Wind內(nèi)核完整的元類、對(duì)象類、以及對(duì)象間邏輯關(guān)鍵,見(jiàn)圖1-7。

      VxWorks內(nèi)核解讀-1

      圖1-7 wind內(nèi)核各個(gè)組成模塊間對(duì)象類、對(duì)象和元類的關(guān)系

      備注:類管理模式不是Wind內(nèi)核的特性,從功能上來(lái)說(shuō)它僅僅是Wind內(nèi)核組織各個(gè)模塊的手段,所有內(nèi)核模塊的對(duì)象類、類對(duì)象都依賴于它。VxWorks采用類及對(duì)象來(lái)組織操作系統(tǒng)的結(jié)構(gòu),一個(gè)最重要的優(yōu)勢(shì)是增加了代碼的安全性,即在創(chuàng)建新的對(duì)象類和對(duì)象、以及刪除對(duì)象類和對(duì)象都可以對(duì)對(duì)象類、對(duì)象進(jìn)行驗(yàn)證。

      1.5 Wind內(nèi)核的特性

      VxWorks的Wind內(nèi)核自然具有1.2節(jié)所描述的所有RTOS所共有的四個(gè)特性,其所有特點(diǎn)可以概括如下:

      • 可裁剪的微內(nèi)核設(shè)計(jì);
      • 多任務(wù)并發(fā)執(zhí)行;
      • 可搶占的優(yōu)先級(jí)調(diào)度算法;
      • 可選的時(shí)間片輪轉(zhuǎn)算法;
      • 任務(wù)間通信和同步機(jī)制;
      • 快速的上下文切換時(shí)間;
      • 低中斷延時(shí);
      • 快速的中斷響應(yīng)時(shí)間;
      • 可嵌套中斷支持;
      • 256個(gè)任務(wù)優(yōu)先級(jí);
      • 任務(wù)刪除保護(hù);
      • 優(yōu)先級(jí)繼承;
      • 基于函數(shù)的調(diào)用,不采用陷阱指令和跳轉(zhuǎn)表;
      • VxWorks內(nèi)核運(yùn)行在處理器特權(quán)模式;
      • VxWorks內(nèi)核分層實(shí)現(xiàn),VxWorks的核心庫(kù)Wind內(nèi)核處于核心態(tài),由全局管理kernelState進(jìn)行保護(hù)。

      備注:本系列博文接下來(lái)的部分將詳細(xì)分析wind內(nèi)核如何進(jìn)行設(shè)計(jì),以具有這些特性。

      再?gòu)U話幾句O(∩_∩)O:我在分析Wind內(nèi)核時(shí)所秉持的宗旨是策略(Mechanism)和機(jī)制(Policy)相分離的原則,策略(Mechanism)和機(jī)制(Policy)相分離是微內(nèi)核設(shè)計(jì)的指導(dǎo)思想,換句話說(shuō)微內(nèi)核操作系統(tǒng)設(shè)計(jì)的指導(dǎo)原則是提供機(jī)制而不是策略。為了更清楚地說(shuō)明這一點(diǎn),我們以任務(wù)調(diào)度為例。一個(gè)簡(jiǎn)單的調(diào)度算法是為每一個(gè)任務(wù)賦予一個(gè)優(yōu)先級(jí),并讓內(nèi)核執(zhí)行具有最高優(yōu)先級(jí)的就緒任務(wù)。在這個(gè)例子中,機(jī)制(Mechanism)是在內(nèi)核中尋找最高優(yōu)先級(jí)的就緒任務(wù)并運(yùn)行之;而策略(Policy)則是賦予任務(wù)相應(yīng)的優(yōu)先級(jí)。換句話說(shuō)機(jī)制負(fù)責(zé)提供什么樣的功能,策略則負(fù)責(zé)如何使用這些功能。策略和機(jī)制相分離指導(dǎo)思想可以使操作系統(tǒng)內(nèi)核變得更小,更穩(wěn)定。正如一句話說(shuō)的好“一個(gè)優(yōu)美的內(nèi)核不是還有什么樣的功能還可以增加,而是還有什么樣的功能還可以減少”(哥們忘記是誰(shuí)說(shuō)的了⊙﹏⊙b汗)。

      本系列博文力求在分析研究Wind內(nèi)核的同時(shí),思考RTOS的內(nèi)核設(shè)計(jì)思想源泉。VxWorks的Wind內(nèi)核經(jīng)歷了近20年的發(fā)展完善,達(dá)到目前的穩(wěn)定狀態(tài)。采用目前的這種設(shè)計(jì)、一定有其內(nèi)部的考量,我希望盡可能的從一個(gè)系統(tǒng)設(shè)計(jì)者的角度來(lái)分析Wind內(nèi)核的設(shè)計(jì)思想、工作機(jī)制、以及具有的特性,為我們?cè)O(shè)計(jì)一個(gè)款優(yōu)秀的RTOS內(nèi)核提供借鑒!

      待續(xù)......O(∩_∩)O哈哈~

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多