2009年6月11日 星期四

OS心得系列 Critical Section

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也無法發揮它的效用了。

1 則留言: