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