操作系統(tǒng)臨界區(qū)的調(diào)度原則有哪些
操作系統(tǒng)臨界區(qū)是一個(gè)訪問共用資源的程序片段,通常一次僅允許一個(gè)進(jìn)程進(jìn)入,具體有什么原則呢?下面由學(xué)習(xí)啦小編為大家整理了操作系統(tǒng)臨界區(qū)調(diào)用原則的相關(guān)知識(shí),希望對(duì)大家有幫助。
一.臨界區(qū)簡介
臨界區(qū)指的是一個(gè)訪問共用資源(例如:共用設(shè)備或是共用存儲(chǔ)器)的程序片段,而這些共用資源又無法同時(shí)被多個(gè)線程訪問的特性。當(dāng)有線程進(jìn)入臨界區(qū)段時(shí),其他線程或是進(jìn)程必須等待(例如:bounded waiting 等待法),有一些同步的機(jī)制必須在臨界區(qū)段的進(jìn)入點(diǎn)與離開點(diǎn)實(shí)現(xiàn),以確保這些共用資源是被互斥獲得使用,例如:semaphore。只能被單一線程訪問的設(shè)備,例如:打印機(jī)。
每個(gè)進(jìn)程中訪問臨界資源的那段代碼稱為臨界區(qū)(Critical Section)(臨界資源是一次僅允許一個(gè)進(jìn)程使用的共享資源)。每次只準(zhǔn)許一個(gè)進(jìn)程進(jìn)入臨界區(qū),進(jìn)入后不允許其他進(jìn)程進(jìn)入。不論是硬件臨界資源,還是軟件臨界資源,多個(gè)進(jìn)程必須互斥地對(duì)它進(jìn)行訪問。
多個(gè)進(jìn)程中涉及到同一個(gè)臨界資源的臨界區(qū)稱為相關(guān)臨界區(qū)。.
二.臨界區(qū)調(diào)用法則
進(jìn)程進(jìn)入臨界區(qū)的調(diào)度原則是:
1、如果有若干進(jìn)程要求進(jìn)入空閑的臨界區(qū),一次僅允許一個(gè)進(jìn)程進(jìn)入。
2、任何時(shí)候,處于臨界區(qū)內(nèi)的進(jìn)程不可多于一個(gè)。如已有進(jìn)程進(jìn)入自己的臨界區(qū),則其它所有試圖進(jìn)入臨界區(qū)的進(jìn)程必須等待。
3、進(jìn)入臨界區(qū)的進(jìn)程要在有限時(shí)間內(nèi)退出,以便其它進(jìn)程能及時(shí)進(jìn)入自己的臨界區(qū)。
4、如果進(jìn)程不能進(jìn)入自己的臨界區(qū),則應(yīng)讓出CPU,避免進(jìn)程出現(xiàn)“忙等”現(xiàn)象。
補(bǔ)充:三.臨界區(qū)存在的幾個(gè)問題
在使用臨界區(qū)時(shí),一般不允許其運(yùn)行時(shí)間過長,只要進(jìn)入臨界區(qū)的線程還沒有離開,其他所有試圖進(jìn)入此臨界區(qū)的線程都會(huì)被掛起而進(jìn)入到等待狀態(tài),并會(huì)在一定程度上影響程序的運(yùn)行性能。尤其需要注意的是不要將等待用戶輸入或是其他一些外界干預(yù)的操作包含到臨界區(qū)。如果進(jìn)入了臨界區(qū)卻一直沒有釋放,同樣也會(huì)引起其他線程的長時(shí)間等待。換句話說,在執(zhí)行了EnterCriticalSection()語句進(jìn)入臨界區(qū)后無論發(fā)生什么,必須確保與之匹配的LeaveCriticalSection()都能夠被執(zhí)行到??梢酝ㄟ^添加結(jié)構(gòu)化異常處理代碼來確保LeaveCriticalSection()語句的執(zhí)行。雖然臨界區(qū)同步速度很快,但卻只能用來同步本進(jìn)程內(nèi)的線程,而不可用來同步多個(gè)進(jìn)程中的線程。
1、 臨界區(qū)的退出,不會(huì)檢測是否是已經(jīng)進(jìn)入的線程,也就是說,我可以在A線程中調(diào)用進(jìn)入臨界區(qū)函數(shù),在B線程調(diào)用退出臨界區(qū)的函數(shù),同樣是成功;
2、 在測試臨界區(qū)的時(shí)候,如果我沒有調(diào)用進(jìn)入臨界區(qū)的函數(shù),直接退出的話,系統(tǒng)沒有進(jìn)行判斷,但是計(jì)數(shù)發(fā)現(xiàn)了改變,此時(shí)此臨界區(qū)就再也用不了了,因?yàn)榻Y(jié)構(gòu)中的數(shù)據(jù)已經(jīng)亂掉了。