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