有shared data就會有data inconsistency的問題,所以需要process synchronization
例子1:Consumer-Producer problem
存取到共同變數如count
Cosumer在把data取出之後會將count--
Producer把data放到buffer之後會將count++
由於count++和count--的動作在組語裡面是三道指令load、(+ or -)、store
所以有可能cpu被中斷然後被Cosumer或Producer其中一人所搶去
然後就造成了錯誤
例子2:Therac-25
Critical section-會用到共同資源的code
解決critical section的三個條件
1.Mutual Exclusion
2.Progress
3.Bounded Waiting
傳統方式還有disable interrupt跟semarphore,但是在multicore裡面disable interrupt沒用(因為disable了A cpu、B cpu還有可能會執行到critical section)
semarphore則是要有支援multicore才行
或者是使用atomic instruction來作ex:TestAndSet
目前分類:OS (1)
- Oct 14 Tue 2008 10:03
OS-Process Synchronization