操作系統(tǒng)相關(guān)小結(jié)_第1頁
操作系統(tǒng)相關(guān)小結(jié)_第2頁
操作系統(tǒng)相關(guān)小結(jié)_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、1. 前后臺系統(tǒng):應(yīng)用程序是一個無限的循環(huán),循環(huán)中調(diào)用相應(yīng)的函數(shù)完成相應(yīng)的操作,這部分可以看成后臺行為。中斷服務(wù)程序處理異步事件,這部分可以看成前臺行為。后臺叫任務(wù)級,前臺叫中斷級。2. 代碼的臨界段也稱為臨界區(qū),指處理時不可分割的代碼。一旦這部分代碼開始執(zhí)行,則不允許有任何中斷打入。為確保臨界段代碼的執(zhí)行,在進入臨界段之前要關(guān)中斷,而臨界段執(zhí)行完之后立即開中斷。3. 資源:任何為任務(wù)所占有的實體都叫資源。共享資源:可以被一個以上的任務(wù)使用的資源叫做共享資源。為了防止數(shù)據(jù)被破壞,每個任務(wù)在與共享資源打交道時,必須獨占資源,這叫互斥。4. 任務(wù):一個任務(wù),也稱作為一個線程,是一個簡單的程序,該程

2、序可以認為CPU完全只屬于該程序自己。每個任務(wù)都是一個無限循環(huán)。每個任務(wù)都處在以下5種狀態(tài)之下:休眠態(tài)、就緒態(tài)、運行態(tài)、掛起態(tài)和被中斷態(tài)。休眠態(tài)相當于該任務(wù)駐留在內(nèi)存中,但并不被多任務(wù)內(nèi)核所調(diào)度。就緒態(tài)意味著該任務(wù)已經(jīng)準備好,可以運行了,但是由于該任務(wù)的優(yōu)先級比正在運行的任務(wù)優(yōu)先級低,還暫時不能運行。運行態(tài)的任務(wù)是指該任務(wù)掌握了CPU的控制權(quán),正在運行中。掛起態(tài)指該任務(wù)在等待某一事件的發(fā)生。最后,發(fā)生中斷時,CPU提供相應(yīng)的中斷服務(wù),原來正在運行的任務(wù)暫不能運行,就進入了被中斷狀態(tài)。5. 任務(wù)切換(上下文切換):CPU寄存器內(nèi)容切換,當內(nèi)核要運行另外的任務(wù)時,它保存正在運行任務(wù)的當前狀態(tài),即C

3、PU寄存器中的全部內(nèi)容。這些內(nèi)容保存在任務(wù)自己的棧區(qū)之中。入棧工作完成之后,就是把下一個將要運行的任務(wù)的當前狀況從該任務(wù)的棧中重新裝入CPU的寄存器,并開始下一個任務(wù)的執(zhí)行。做任務(wù)切換所需要的時間取決于CPU有多少寄存器要入棧。6. 內(nèi)核:多任務(wù)系統(tǒng)中,內(nèi)核負責(zé)管理各個任務(wù),或則說為每個任務(wù)分配 CPU事件,并負責(zé)任務(wù)間的通訊。內(nèi)核的基本服務(wù)是任務(wù)切換。7. 調(diào)度:就是指該輪到哪個任務(wù)運行了。多數(shù)實時內(nèi)核是基于優(yōu)先級調(diào)度算法,即CPU總是讓處于就緒態(tài)的優(yōu)先級最高的任務(wù)先運行。究竟何時讓高優(yōu)先級的任務(wù)掌握CPU的使用權(quán),有兩種不同的情況,這要看用什么類型的內(nèi)核,是不可剝奪型的還是不可剝奪型。8.

4、 不可剝奪型內(nèi)核:每個任務(wù)主動放棄CPU的使用權(quán),放棄的方法可以使用多種函數(shù)定時或則定事件的放棄。異步事件還是由中斷服務(wù)程序來處理。中斷處理結(jié)束之后還是回到被中斷的那個任務(wù)直至該任務(wù)主動放棄CPU使用權(quán)。在任務(wù)級,不可剝奪型內(nèi)核允許使用不可重入函數(shù)不必擔心被重復(fù)調(diào)用,因為每一時刻只有一個任務(wù)在運行。9. 可剝奪型內(nèi)核:當運行的任務(wù)使用一個更高優(yōu)先級的任務(wù)進入就緒態(tài)時當前任務(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)核中,要謹慎使用不可重用函數(shù),因為低優(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)境,一個可重入的函數(shù)簡單來說是可以被中斷的函數(shù),也就是說,可以在這個函數(shù)執(zhí)行的任何時刻中斷它,轉(zhuǎn)入OS調(diào)度去執(zhí)行另外一段代碼,而返回控制時不會出現(xiàn)錯誤;而不可重入函數(shù)由于使用了一些系統(tǒng)資源,比如全局變量區(qū),中斷向量表,所以它被中斷可能出現(xiàn)問題。也可以這樣理解,重入即表示重復(fù)進入,首先意味著這個函數(shù)可以被中斷,其次意味著它除了使用自己棧上的變量外不依賴于任何

6、環(huán)境,這樣的函數(shù)可重入,可以允許有該函數(shù)的多個副本在運行,由于他們使用的是分離的棧,所以不會相互干擾。如果需要訪問全局變量,一定要注意實施互斥手段。可重入函數(shù)在并行運行環(huán)境中非常重要。保證函數(shù)的可重入性方法:1)盡量使用局部變量2)對于要使用的全局變量要加以保護(關(guān)中斷、信號量)。在實時系統(tǒng)的設(shè)計中,經(jīng)常會出現(xiàn)多個任務(wù)調(diào)用同一個函數(shù)的情況。如果這個函數(shù)不幸設(shè)計成為不可重入函數(shù),那么不同任務(wù)調(diào)用這個函數(shù)時可能修改其他任務(wù)調(diào)用這個函數(shù)的數(shù)據(jù),導(dǎo)致不可預(yù)料后果。所謂可重入函數(shù)是指一個可以被多個任務(wù)調(diào)用的過程,任務(wù)調(diào)用時不必擔心數(shù)據(jù)是否會出錯。問題1,如何編寫可重入的函數(shù)? 答:在函數(shù)體內(nèi)不訪問那些全

7、局變量,不使用靜態(tài)局部變量,堅持只使用局部變量,寫出的函數(shù)就將是可重入的。如果必須訪問全局變量,記住利用互斥信號量來保護全局變量。問題2,如何將一個不可重入的函數(shù)改寫成可重入的函數(shù)? 答:把一個不可重入函數(shù)變成可重入的唯一方法是用可重入規(guī)則來重寫它。其實很簡單,只要遵守了幾條很容易理解的規(guī)則,那么寫出來的函數(shù)就是可重入的。 1) 不要使用全局變量。因為別的代碼很可能覆蓋這些變量值。 2) 在和硬件發(fā)生交互的時候,切記執(zhí)行類似disinterrupt()之類的操作,就是關(guān)閉硬件中斷。完成交互記得打開中斷,在有些系列上,這叫做“進入/退出核心”。 3) 不能調(diào)用其它任何不可重入的函數(shù)。 4) 謹慎

8、使用堆棧。最好先在使用前先OS_ENTER_KERNAL。堆棧操作涉及內(nèi)存分配,稍不留神就會造成益出導(dǎo)致覆蓋其他任務(wù)的數(shù)據(jù),所以,請謹慎使用堆棧!最好別用!很多黑客程序就利用了這一點以便系統(tǒng)執(zhí)行非法代碼從而輕松獲得系統(tǒng)控制權(quán)。還有一些規(guī)則,總之,時刻記住一句話:保證中斷是安全的!可重入(reentrant)函數(shù)可以由多于一個任務(wù)并發(fā)使用,而不必擔心數(shù)據(jù)錯誤。相反, 不可重入(non-reentrant)函數(shù)不能由超過一個任務(wù)所共享,除非能確保函數(shù)的互斥(或者使用信號量,或者在代碼的關(guān)鍵部分禁用中斷)。可重入 函數(shù)可以在任意時刻被中斷,稍后再繼續(xù)運行,不會丟失數(shù)據(jù)??芍厝牒瘮?shù)要么使用本地變量,要

9、么在使用全局變量時保護自己的數(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正在運行。此時任務(wù)3要使用其共享資源。使用共享資源之前,首先必須得到該資源的信號量。任務(wù)3得到該信號量,并開始使用該共享資源。由于任務(wù)1優(yōu)先級高,它等待的時間到來之后剝奪了任務(wù)3的CPU使用權(quán),任務(wù)1開始運行。運行過程中任務(wù)1也要使用那個任務(wù)3正在使用的資源,由于該資源的信號量還被任務(wù)3占用著,任務(wù)1只能進入掛起狀態(tài),等待任務(wù)3釋放信號量。任務(wù)3 得以繼續(xù)運行。由于任務(wù)2的優(yōu)先級高于任務(wù)3,當任務(wù)2等待的事件發(fā)生后,任務(wù)2剝奪了任務(wù)3的CPU使

10、用權(quán)并開始運行。處理它該處理的事件,直到處理完之后將CPU的控制權(quán)還給任務(wù)3.任務(wù)3接著運行,直到釋放那個共享資源的信號量。直到此時才執(zhí)行任務(wù)1。13. 任務(wù)優(yōu)先級分配:單調(diào)執(zhí)行率調(diào)度發(fā)(RMS),用于分配任務(wù)優(yōu)先級。這種方法基于哪個任務(wù)執(zhí)行的次數(shù)最頻繁,執(zhí)行最頻繁的任務(wù)優(yōu)先級最高。14. 互斥條件:實現(xiàn)任務(wù)間通信最簡便的方法是使用共享數(shù)據(jù)結(jié)構(gòu),與共享資源打交道,使之滿足互斥條件最一般的方法有:關(guān)中斷;測試并置位;禁止做任務(wù)切換;利用信號量?;コ庵饕且驗閷蚕頂?shù)據(jù)的并發(fā)訪問沒有做出合適的訪問策略造成的。例如兩個進程同時訪問一個共享數(shù)據(jù)。保證一段時間只有一個線程在執(zhí)行一段代碼。15. 在多任務(wù)

11、內(nèi)核中普遍使用,信號量用于:1)控制共享資源的使用權(quán);2)標志某事件的發(fā)生;2)是兩個任務(wù)的行為同步。16. 事件標志:當某任務(wù)要與多個事件同步時,要使用事件標志。若任務(wù)需要與任何事件之一發(fā)生同步,可稱為獨立型同步。任務(wù)也可以與若干事件發(fā)生同步,稱之為關(guān)聯(lián)型同步。17. 任務(wù)間的通信:有時很需要任務(wù)間的或中斷服務(wù)與任務(wù)間的通訊。這種信息傳遞稱為任務(wù)間的通訊。任務(wù)間信息的傳遞有兩個途徑:通過全程變量或發(fā)消息給另一個任務(wù)。用全程變量時,必須保證每個任務(wù)或中斷服務(wù)程序獨享該變量。中斷服務(wù)中保證獨享的唯一辦法是關(guān)中斷。如果兩個任務(wù)共享某變量,各任務(wù)實現(xiàn)獨享該變量的辦法可以是關(guān)中斷再開中斷,或使用信號量

12、(如前面提到的那樣)。請注意,任務(wù)只能通過全程變量與中斷服務(wù)程序通訊,而任務(wù)并不知道什么時候全程變量被中斷服務(wù)程序修改了,除非中斷程序以信號量方式向任務(wù)發(fā)信號或者是該任務(wù)以查詢方式不斷周期性地查詢變量的值。要避免這種情況,用戶可以考慮使用郵箱或消息隊列。18. 消息郵箱:任務(wù)間的通信可以通過全局變量或者信號量來完成。全局變量雖然可以承載通信的內(nèi)容,但是接收方無法意識到信息的到達,除非發(fā)送方向接收方發(fā)送一個信號量,或者接收方不斷該全局變量;信號量可以立即使接收方知道某個事件的發(fā)生,但無法傳遞具體內(nèi)容。用信號量進行通信就像我們只撥通別人的手機而不與之通話;用消息隊列或者郵箱進行通信則可達到既撥通別

13、人的手機又與之通話的效果。換句話說,消息隊列和郵箱可以及時傳送事件的內(nèi)容。郵箱通信的機理:發(fā)送方通過內(nèi)核服務(wù)把一封郵件投遞到郵箱,內(nèi)核完成投遞任務(wù)后通知等待列表中的接收方收取郵件。在整個投遞過程中,內(nèi)核充當了郵遞員的角色。這里的“郵件”通常是一個指針,接收方可以通過該指針獲取郵件內(nèi)容。當希望一次性向某個任務(wù)發(fā)送多則消息時,郵箱就有點見肘了。因為一個郵箱只能裝一封信。把多個郵箱集中到一起管理和使用就變成了消息隊列,所以消息隊列的操作和郵箱很相似??梢院唵蔚卣J為,消息隊列是郵箱數(shù)組。進程在執(zhí)行過程中擁有獨立的內(nèi)存單元,而多個線程共享內(nèi)存。從邏輯角度來看,多線程的意義在于一個應(yīng)用程序中,有多個執(zhí)行部分可以同時執(zhí)行。 19. 線程與進程的區(qū)別:一個系統(tǒng)運行著很多進程,可以比喻為一條馬路上有很多馬車,不同的進程可以理解為不同的馬車,而同一輛馬車可以有很多匹馬來拉,這些馬就是線程。簡而言之,一個程序至少有一個進程,一個進程至少有一個線程。線程的劃分尺度小于進程,使得多線程程序的并發(fā)性高。另外,進程在執(zhí)行過程中擁有獨立的內(nèi)存單元,而多個線程共享內(nèi)存,從而極大地提高了程序的運行效率。進程是程序在計算機上的一次執(zhí)行活動。簡而言之,線程就是把一個進程分為很

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論