?? 00000003.htm
字號(hào):
務(wù)完成臨界區(qū)操作以后,它將取消刪除保護(hù)以使自己可以被刪除,從而解阻塞刪除任務(wù) <br />。 <br /> 正如上面所展示的,任務(wù)刪除保護(hù)通常伴有互斥操作。 <br /> 這樣,為了方便性和效率,互斥信號(hào)量包含了刪除保護(hù)選項(xiàng)。(參見"互斥信號(hào)量" <br />) <br />任務(wù)間通信 <br /> 為了提供完整的多任務(wù)系統(tǒng)的功能,wind內(nèi)核提供了一套豐富的任務(wù)間通信與同步 <br />的機(jī)制。這些通信功能使一個(gè)應(yīng)用中各個(gè)獨(dú)立的任務(wù)協(xié)調(diào)他們的活動(dòng)。 <br />共享地址空間 <br /> wind內(nèi)核的任務(wù)間通信機(jī)制的基礎(chǔ)是所有任務(wù)所在的共享地址空間。通過共享地址 <br />空間,任務(wù)能夠使用共享數(shù)據(jù)結(jié)構(gòu)的指針自由地通信。管道不需要映射一塊內(nèi)存區(qū)到兩 <br />個(gè)互相通信任務(wù)的尋址空間。 <br /> 不幸的是,共享地址空間具有上述優(yōu)點(diǎn)的同時(shí),帶來了未被保護(hù)內(nèi)存的重入訪 <br />問的危險(xiǎn)。UNIX操作系統(tǒng)通過隔離進(jìn)程提供這樣的保護(hù),但同時(shí)帶來了對(duì)于實(shí)時(shí)操作系 <br />統(tǒng)來說巨大的性能損失。 <br />互斥操作 <br /> 當(dāng)一個(gè)共享地址空間簡化了數(shù)據(jù)交換,通過互斥訪問避免資源競爭就變?yōu)楸匾牧?amp;nbsp;<br />。用來獲得一個(gè)資源的互斥訪問的許多機(jī)制僅在這些互斥所作用的范圍上存在差別。實(shí) <br />現(xiàn)互斥的方法包括禁止中斷、禁止任務(wù)搶占和通過信號(hào)量進(jìn)行資源鎖定。 <br /> 中斷禁止:最強(qiáng)的互斥方法是屏蔽中斷。這樣的鎖定保證了對(duì)CPU的互斥訪問。這種 <br />方法當(dāng)然能夠解決互斥的問題,但它對(duì)于實(shí)時(shí)是不恰當(dāng)?shù)?,因?yàn)樗阪i定期間阻止系統(tǒng) <br />響應(yīng)外部事件。長的中斷延時(shí)對(duì)于要求有確定的響應(yīng)時(shí)間的應(yīng)用來說是不可接受的。 <br /> 搶占禁止:禁止搶占提供了強(qiáng)制性較弱的互斥方式。 當(dāng)前任務(wù)運(yùn)行的過程中不允許 <br />其他任務(wù)搶占,而中斷服務(wù)程序可以執(zhí)行。這也可能引起較差的實(shí)時(shí)響應(yīng),就象被禁止 <br />中斷一樣,被阻塞的任務(wù)會(huì)有相當(dāng)長時(shí)間的搶占延時(shí),就緒態(tài)的高優(yōu)先級(jí)的任務(wù)可能會(huì) <br />在能夠執(zhí)行前被強(qiáng)制等待一段不可接受的時(shí)間。為避免這種情況,在可能的情況下盡量 <br />使用信號(hào)量實(shí)現(xiàn)互斥。 <br /> 互斥信號(hào)量:信號(hào)量是用于鎖定共享資源訪問的基本方式。不象禁止中斷或搶占, <br />信號(hào)量限制了互斥操作僅作用于相關(guān)的資源。一個(gè)信號(hào)量被創(chuàng)建來保護(hù)資源。VxWorks的 <br />信號(hào)量遵循Dijkstra的P()和V()操作模式。 <br /> 當(dāng)一個(gè)任務(wù)請(qǐng)求信號(hào)量,P(), 根據(jù)在發(fā)出調(diào)用時(shí)信號(hào)量的置位或清零的狀態(tài), 會(huì) <br />發(fā)生兩種情況。如果信號(hào)量處于置位態(tài), 信號(hào)量會(huì)被清零,并且任務(wù)立即繼續(xù)執(zhí)行。如 <br />果信號(hào)量處于清零態(tài),任務(wù)會(huì)被阻塞來等待信號(hào)量。 <br /> 當(dāng)一個(gè)任務(wù)釋放信號(hào)量,V(),會(huì)發(fā)生幾種情況。如果信號(hào)量已經(jīng)處于置位態(tài),釋放 <br />信號(hào)量不會(huì)產(chǎn)生任何影響。如果信號(hào)量處于清零態(tài)且沒有任務(wù)等待該信號(hào)量,信號(hào)量只 <br />是被簡單地置位。如果信號(hào)量處于清零態(tài)且有一個(gè)或多個(gè)任務(wù)等待該信號(hào)量,最高優(yōu)先 <br />級(jí)的任務(wù)被解阻塞,信號(hào)量仍為清零態(tài)。 <br /> 通過將一些資源與信號(hào)量關(guān)聯(lián),能夠?qū)崿F(xiàn)互斥操作。當(dāng)一個(gè)任務(wù)要操作資源,它必 <br />須首先獲得信號(hào)量。只要任務(wù)擁有信號(hào)量,所有其他的任務(wù)由于請(qǐng)求該信號(hào)量而被阻塞 <br />。當(dāng)一個(gè)任務(wù)使用完該資源,它釋放信號(hào)量,允許等待該信號(hào)量的另一個(gè)任務(wù)訪問該資 <br />源。 <br /> Wind內(nèi)核提供了二值信號(hào)量來解決互斥操作所引起的問題。 這些問題包括資源擁有 <br />者的刪除保護(hù),由資源競爭引起的優(yōu)先級(jí)逆轉(zhuǎn)。 <br /> 刪除保護(hù)----互斥引起的一個(gè)問題會(huì)涉及到任務(wù)刪除。在由信號(hào)量保護(hù)的臨界區(qū)中 <br />,需要防止執(zhí)行任務(wù)被意外地刪除。刪除一個(gè)在臨界區(qū)執(zhí)行的任務(wù)是災(zāi)難性的。資源會(huì) <br />被破壞,保護(hù)資源的信號(hào)量會(huì)變?yōu)椴豢色@得,從而該資源不可被訪問。通常刪除保護(hù)是 <br />與互斥操作共同提供的。由于這個(gè)原因,互斥信號(hào)量通常提供選項(xiàng)來隱含地提供前面提 <br />到的任務(wù)刪除保護(hù)的機(jī)制。 <br /> 優(yōu)先級(jí)逆轉(zhuǎn)/優(yōu)先級(jí)繼承----優(yōu)先級(jí)逆轉(zhuǎn)發(fā)生在一個(gè)高優(yōu)先級(jí)的任務(wù)被強(qiáng)制等待一段 <br />不確定的時(shí)間以便一個(gè)較低優(yōu)先級(jí)的任務(wù)完成執(zhí)行。考慮下面的假設(shè): <br /> T1,T2和T3分別是高、中、低優(yōu)先級(jí)的任務(wù)。T3通過擁有信號(hào)量而獲得相關(guān)的資源 <br />。當(dāng)T1搶占T3,為競爭使用該資源而請(qǐng)求相同的信號(hào)量的時(shí)候,它被阻塞。如果我們假 <br />設(shè)T1僅被阻塞到T3使用完該資源為止,情況并不是很糟。畢竟資源是不可被搶占的。然 <br />而,低優(yōu)先級(jí)的任務(wù)并不能避免被中優(yōu)先級(jí)的任務(wù)搶占,一個(gè)搶占的任務(wù)如T2將阻止T3 <br />完成對(duì)資源的操作。這種情況可能會(huì)持續(xù)阻塞T1等待一段不可確定的時(shí)間。這種情況成 <br />為優(yōu)先級(jí)逆轉(zhuǎn),因?yàn)楸M管系統(tǒng)是基于優(yōu)先級(jí)的調(diào)度,但卻使一個(gè)高優(yōu)先級(jí)的任務(wù)等待一 <br />個(gè)低優(yōu)先級(jí)的任務(wù)完成執(zhí)行。 <br /> 互斥信號(hào)量有一個(gè)選項(xiàng)允許實(shí)現(xiàn)優(yōu)先級(jí)繼承的算法。優(yōu)先級(jí)繼承通過在T1被阻塞期 <br />間提升T3的優(yōu)先級(jí)到T1解決了優(yōu)先級(jí)逆轉(zhuǎn)引起的問題。這防止了T3,間接地防止T1,被 <br />T2搶占。通俗地說,優(yōu)先級(jí)繼承協(xié)議使一個(gè)擁有資源的任務(wù)以等待該資源的任務(wù)中優(yōu)先 <br />級(jí)最高的任務(wù)的優(yōu)先級(jí)執(zhí)行。當(dāng)執(zhí)行完成,任務(wù)釋放該資源并返回到它正常的或標(biāo)準(zhǔn)的 <br />優(yōu)先級(jí)。因此,繼承優(yōu)先級(jí)的任務(wù)避免了被任何中間優(yōu)先級(jí)的任務(wù)搶占。 <br /> 同步 <br /> 信號(hào)量另一種通常的用法是用于任務(wù)間的同步機(jī)制。在這種情況下,信號(hào)量代表一 <br />個(gè)任務(wù)所等待的條件或事件。最初,信號(hào)量是在清零態(tài)。一個(gè)任務(wù)或中斷通過置位該信 <br />號(hào)量來指示一個(gè)事件的發(fā)生。等待該信號(hào)量的任務(wù)將被阻塞直到事件發(fā)生、該信號(hào)量被 <br />置位。一旦被解阻塞,任務(wù)就執(zhí)行恰當(dāng)?shù)氖录幚沓绦?。信?hào)量在任務(wù)同步中的應(yīng)用對(duì) <br />于將中斷服務(wù)程序從冗長的事件處理中解放出來以縮短中斷響應(yīng)時(shí)間是很有用的。 <br />消息隊(duì)列 <br /> 消息隊(duì)列提供了在任務(wù)與中斷服務(wù)程序或其他任務(wù)間交換變長消息的一種較低層的 <br />機(jī)制。這種機(jī)制在功能上類似于管道,但有較少的開銷。 <br />管道、套接字、遠(yuǎn)程過程調(diào)用和更多 <br /> 許多高層的VxWorks機(jī)制提供任務(wù)間通信的更高層的抽象,包括管道、TCP/IP套接字 <br />、遠(yuǎn)程過程調(diào)用和更多。為了保持裁減內(nèi)核為僅包含足夠支持高層功能的一個(gè)最小函數(shù) <br />集的設(shè)計(jì)目標(biāo),這些特性都是基于上面描述的內(nèi)核同步方式的。 <br />3. 內(nèi)核設(shè)計(jì)的優(yōu)點(diǎn) <br /> wind內(nèi)核的一個(gè)重要的設(shè)計(jì)特性是最小的搶占延時(shí)。其他的主要設(shè)計(jì)的優(yōu)點(diǎn)包括史 <br />無前例的可配置性,對(duì)不可預(yù)見的應(yīng)用需求的可擴(kuò)展性,在各種微處理器應(yīng)用開發(fā)中的 <br />移植性。 <br />最小的搶占延時(shí) <br /> 正如前面所討論的,禁止搶占是獲得代碼臨界資源互斥操作的通常手段。這種技巧 <br />的不期望的負(fù)面影響是高的搶占延時(shí),這可以通過盡量使用信號(hào)量實(shí)現(xiàn)互斥和保持臨界 <br />區(qū)盡量緊湊被減小。但即使廣泛地使用信號(hào)量也不能解決所有的可能導(dǎo)致?lián)屨佳訒r(shí)的根 <br />源。內(nèi)核本身就是一個(gè)導(dǎo)致?lián)屨佳訒r(shí)的根源。為了理解其原因,我們必須更好地理解內(nèi) <br />核所需的互斥操作。 <br />內(nèi)核級(jí)和任務(wù)級(jí) <br /> 在任何多任務(wù)系統(tǒng)中,大量的應(yīng)用是發(fā)生在一個(gè)或多個(gè)任務(wù)的上下文。然而,有些 <br />CPU時(shí)間片不在任何任務(wù)的上下文。這些時(shí)間片發(fā)生在內(nèi)核改變內(nèi)部隊(duì)列或決定任務(wù)調(diào)度 <br />。在這些時(shí)間片中,CPU在內(nèi)核級(jí)執(zhí)行,而非任務(wù)級(jí)。 <br /> 為了內(nèi)核安全地操作它的內(nèi)部的數(shù)據(jù)結(jié)構(gòu),必須有互斥操作。內(nèi)核級(jí)沒有相關(guān)的任 <br />務(wù)上下文,內(nèi)核不能使用信號(hào)量保護(hù)內(nèi)部鏈表。內(nèi)核使用工作延期作為實(shí)現(xiàn)互斥的方式 <br />。當(dāng)有內(nèi)核參與時(shí),中斷服務(wù)程序調(diào)用的函數(shù)不是被直接激活,而是被放在內(nèi)核的工作 <br />隊(duì)列中。內(nèi)核完成這些請(qǐng)求的執(zhí)行而清空內(nèi)核工作隊(duì)列。 <br /> 當(dāng)內(nèi)核正在執(zhí)行已經(jīng)被請(qǐng)求服務(wù)時(shí)系統(tǒng)將不響應(yīng)到達(dá)內(nèi)核的函數(shù)調(diào)用。可以簡單地 <br />認(rèn)為內(nèi)核狀態(tài)類似于禁止搶占。如前面所討論的,搶占延時(shí)在實(shí)時(shí)系統(tǒng)中是不期望有的 <br />,因?yàn)樗黾恿藢?duì)于會(huì)引起應(yīng)用任務(wù)重新調(diào)度的事件的響應(yīng)時(shí)間. <br /> 管操作系統(tǒng)在內(nèi)核級(jí)(此時(shí)禁止搶占)完全避免消耗時(shí)間是不可能的,但減少這些 <br />時(shí)間是很重要的。這是減少由內(nèi)核執(zhí)行的函數(shù)的數(shù)量的主要原因, 也是不采用統(tǒng)一結(jié)構(gòu) <br />的系統(tǒng)設(shè)計(jì)方式的原因。例如,有一種流行的實(shí)時(shí)操作系統(tǒng)的每個(gè)函數(shù)都是在內(nèi)核級(jí)執(zhí) <br />行。這意味著當(dāng)一個(gè)低優(yōu)先級(jí)的任務(wù)在執(zhí)行分配內(nèi)存、獲得任務(wù)信息的函數(shù)時(shí)所有高優(yōu) <br />先級(jí)的任務(wù)被禁止搶占。 <br />一個(gè)最小的內(nèi)核 <br /> 已經(jīng)說明了一個(gè)最小內(nèi)核的優(yōu)點(diǎn)和構(gòu)造高層操作系統(tǒng)功能的必要功能,我們使用這 <br />些操作原語來執(zhí)行一個(gè)傳統(tǒng)的內(nèi)核級(jí)功能,而在VxWorks中作為任務(wù)級(jí)功能執(zhí)行,內(nèi)存管 <br />理。 在這個(gè)例子中,考慮用戶可調(diào)用的子例程malloc, 用于分配所請(qǐng)求大小的內(nèi)存區(qū) <br />并返回一個(gè)指向該內(nèi)存區(qū)的指針。假定空閑內(nèi)存區(qū)是通過搜索一個(gè)空閑內(nèi)存塊的隊(duì)列找 <br />到的,一個(gè)信號(hào)量必須被用來保護(hù)這個(gè)非搶占多用戶資源。分配內(nèi)存的操作如下: <br />
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -