在shared memory[1]溝通方式下,若未對共享變數提供任何互斥存取控制(or同步)機制,則執行的結果(共享變數之值)會依process執行次序不同而有所不同
解決Race condition有幾種方法,1)Disable Interrupt,2)Critical Section Design
1)Disable Interrupt:
Process在對共享變數進行存取之前,先Disable Interrupt(i.e. 發出system call請求OS執行),如此可以確保Process在對其共享變數存取期間不受任何其他processes干擾(or preemption)。直到完成此敘述後才Enable Interrupt
優點:簡單
缺點:僅適用於uni-processor環境,但不適用於multi-processors下
/* 因為要disable all cpu的 interrupt非常耗費時間及資源,system performance很差 */
2)Critical Section Design:
對共享變數進行Lock control,process一旦取得對此共享變數之存取權,在其尚未完成工作時,Lock決不會打開直到完成,才會打開Lock讓其他process存取。
/* 點我延伸討論Critical Section Design */
Reference:
[1] shared memory:
一組process透過對share variables之存取,達到彼此溝通之目的。OS沒有提供額外支援(Global),僅提供memory space而已,此種方式Programmer負擔重,必須確保共享變數之互斥存取機制(or同步),以確保正確性。Race condition為shared memory下可能產生的問題之一,另外一個可能問題是Data Inconsistency,執行的結果不如預期。
[2] OS課本/教材
2012年2月28日 星期二
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言