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