


下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1. 前后臺(tái)系統(tǒng):應(yīng)用程序是一個(gè)無限的循環(huán),循環(huán)中調(diào)用相應(yīng)的函數(shù)完成相應(yīng)的操作,這部分可以看成后臺(tái)行為。中斷服務(wù)程序處理異步事件,這部分可以看成前臺(tái)行為。后臺(tái)叫任務(wù)級,前臺(tái)叫中斷級。2. 代碼的臨界段也稱為臨界區(qū),指處理時(shí)不可分割的代碼。一旦這部分代碼開始執(zhí)行,則不允許有任何中斷打入。為確保臨界段代碼的執(zhí)行,在進(jìn)入臨界段之前要關(guān)中斷,而臨界段執(zhí)行完之后立即開中斷。3. 資源:任何為任務(wù)所占有的實(shí)體都叫資源。共享資源:可以被一個(gè)以上的任務(wù)使用的資源叫做共享資源。為了防止數(shù)據(jù)被破壞,每個(gè)任務(wù)在與共享資源打交道時(shí),必須獨(dú)占資源,這叫互斥。4. 任務(wù):一個(gè)任務(wù),也稱作為一個(gè)線程,是一個(gè)簡單的程序,該程
2、序可以認(rèn)為CPU完全只屬于該程序自己。每個(gè)任務(wù)都是一個(gè)無限循環(huán)。每個(gè)任務(wù)都處在以下5種狀態(tài)之下:休眠態(tài)、就緒態(tài)、運(yùn)行態(tài)、掛起態(tài)和被中斷態(tài)。休眠態(tài)相當(dāng)于該任務(wù)駐留在內(nèi)存中,但并不被多任務(wù)內(nèi)核所調(diào)度。就緒態(tài)意味著該任務(wù)已經(jīng)準(zhǔn)備好,可以運(yùn)行了,但是由于該任務(wù)的優(yōu)先級比正在運(yùn)行的任務(wù)優(yōu)先級低,還暫時(shí)不能運(yùn)行。運(yùn)行態(tài)的任務(wù)是指該任務(wù)掌握了CPU的控制權(quán),正在運(yùn)行中。掛起態(tài)指該任務(wù)在等待某一事件的發(fā)生。最后,發(fā)生中斷時(shí),CPU提供相應(yīng)的中斷服務(wù),原來正在運(yùn)行的任務(wù)暫不能運(yùn)行,就進(jìn)入了被中斷狀態(tài)。5. 任務(wù)切換(上下文切換):CPU寄存器內(nèi)容切換,當(dāng)內(nèi)核要運(yùn)行另外的任務(wù)時(shí),它保存正在運(yùn)行任務(wù)的當(dāng)前狀態(tài),即C
3、PU寄存器中的全部內(nèi)容。這些內(nèi)容保存在任務(wù)自己的棧區(qū)之中。入棧工作完成之后,就是把下一個(gè)將要運(yùn)行的任務(wù)的當(dāng)前狀況從該任務(wù)的棧中重新裝入CPU的寄存器,并開始下一個(gè)任務(wù)的執(zhí)行。做任務(wù)切換所需要的時(shí)間取決于CPU有多少寄存器要入棧。6. 內(nèi)核:多任務(wù)系統(tǒng)中,內(nèi)核負(fù)責(zé)管理各個(gè)任務(wù),或則說為每個(gè)任務(wù)分配 CPU事件,并負(fù)責(zé)任務(wù)間的通訊。內(nèi)核的基本服務(wù)是任務(wù)切換。7. 調(diào)度:就是指該輪到哪個(gè)任務(wù)運(yùn)行了。多數(shù)實(shí)時(shí)內(nèi)核是基于優(yōu)先級調(diào)度算法,即CPU總是讓處于就緒態(tài)的優(yōu)先級最高的任務(wù)先運(yùn)行。究竟何時(shí)讓高優(yōu)先級的任務(wù)掌握CPU的使用權(quán),有兩種不同的情況,這要看用什么類型的內(nèi)核,是不可剝奪型的還是不可剝奪型。8.
4、 不可剝奪型內(nèi)核:每個(gè)任務(wù)主動(dòng)放棄CPU的使用權(quán),放棄的方法可以使用多種函數(shù)定時(shí)或則定事件的放棄。異步事件還是由中斷服務(wù)程序來處理。中斷處理結(jié)束之后還是回到被中斷的那個(gè)任務(wù)直至該任務(wù)主動(dòng)放棄CPU使用權(quán)。在任務(wù)級,不可剝奪型內(nèi)核允許使用不可重入函數(shù)不必?fù)?dān)心被重復(fù)調(diào)用,因?yàn)槊恳粫r(shí)刻只有一個(gè)任務(wù)在運(yùn)行。9. 可剝奪型內(nèi)核:當(dāng)運(yùn)行的任務(wù)使用一個(gè)更高優(yōu)先級的任務(wù)進(jìn)入就緒態(tài)時(shí)當(dāng)前任務(wù)的CPU使用權(quán)被剝奪或者掛起,更高優(yōu)先級的餓任務(wù)獲得CPU使用權(quán)。如果任務(wù)的CPU使用權(quán)被剝奪或則掛起,更高優(yōu)先級的任務(wù)獲得CPU的使用權(quán)。如果是中斷服務(wù)子程序造成的,中斷完成后被中斷的任務(wù)被掛起,執(zhí)行更高優(yōu)先級的任務(wù)。在可
5、剝奪型內(nèi)核中,要謹(jǐn)慎使用不可重用函數(shù),因?yàn)榈蛢?yōu)先級和高優(yōu)先級的任務(wù)可能都調(diào)用該函數(shù)。10. 任務(wù)調(diào)度策略:1)基于優(yōu)先級的搶占式任務(wù)調(diào)度(由高到底);2)輪轉(zhuǎn)調(diào)度(一人一口);3)搶占上鎖(禁止調(diào)度器)。11. 不可重入函數(shù)主要是用于多任務(wù)環(huán)境,一個(gè)可重入的函數(shù)簡單來說是可以被中斷的函數(shù),也就是說,可以在這個(gè)函數(shù)執(zhí)行的任何時(shí)刻中斷它,轉(zhuǎn)入OS調(diào)度去執(zhí)行另外一段代碼,而返回控制時(shí)不會(huì)出現(xiàn)錯(cuò)誤;而不可重入函數(shù)由于使用了一些系統(tǒng)資源,比如全局變量區(qū),中斷向量表,所以它被中斷可能出現(xiàn)問題。也可以這樣理解,重入即表示重復(fù)進(jìn)入,首先意味著這個(gè)函數(shù)可以被中斷,其次意味著它除了使用自己棧上的變量外不依賴于任何
6、環(huán)境,這樣的函數(shù)可重入,可以允許有該函數(shù)的多個(gè)副本在運(yùn)行,由于他們使用的是分離的棧,所以不會(huì)相互干擾。如果需要訪問全局變量,一定要注意實(shí)施互斥手段。可重入函數(shù)在并行運(yùn)行環(huán)境中非常重要。保證函數(shù)的可重入性方法:1)盡量使用局部變量2)對于要使用的全局變量要加以保護(hù)(關(guān)中斷、信號量)。在實(shí)時(shí)系統(tǒng)的設(shè)計(jì)中,經(jīng)常會(huì)出現(xiàn)多個(gè)任務(wù)調(diào)用同一個(gè)函數(shù)的情況。如果這個(gè)函數(shù)不幸設(shè)計(jì)成為不可重入函數(shù),那么不同任務(wù)調(diào)用這個(gè)函數(shù)時(shí)可能修改其他任務(wù)調(diào)用這個(gè)函數(shù)的數(shù)據(jù),導(dǎo)致不可預(yù)料后果。所謂可重入函數(shù)是指一個(gè)可以被多個(gè)任務(wù)調(diào)用的過程,任務(wù)調(diào)用時(shí)不必?fù)?dān)心數(shù)據(jù)是否會(huì)出錯(cuò)。問題1,如何編寫可重入的函數(shù)? 答:在函數(shù)體內(nèi)不訪問那些全
7、局變量,不使用靜態(tài)局部變量,堅(jiān)持只使用局部變量,寫出的函數(shù)就將是可重入的。如果必須訪問全局變量,記住利用互斥信號量來保護(hù)全局變量。問題2,如何將一個(gè)不可重入的函數(shù)改寫成可重入的函數(shù)? 答:把一個(gè)不可重入函數(shù)變成可重入的唯一方法是用可重入規(guī)則來重寫它。其實(shí)很簡單,只要遵守了幾條很容易理解的規(guī)則,那么寫出來的函數(shù)就是可重入的。 1) 不要使用全局變量。因?yàn)閯e的代碼很可能覆蓋這些變量值。 2) 在和硬件發(fā)生交互的時(shí)候,切記執(zhí)行類似disinterrupt()之類的操作,就是關(guān)閉硬件中斷。完成交互記得打開中斷,在有些系列上,這叫做“進(jìn)入/退出核心”。 3) 不能調(diào)用其它任何不可重入的函數(shù)。 4) 謹(jǐn)慎
8、使用堆棧。最好先在使用前先OS_ENTER_KERNAL。堆棧操作涉及內(nèi)存分配,稍不留神就會(huì)造成益出導(dǎo)致覆蓋其他任務(wù)的數(shù)據(jù),所以,請謹(jǐn)慎使用堆棧!最好別用!很多黑客程序就利用了這一點(diǎn)以便系統(tǒng)執(zhí)行非法代碼從而輕松獲得系統(tǒng)控制權(quán)。還有一些規(guī)則,總之,時(shí)刻記住一句話:保證中斷是安全的!可重入(reentrant)函數(shù)可以由多于一個(gè)任務(wù)并發(fā)使用,而不必?fù)?dān)心數(shù)據(jù)錯(cuò)誤。相反, 不可重入(non-reentrant)函數(shù)不能由超過一個(gè)任務(wù)所共享,除非能確保函數(shù)的互斥(或者使用信號量,或者在代碼的關(guān)鍵部分禁用中斷)??芍厝?函數(shù)可以在任意時(shí)刻被中斷,稍后再繼續(xù)運(yùn)行,不會(huì)丟失數(shù)據(jù)??芍厝牒瘮?shù)要么使用本地變量,要
9、么在使用全局變量時(shí)保護(hù)自己的數(shù)據(jù)。 12. 優(yōu)先級反轉(zhuǎn):任務(wù)1優(yōu)先級高于任務(wù)2,任務(wù)2高于任務(wù)3。任務(wù)1和任務(wù)2處于掛起狀態(tài),等待某一事件的發(fā)生,任務(wù)3正在運(yùn)行。此時(shí)任務(wù)3要使用其共享資源。使用共享資源之前,首先必須得到該資源的信號量。任務(wù)3得到該信號量,并開始使用該共享資源。由于任務(wù)1優(yōu)先級高,它等待的時(shí)間到來之后剝奪了任務(wù)3的CPU使用權(quán),任務(wù)1開始運(yùn)行。運(yùn)行過程中任務(wù)1也要使用那個(gè)任務(wù)3正在使用的資源,由于該資源的信號量還被任務(wù)3占用著,任務(wù)1只能進(jìn)入掛起狀態(tài),等待任務(wù)3釋放信號量。任務(wù)3 得以繼續(xù)運(yùn)行。由于任務(wù)2的優(yōu)先級高于任務(wù)3,當(dāng)任務(wù)2等待的事件發(fā)生后,任務(wù)2剝奪了任務(wù)3的CPU使
10、用權(quán)并開始運(yùn)行。處理它該處理的事件,直到處理完之后將CPU的控制權(quán)還給任務(wù)3.任務(wù)3接著運(yùn)行,直到釋放那個(gè)共享資源的信號量。直到此時(shí)才執(zhí)行任務(wù)1。13. 任務(wù)優(yōu)先級分配:單調(diào)執(zhí)行率調(diào)度發(fā)(RMS),用于分配任務(wù)優(yōu)先級。這種方法基于哪個(gè)任務(wù)執(zhí)行的次數(shù)最頻繁,執(zhí)行最頻繁的任務(wù)優(yōu)先級最高。14. 互斥條件:實(shí)現(xiàn)任務(wù)間通信最簡便的方法是使用共享數(shù)據(jù)結(jié)構(gòu),與共享資源打交道,使之滿足互斥條件最一般的方法有:關(guān)中斷;測試并置位;禁止做任務(wù)切換;利用信號量?;コ庵饕且?yàn)閷蚕頂?shù)據(jù)的并發(fā)訪問沒有做出合適的訪問策略造成的。例如兩個(gè)進(jìn)程同時(shí)訪問一個(gè)共享數(shù)據(jù)。保證一段時(shí)間只有一個(gè)線程在執(zhí)行一段代碼。15. 在多任務(wù)
11、內(nèi)核中普遍使用,信號量用于:1)控制共享資源的使用權(quán);2)標(biāo)志某事件的發(fā)生;2)是兩個(gè)任務(wù)的行為同步。16. 事件標(biāo)志:當(dāng)某任務(wù)要與多個(gè)事件同步時(shí),要使用事件標(biāo)志。若任務(wù)需要與任何事件之一發(fā)生同步,可稱為獨(dú)立型同步。任務(wù)也可以與若干事件發(fā)生同步,稱之為關(guān)聯(lián)型同步。17. 任務(wù)間的通信:有時(shí)很需要任務(wù)間的或中斷服務(wù)與任務(wù)間的通訊。這種信息傳遞稱為任務(wù)間的通訊。任務(wù)間信息的傳遞有兩個(gè)途徑:通過全程變量或發(fā)消息給另一個(gè)任務(wù)。用全程變量時(shí),必須保證每個(gè)任務(wù)或中斷服務(wù)程序獨(dú)享該變量。中斷服務(wù)中保證獨(dú)享的唯一辦法是關(guān)中斷。如果兩個(gè)任務(wù)共享某變量,各任務(wù)實(shí)現(xiàn)獨(dú)享該變量的辦法可以是關(guān)中斷再開中斷,或使用信號量
12、(如前面提到的那樣)。請注意,任務(wù)只能通過全程變量與中斷服務(wù)程序通訊,而任務(wù)并不知道什么時(shí)候全程變量被中斷服務(wù)程序修改了,除非中斷程序以信號量方式向任務(wù)發(fā)信號或者是該任務(wù)以查詢方式不斷周期性地查詢變量的值。要避免這種情況,用戶可以考慮使用郵箱或消息隊(duì)列。18. 消息郵箱:任務(wù)間的通信可以通過全局變量或者信號量來完成。全局變量雖然可以承載通信的內(nèi)容,但是接收方無法意識到信息的到達(dá),除非發(fā)送方向接收方發(fā)送一個(gè)信號量,或者接收方不斷該全局變量;信號量可以立即使接收方知道某個(gè)事件的發(fā)生,但無法傳遞具體內(nèi)容。用信號量進(jìn)行通信就像我們只撥通別人的手機(jī)而不與之通話;用消息隊(duì)列或者郵箱進(jìn)行通信則可達(dá)到既撥通別
13、人的手機(jī)又與之通話的效果。換句話說,消息隊(duì)列和郵箱可以及時(shí)傳送事件的內(nèi)容。郵箱通信的機(jī)理:發(fā)送方通過內(nèi)核服務(wù)把一封郵件投遞到郵箱,內(nèi)核完成投遞任務(wù)后通知等待列表中的接收方收取郵件。在整個(gè)投遞過程中,內(nèi)核充當(dāng)了郵遞員的角色。這里的“郵件”通常是一個(gè)指針,接收方可以通過該指針獲取郵件內(nèi)容。當(dāng)希望一次性向某個(gè)任務(wù)發(fā)送多則消息時(shí),郵箱就有點(diǎn)見肘了。因?yàn)橐粋€(gè)郵箱只能裝一封信。把多個(gè)郵箱集中到一起管理和使用就變成了消息隊(duì)列,所以消息隊(duì)列的操作和郵箱很相似??梢院唵蔚卣J(rèn)為,消息隊(duì)列是郵箱數(shù)組。進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)存。從邏輯角度來看,多線程的意義在于一個(gè)應(yīng)用程序中,有多個(gè)執(zhí)行部分可以同時(shí)執(zhí)行。 19. 線程與進(jìn)程的區(qū)別:一個(gè)系統(tǒng)運(yùn)行著很多進(jìn)程,可以比喻為一條馬路上有很多馬車,不同的進(jìn)程可以理解為不同的馬車,而同一輛馬車可以有很多匹馬來拉,這些馬就是線程。簡而言之,一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程。線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高。另外,進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)存,從而極大地提高了程序的運(yùn)行效率。進(jìn)程是程序在計(jì)算機(jī)上的一次執(zhí)行活動(dòng)。簡而言之,線程就是把一個(gè)進(jìn)程分為很
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 三年級下冊數(shù)學(xué)教案-長方形的面積-北師大版
- 公司與公司借款合同(2025年版)
- 二年級上冊數(shù)學(xué)教案-7.6 動(dòng)物樂園|北師大版
- (高清版)DB45∕T 203-2022 綠色食品 茶葉生產(chǎn)技術(shù)規(guī)程
- 人教版數(shù)學(xué)三年級上冊單元練習(xí)卷(易錯(cuò)題)-第六單元-多位數(shù)乘一位數(shù)(含答案)
- 模擬試卷五(原卷版+解析版)-三年級語文上學(xué)期期末全真模擬卷(部編版五四制)
- 第三課 表格的修飾(教學(xué)設(shè)計(jì))2023-2024學(xué)年四年級下冊信息技術(shù)龍教版
- 2025年甘肅財(cái)貿(mào)職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫學(xué)生專用
- 2025年度實(shí)習(xí)生實(shí)習(xí)基地共建實(shí)習(xí)勞動(dòng)協(xié)議書
- 2025年度新能源產(chǎn)業(yè)研發(fā)人員招聘與技術(shù)支持協(xié)議
- HCIE-Transmission H12-931認(rèn)證培訓(xùn)考試題庫匯總(含答案)
- 造血細(xì)胞與基本檢驗(yàn)方法-細(xì)胞化學(xué)染色(血液學(xué)檢驗(yàn)課件)
- 領(lǐng)子的分類詳解課件
- 產(chǎn)品質(zhì)量保證書
- 工廠員工消防安全培訓(xùn)內(nèi)容
- 調(diào)節(jié)與集合的相關(guān)性 相對調(diào)節(jié)和相對集合的關(guān)系
- 《金融工程》課程教案
- 水輪機(jī)結(jié)構(gòu)總體介紹
- 十八項(xiàng)護(hù)理核心制度培訓(xùn)課件
- GB/T 41326-2022六氟丁二烯
- GB/T 19470-2004土工合成材料塑料土工網(wǎng)
評論
0/150
提交評論