臨界區,臨界資源

2021-09-26 21:15:11 字數 925 閱讀 5878

* 什麼是臨界區?

答:每個程序中訪問臨界資源(比如全域性變數等公用資源)的那段程式(**)稱為臨界區(臨界資源是一次僅允許乙個程序使用的共享資源,如全域性變數等),也稱為臨界段。也就說是每個程序(ucos中是任務)都可以有訪問這個全域性變數的**,比如某個程序想用該變數做加法,另外乙個程序想用這個變數做其它用途等,那麼這兩個程序的這兩段**都叫做臨界區,因為他們都是訪問了臨界資源(這個全域性變數)。對於某一臨界資源,對應的臨界區具體來說有多個(多個程序都可以有)。

補充:不同作業系統對臨界區**能否被打斷的處理方式不一樣:

+ 嵌入式作業系統ucos中,進入臨界區是先關中斷,出了臨界區,開中斷的處理方式,即進入臨界區,完全不允許其他任務和中斷打斷。

+ 但是在其他作業系統中(可能是linux),是利用p,v操作,訊號量等實現不同程序的臨界區互斥訪問這個臨界資源,比如每個程序訪問該全域性變數前p一下,訪問完v一下,這樣程序1訪問到一半,時間片已經到了,還是可以切換到其它程序,若其它程序剛好想訪問這個全域性變數(此程序對此全域性變數的訪問也是加了p,v的),因為此時的p操作檢測到別的程序正在訪問,所以這個程序p就失敗了,所以此程序訪問不了這個全域性變數,其它程序也同理,所以實現了互斥的訪問臨界資源。

總結:先有臨界資源,再有的臨界區。ucos中臨界區不可以被打斷;linux等中臨界區可以被其他程序打斷(程序切換),但是切換到的程序如果剛好有訪問這個臨界資源,那麼還是不能訪問。

* 程序進入臨界區的排程原則是:

①如果有若干程序要求進入空閒的臨界區,一次僅允許乙個程序進入。②任何時候,處於臨界區內的程序不可多於乙個。如已有程序進入自己的臨界區,則其它所有試圖進入臨界區的程序必須等待。③進入臨界區的程序要在有限時間內退出,以便其它程序能及時進入自己的臨界區。④如果程序不能進入自己的臨界區,則應讓出cpu,避免程序出現「忙等」現象。

臨界資源和臨界區

臨界資源 臨界資源是一次僅允許乙個程序使用的共享資源,各程序採取互斥的方式實現共享的資源。屬於臨界資源的硬體有,印表機,磁帶機等 軟體有訊息佇列,變數,陣列,緩衝區等。諸程序間採取互斥方式,實現對這種資源的共享。臨界區 每個程序中訪問臨界資源的那段 稱為臨界區 criticalsection 每次只...

臨界資源和臨界區

個人部落格 the blog of waiterxiaoyy 歡迎來互相交流學習。屬於臨界資源的 硬體 印表機 磁帶機 軟體 訊息佇列 變數 陣列 緩衝區。每個程序訪問臨界資源的那段 稱為臨界區。不論是硬體臨界資源還是軟體臨界資源,多個程序必須互斥地對它進行訪問。保證諸程序互斥地進入臨界區,便可實現...

FreeRTOS臨界資源保護(臨界區保護)

臨界區未保護出現的異常 今天我們說說其中之一的原因 臨界資源未保護。我們先看個例子,假如有乙個5個節點單向鍊錶,如下結構 head 1 2 3 4 5 null 有一任務a在乙個單向鍊錶的2 3節點之間插入乙個新的2a節點,已經將2 2a,還未將2a 3,此時,鍊錶變為兩個未完整的部分,如下結構 h...