摘要:《操作系統(tǒng)》是高校計算機專業(yè)的一門非常重要的專業(yè)課程,理論性較強,尤其信號量機制一直是大家公認的學(xué)習(xí)操作系統(tǒng)的難點之一。學(xué)生不好懂,也不愿意學(xué)。該文從生活中常見的比較有意思的互斥同步的實例出發(fā),介紹了使用信號量機制解決互斥和同步關(guān)系的方法。簡單易懂,趣味性較強,寓教于樂,輕輕松松掌握抽象難懂的理論知識。
關(guān)鍵字:進程;互斥;同步;信號量;P操作;V操作
中圖法分類號:TP301.6 文獻標(biāo)識碼:A文章編號:1009-3044(2009)36-10480-02
Several Ways of Learning Semaphore Mechanism
MA Yu-ling
(School of Computer Science, Shandong Yingcai University, Jinan 250100, China)
Abstract: \"Operating system\" is very important professional courses to the students of studying computer science in university. It is very theoretical. Especially, semaphore mechanism has been recognized to be one of the difficulties in learning \"Operating system\". It is difficult to understand, and some students are unwilling to learn. In this paper, some examples of mutual exclusion synchronization are introduced. They come from the common life and interesting. These examples are simple and easy to understand. By these examples, it turning easy for students to master abstract and difficult theory in \"Operating system\".
Key words: process; mutex; synchronization; semaphore; P(S); V(S)
系統(tǒng)中各進程間存在著互斥和同步關(guān)系,如果處理不當(dāng),會導(dǎo)致系統(tǒng)性能下降甚至系統(tǒng)紊亂。如何保證進程間的這兩種關(guān)系呢?目前,操作系統(tǒng)中普遍采用荷蘭科學(xué)家Edsger Dijistra 提出的信號量機制。
信號量(singnal):初值為非負的整型變量,往往和一個隊列相關(guān)聯(lián)。在其上只有兩種操作,P操作和V操作,定義如下:
P(S): 順序執(zhí)行下述兩個動作:
① 信號量的值減1,即S=S-1;
② 如果S>=0,則當(dāng)前進程繼續(xù)執(zhí)行;如果S<0,則把當(dāng)前進程的狀態(tài)置為阻塞態(tài),把相應(yīng)的PCB連入該信號量隊列的末尾,并放棄處理機,進行等待。
V(S): 順序執(zhí)行下述兩個動作:
① S值加1,即S=S+1;
② 如果S>0,則該進程繼續(xù)運行;如果S<=0,則釋放信號量隊列上的第一個PCB,并把所對應(yīng)的進程由阻塞態(tài)改為就緒態(tài),執(zhí)行V操作的進程繼續(xù)運行。
1 教學(xué)實例
1) 用信號量機制實現(xiàn)互斥關(guān)系
解決方案:設(shè)一個互斥信號量S,其初值為1。然后在各進程進入臨界區(qū)前執(zhí)行P(S)操作,退出臨界區(qū)時做V(S)操作。
實例:顧客在商店買衣服,假設(shè)只有一個試衣間,試衣間每次只允許一個人進入試衣,如何用信號量機制實現(xiàn)其對試衣間的互斥使用。
方法:設(shè)互斥信號量S初值為1(可表示試衣間空閑,為0表示“試衣間忙”即有人在試衣間試衣服)
在每個顧客進程試圖進入試衣間前加一個P(S)操作,出試衣間后加V(S)操作,便可以保證顧客們對試衣間的互斥使用,如下所示:
Guest 進程
挑選衣服
P(S)
進入試衣間試衣
試衣完畢
出試衣間
V(S)
…
2) 信號量機制實現(xiàn)同步關(guān)系
同步是進程間的一種合作關(guān)系,往往需要傳遞一個信息(數(shù)據(jù))。具有同步關(guān)系的進程執(zhí)行時往往要求有一定的先后次序。
解決方案:首先確定具有同步關(guān)系的進程執(zhí)行的先后次序,設(shè)置信號量初始值S=0,在需要先執(zhí)行的進程臨界區(qū)后加V(S)操作, 在后執(zhí)行進程的臨界區(qū)前加P(S)操作。
實例:廟里有一老一少兩個和尚,每天小和尚負責(zé)去河邊打水,老和尚負責(zé)洗菜做飯,若小和尚沒有打水回來,老和尚需要等待。使用進程的觀念描述,并保證兩人間的這種同步關(guān)系。
方法:設(shè)同步信號量S,初值為0
小和尚打水 進程老和尚洗菜 進程
出發(fā)摘菜
打水回來P(S)
V(S) 洗菜
… 洗菜完畢
3) 信號量機制實現(xiàn)資源分配
如果把信號量的初始值,比如n,理解為是系統(tǒng)中某種資源的數(shù)目,那么,在它的上面做P操作,即是申請一個資源;在它的上面做V操作,即釋放一個用完的資源。與該信號量有關(guān)的隊列,是資源等待隊列。
實 例:一間理發(fā)店只能容納5個人,當(dāng)少于5人時,可以進入,否則,需在外等候。若將有理發(fā)需要的客人視為進程,請用信號量機制實現(xiàn)。
解決方案:設(shè)信號量初值S為5(5個空間資源,每個空間能容納一個人),在客人進店前加P(S)操作,意為申請一個空間資源,離開后V(S)意為釋放所占的空間資源,進程描述如下:
Customer 進程
P(S)
進入理發(fā)店
理發(fā)
完畢,出理發(fā)店
V(S)
…
4) 綜合實例
最好弄清楚單個的互斥關(guān)系和同步關(guān)系之后,才分析多種關(guān)系的情況,否則如果一開始就分析多種關(guān)系的話,極有可能越分析越糊涂。
下面我們以一個即含有互斥又含有同步關(guān)系的多個進程為例,來看一下解決方案。
分桔子蘋果問題:
桌上有一個空盒,盒內(nèi)只允許放一個水果,媽媽向盒內(nèi)放蘋果或桔子。兒子專等吃盒中的桔子,女兒專等吃盒中的蘋果,若盒內(nèi)已有水果,放者必須等待,若盒內(nèi)沒有自己要吃的水果,吃者必須等待。用PV操作來協(xié)調(diào)三人的關(guān)系。
解決方案:首先分析存在四個進程:媽媽放蘋果進程、媽媽放桔子進程、兒子吃桔子進程、女兒吃蘋果進程。關(guān)系如下:
互斥關(guān)系:媽媽放蘋果進程和媽媽放桔子進程
同步關(guān)系:媽媽放蘋果進程 和 女兒吃蘋果進程
媽媽放桔子進程 和 兒子吃桔子進程
我們設(shè)信號量S用于保證互斥關(guān)系,初值S=1
設(shè)信號量S1用于保證媽媽與兒子之間的同步,S2保證媽媽與女兒之間的同步,且初值S1=S2=0
具體實現(xiàn)如下:
媽:準(zhǔn)備:
P(S)
向盒內(nèi)放水果(蘋果或桔子)
if水果==桔子then V(S1) elseV(S2)
兒:P(S1)
拿盒中的桔子
V(S)
吃桔子
女:P(S2)
拿盒中的蘋果
V(S)
吃蘋果
2 結(jié)束語
學(xué)習(xí)信號量時,關(guān)鍵是資源信號量和互斥信號量,把這兩個量想清楚,分清楚。另外就是寓教于樂,興趣是最好的老師。
參考文獻:
[1] 沈祥玖.操作系統(tǒng)原理及應(yīng)用[M].北京:高等教育出版社,2001.
[2] 湯子贏.計算機操作系統(tǒng)[M].西安:西安電子科技大學(xué)出版社,2006.
[3] 陳向群.Windows操作系統(tǒng)原理[M].北京:機械工業(yè)出版社,2005.
[4] 鄧勝蘭.操作系統(tǒng)基礎(chǔ)[M].北京:機械工業(yè)出版社,2000.
[5] 宗大華,等.操作系統(tǒng)[M].北京:人民郵電出版社,2004.