进程的同步与互斥
現(xiàn)代操作系統(tǒng)采用多道程序設(shè)計機制,多個進程可以并發(fā)執(zhí)行,CPU在進程之間來回切換,共享某些資源,提高了資源的利用率,但這也使得處理并發(fā)執(zhí)行的多個進程之間的沖突和相互制約關(guān)系成為了一道難題。如果對并發(fā)進程的調(diào)度不當,則可能會出現(xiàn)運行結(jié)果與切換時間有關(guān)的情況,令結(jié)果不可再現(xiàn),影響系統(tǒng)的效率和正確性,嚴重時還會使系統(tǒng)直接崩潰。
多進程的系統(tǒng)中避免不了進程間的相互關(guān)系。進程間的關(guān)系主要有兩種:同步與互斥。
一、同步
同步關(guān)系,也成為直接制約關(guān)系。指系統(tǒng)中多個進程中發(fā)生的事件存在某種時序關(guān)系,需要相互合作,共同完成一項任務。這些線程需要在某些位置上協(xié)調(diào)他們的工作次序而等待、傳遞信息所產(chǎn)生的制約關(guān)系。進程間的直接制約關(guān)系來源于他們之間的合作。
一個很典型的例子就是公共汽車上司機和售票員直接的關(guān)系,如下所示:
再例如,輸入進程A通過單緩沖向進程B提供數(shù)據(jù)。當該緩沖區(qū)空時,進程B不能獲得所需數(shù)據(jù)而阻塞,一旦進程A將數(shù)據(jù)送入緩沖區(qū),進程B被喚醒。反之,當緩沖區(qū)滿時,進程A被阻塞,僅當進程B取走緩沖數(shù)據(jù)時,才喚醒進程A。
二、互斥
互斥關(guān)系,也稱為間接制約關(guān)系。由于各進程要求共享資源,而有些資源需要互斥使用,因此各進程間競爭使用這些資源,進程的這種關(guān)系為進程的互斥。
一個很典型的例子就是系統(tǒng)的不同的進程同時要求使用打印機,如下圖所示。
三、同步和互斥的特點比較
四、臨界資源和臨界區(qū)
1)臨界資源
一次只能被一個進程所占用的資源就是所謂的臨界資源。比如:打印機。
2)臨界區(qū)
訪問臨界資源的那段代碼稱為臨界區(qū)。多個進程的臨界區(qū)成為相關(guān)臨界區(qū)。
為了保證臨界資源的正確使用,可以把臨界資源的訪問過程分成四個部分:
①進入?yún)^(qū)。為了進入臨界區(qū)使用臨界資源,在進入?yún)^(qū)要檢查可否進入臨界區(qū),如果可以進入臨界區(qū),則應設(shè)置正在訪問臨界區(qū)的標志,以阻止其他進程同時進入臨界區(qū)。
②臨界區(qū)。進程中訪問臨界資源的那段代碼,又稱臨界段。
③退出區(qū)。將正在訪問臨界區(qū)的標志清除。
④剩余區(qū)。代碼中的其余部分。
使用臨界區(qū)時必須遵守的規(guī)則:
①空閑讓進:臨界資源空閑時一定要讓進程進入,不發(fā)生“互斥禮讓”行為。
②忙則等待:臨界資源正在使用時外面的進程等待。
③有限等待:進程等待進入臨界區(qū)的時間是有限的,不會發(fā)生“餓死”的情況。
④讓權(quán)等待:進程等待進入臨界區(qū)是應該放棄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
總結(jié)
- 上一篇: 操作系统进程(作业)调度常见算法详解
- 下一篇: 血糖高可以喝酸奶吗