进程的同步与互斥
現代操作系統采用多道程序設計機制,多個進程可以并發執行,CPU在進程之間來回切換,共享某些資源,提高了資源的利用率,但這也使得處理并發執行的多個進程之間的沖突和相互制約關系成為了一道難題。如果對并發進程的調度不當,則可能會出現運行結果與切換時間有關的情況,令結果不可再現,影響系統的效率和正確性,嚴重時還會使系統直接崩潰。
多進程的系統中避免不了進程間的相互關系。進程間的關系主要有兩種:同步與互斥。
一、同步
同步關系,也成為直接制約關系。指系統中多個進程中發生的事件存在某種時序關系,需要相互合作,共同完成一項任務。這些線程需要在某些位置上協調他們的工作次序而等待、傳遞信息所產生的制約關系。進程間的直接制約關系來源于他們之間的合作。
一個很典型的例子就是公共汽車上司機和售票員直接的關系,如下所示:
再例如,輸入進程A通過單緩沖向進程B提供數據。當該緩沖區空時,進程B不能獲得所需數據而阻塞,一旦進程A將數據送入緩沖區,進程B被喚醒。反之,當緩沖區滿時,進程A被阻塞,僅當進程B取走緩沖數據時,才喚醒進程A。
二、互斥
互斥關系,也稱為間接制約關系。由于各進程要求共享資源,而有些資源需要互斥使用,因此各進程間競爭使用這些資源,進程的這種關系為進程的互斥。
一個很典型的例子就是系統的不同的進程同時要求使用打印機,如下圖所示。
三、同步和互斥的特點比較
四、臨界資源和臨界區
1)臨界資源
一次只能被一個進程所占用的資源就是所謂的臨界資源。比如:打印機。
2)臨界區
訪問臨界資源的那段代碼稱為臨界區。多個進程的臨界區成為相關臨界區。
為了保證臨界資源的正確使用,可以把臨界資源的訪問過程分成四個部分:
①進入區。為了進入臨界區使用臨界資源,在進入區要檢查可否進入臨界區,如果可以進入臨界區,則應設置正在訪問臨界區的標志,以阻止其他進程同時進入臨界區。
②臨界區。進程中訪問臨界資源的那段代碼,又稱臨界段。
③退出區。將正在訪問臨界區的標志清除。
④剩余區。代碼中的其余部分。
使用臨界區時必須遵守的規則:
①空閑讓進:臨界資源空閑時一定要讓進程進入,不發生“互斥禮讓”行為。
②忙則等待:臨界資源正在使用時外面的進程等待。
③有限等待:進程等待進入臨界區的時間是有限的,不會發生“餓死”的情況。
④讓權等待:進程等待進入臨界區是應該放棄CPU的使用。
參考資料:
http://www.eygle.com/digest/2004/12/osprocess_lock_latchs_emaphores.html
http://c.biancheng.net/cpp/html/2596.html
http://blog.jobbole.com/86709/
http://www.cnblogs.com/CareySon/archive/2012/04/14/Process-SynAndmutex.html
總結
- 上一篇: 操作系统进程(作业)调度常见算法详解
- 下一篇: 临界区、互斥量、信号量、事件的区别