2017年3月22日 星期三

OS - Critical Section 、race condition

Critical Section
這一詞作業系統這門課,常常聽到的名詞之一,有此可見它的重要性也是不容忽視的,首先要介紹他的概念:

到底什麼是Critical Section?它是指當多個thread可能同時存取的記憶體、變數或函數的情況,它的作用是用於在多執行緒環境中保護資源,而通常這種要受保護的程式區段稱為 Critical Section 。

至於為什麼要保護這個區段呢呢?因為在程式裡有可能有兩個 thread (可看成一個小小的function)同時存取一個global variable(全域變數)(或函數),這時後,因為程式的需要,thread 不想被其他程式中斷(不被其他thread插入影響),所以必須要一口起執行完畢,而該需要一口氣執行完的程式區段,所以需要設定
Critical Section,以保護目前執行的thread不被其他thread影響。

因此可以歸類出以下重點:

1.Critical Section是一程式區段, 而這個程式區段必須擁有某共用資源的權限才能執。

2.可以放心的執行 Critical Section 的程式碼,絕不會有其他的 thread 同時執行你所在的code。

3.thread 會被 preempt 換其他的thread 執行, 但是想要進入 Critical Section 的thread 是不會被 排進schedule裡。

4.系統不保證進入Critical Section thread 的順序,但OS保證公平對待所有要進入的thread。

另外,還有一個值得注意的地方是,若要控制critical section執行之機制必須滿足下列三個要求:

(1)Mutual exclusion:不允許兩個以上的process同時在對應的critical section中執行。

(2)Progress:若沒有process在對應的critical section中執行,則控制的機制不能阻擋請求進入critical section之process進入critical section。

(3)Bounded waiting:控制機制必須使等待進入critical section之process在有限時間內進入critical section。

如果都無法同時滿足三個的需求,那Critical Section也無法發揮它的效用了。


race condition
它旨在描述一個系統或者進程的輸出依賴於不受控制的事件出現順序或者出現時機。此詞源自於兩個訊號試著彼此競爭,來影響誰先輸出。
舉例來說,如果電腦中的兩個行程同時試圖修改一個共享記憶體的內容,在沒有並行控制的情況下,最後的結果依賴於兩個行程的執行順序與時機。而且如果發生了並行存取衝突,則最後的結果是不正確的。



reference:os-ii部落格-critical sectionwiki_race condition

沒有留言:

張貼留言

linux - IPC (inter-processes communication) Shered mempry(共用記憶體)

IPC (inter-processes communication) 顧名思義,processes 之間溝通的管道&機制。 Shared memory   程式間可以共享memory Message Queue  程式間傳送資訊最簡單的方法 Semaphore...