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