專業(yè)綜合操作系統(tǒng)練習(xí)題_第1頁
專業(yè)綜合操作系統(tǒng)練習(xí)題_第2頁
專業(yè)綜合操作系統(tǒng)練習(xí)題_第3頁
專業(yè)綜合操作系統(tǒng)練習(xí)題_第4頁
專業(yè)綜合操作系統(tǒng)練習(xí)題_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

專業(yè)綜合Ⅰ——操作系統(tǒng)數(shù)信學(xué)院張培欣1第1頁(一)進(jìn)程與線程

(二)處理機(jī)調(diào)度

(三)同步與互斥

(四)死鎖

第二部分進(jìn)程管理2第2頁(三)同步與互斥3第3頁1.

進(jìn)程同步基本概念多道程序系統(tǒng)中,進(jìn)程之間有兩種形式制約關(guān)系:(1)間接互相制約:源于資源共享(2)直接互相制約:源于進(jìn)程合作進(jìn)程同步:主要源于進(jìn)程合作 是進(jìn)程之間直接制約關(guān)系進(jìn)程互斥:主要源于進(jìn)程共享 是進(jìn)程之間間接制約關(guān)系4第4頁臨界資源:一次只允許一種進(jìn)程使用資源。 如:打印機(jī),公共變量臨界區(qū):在每個(gè)進(jìn)程中,訪問臨界資源那段程序。同步機(jī)制遵循準(zhǔn)則:空閑讓進(jìn),忙則等候,有限等候,讓權(quán)等候當(dāng)臨界區(qū)空閑時(shí),進(jìn)程能夠立即進(jìn)入,方便有效利用臨界資源當(dāng)已有進(jìn)程進(jìn)入臨界區(qū)時(shí),其他進(jìn)程必須等候,以確?;コ鈱?duì)要求進(jìn)入進(jìn)程,應(yīng)在有限時(shí)間內(nèi)使之進(jìn)入,以避免“死等”對(duì)于等候進(jìn)程,它必須立即釋放處理機(jī),以避免進(jìn)程忙等5第5頁2.

實(shí)現(xiàn)臨界區(qū)互斥基本辦法進(jìn)程互斥硬件辦法(1)檢測(cè)和設(shè)置(TS)指令(2)swap指令(或exchange)交換兩個(gè)字(字節(jié))內(nèi)容用軟件實(shí)現(xiàn)同步互斥機(jī)制在進(jìn)入?yún)^(qū)設(shè)置和檢查某些標(biāo)志

(1)算法一:?jiǎn)螛?biāo)志法(2)算法二:雙標(biāo)志法先檢查(3)算法三:雙標(biāo)志法后檢查(4)算法四:Peterson算法6第6頁【例1】(錯(cuò)誤解法)(turn是int型變量,初始化為i或j)算法一能夠確保同一時(shí)刻只有一種進(jìn)程在臨界區(qū)中,不過卻要求進(jìn)程Pi和進(jìn)程Pj輪流地訪問臨界區(qū),若進(jìn)程Pi不打算進(jìn)入臨界區(qū),那么進(jìn)程Pj在進(jìn)入過一次臨界區(qū)后就再也不能進(jìn)入。因此不滿足空閑讓進(jìn)和有限等候兩個(gè)準(zhǔn)則。7第7頁【例2】(錯(cuò)誤解法)(flag[2]是bool型數(shù)組,兩個(gè)元素初始化為false)算法二消除了算法一中需要兩個(gè)進(jìn)程輪流訪問臨界區(qū)錯(cuò)誤,但卻存在兩個(gè)進(jìn)程都進(jìn)不了臨界區(qū)也許性,仍然不能滿足空閑讓進(jìn)和有限等候。8第8頁【例3】算法三(正確解法,又稱為Dekker算法)(turn是int型變量,初始化為i或j;flag[2]是bool型數(shù)組,兩個(gè)元素初始化為false)Dekker算法結(jié)合了算法一和算法二,實(shí)現(xiàn)了空閑讓進(jìn)和忙則等候?;旧螪ekker算法是個(gè)正確算法,能夠正常工作。9第9頁【例4】算法四(正確解法,又稱為Peterson算法)(turn是int型變量,初始化為i或j;flag[2]是bool型數(shù)組,兩個(gè)元素初始化為false)Peterson算法與Dekker算法類似,實(shí)現(xiàn)了空閑讓進(jìn)、忙則等候和有限等候。相比而言,Dekker算法比較復(fù)雜,證明起來也比較困難,而Peterson算法較簡(jiǎn)潔。10第10頁【例11】(2023年聯(lián)考第27題)進(jìn)程P0和P1共享變量定義及其初值為: booleanfalg[2]; intturn=0; falg[0]=FALSE;falg[1]=FALSE;若進(jìn)程P0和P1訪問臨界資源類C偽代碼實(shí)現(xiàn)如下:voidP0()//進(jìn)程P0{while(TRUE){flag[0]=TRUE;turn=1;while(flag[1]&&turn==1);臨界區(qū);flag[0]=FALSE;}}voidP1()//進(jìn)程P1{while(TRUE){flag[1]=TRUE;turn=0;while(flag[0]&&turn==0);臨界區(qū);flag[1]=FALSE;}}則并發(fā)執(zhí)行進(jìn)程P0和P1時(shí)產(chǎn)生情形是A.不能確保進(jìn)程互斥進(jìn)入臨界區(qū)、會(huì)出現(xiàn)“饑餓”現(xiàn)象B.不能確保進(jìn)程互斥進(jìn)入臨界區(qū)、不會(huì)出現(xiàn)“饑餓”現(xiàn)象C.能確保進(jìn)程互斥進(jìn)入臨界區(qū)、會(huì)出現(xiàn)“饑餓”現(xiàn)象D.能確保進(jìn)程互斥進(jìn)入臨界區(qū)、不會(huì)出現(xiàn)“饑餓”現(xiàn)象0000000011第11頁3.信號(hào)量信號(hào)量機(jī)制由:信號(hào)量”“wait操作(P操作)、signal操作(V操作)”兩部分組成,可用來處理進(jìn)程互斥與同步。P、V操作是原子操作,不可中斷。(1)整型信號(hào)量定義:表達(dá)資源個(gè)數(shù)整型量S。除初始化外,僅能通過下列兩個(gè)原子操作來訪問。

wait(S)(P操作):While(S<=0); S=S-1;

signal(S)(V操作): S=S+1;12第12頁3.信號(hào)量(2)統(tǒng)計(jì)型信號(hào)量 在統(tǒng)計(jì)型信號(hào)量中,引入了代表資源數(shù)目標(biāo)整型變量value和用于鏈接所有等候該資源進(jìn)程鏈表L,統(tǒng)計(jì)型數(shù)據(jù)構(gòu)造如下所示: Typedefstruct { intvalue; QueueL; }semaphore;

若有semaphoreS;對(duì)應(yīng)wait(S)和signal(S)操作可描述為:wait(S){S.value=S.value-1;if(S.value<0)block(S.L);}signal(S){S.value=S.value+1;if(S.value<=0)wakeup(S.L);}13第13頁(1)一般考查對(duì)統(tǒng)計(jì)型信號(hào)量理解。信號(hào)量物理含義:S.value>0表達(dá)有S.value個(gè)資源可用;S.value==0表達(dá)無資源可用;S.value<0則|S.value|表達(dá)等候隊(duì)列中進(jìn)程個(gè)數(shù)。說明:根據(jù)以上信號(hào)量物理意義,能夠計(jì)算信號(hào)量變化范圍。(2)S.value初值表達(dá)系統(tǒng)中某類資源數(shù)目,稱為資源信號(hào)量。若S.value初值為1,表達(dá)只允許一種進(jìn)程訪問,此時(shí)信號(hào)量轉(zhuǎn)化為互斥信號(hào)量。(3)對(duì)信號(hào)量只能執(zhí)行wait、signal操作 wait(S)表達(dá)申請(qǐng)一種資源; signal(S)表達(dá)釋放一種資源。注意:整型信號(hào)量不會(huì)取負(fù)值,可由此判斷題目中信號(hào)量是整型信號(hào)量還是統(tǒng)計(jì)型信號(hào)量。掌握信號(hào)量物理意義14第14頁【例5】有m個(gè)進(jìn)程共享同一臨界資源,若使用信號(hào)量機(jī)制實(shí)現(xiàn)對(duì)一臨界資源互斥訪問,則信號(hào)量變化范圍是()。 A.1至-(m-1) B.1至m-1 C.1至-m D.1至m【答案】A15第15頁【例6】設(shè)兩個(gè)進(jìn)程共用一種臨界資源互斥信號(hào)量mutex,當(dāng)mutex=1時(shí)表達(dá)()。A.一種進(jìn)程進(jìn)入了臨界區(qū),另一種進(jìn)程等候B.沒有一種進(jìn)程進(jìn)入臨界區(qū)C.兩個(gè)進(jìn)程都進(jìn)入了臨界區(qū)D.兩個(gè)進(jìn)程都在等候【答案】B16第16頁【例7】假如有三個(gè)進(jìn)程共享同一程序段,并且每次最多允許兩個(gè)進(jìn)程進(jìn)入該程序段,則信號(hào)量初值應(yīng)設(shè)置為()。A.3B.1C.2D.0【答案】C【例8】當(dāng)一進(jìn)程因在統(tǒng)計(jì)型信號(hào)量S上執(zhí)行P(S)操作而被阻塞后,S值為()。A.>0B.<0C.>=0D.<=0【答案】B17第17頁4.

管程管程定義:管程是有關(guān)共享資源數(shù)據(jù)構(gòu)造及一組針對(duì)該資源操作所組成軟件模塊。管程是一種編程語言構(gòu)件,它實(shí)現(xiàn)需要得到編譯器支持。一種管程定義了一種數(shù)據(jù)構(gòu)造和能為并發(fā)進(jìn)程所運(yùn)行一組操作,這組操作能同步進(jìn)程和變化管程中數(shù)據(jù)。管程由三部分組成:局部于管程共享數(shù)據(jù)說明;對(duì)該數(shù)據(jù)構(gòu)造進(jìn)行操作一組過程;對(duì)局部于管程數(shù)據(jù)設(shè)置初始值語句。18第18頁生產(chǎn)者-消費(fèi)者問題讀者-寫者問題哲學(xué)家進(jìn)餐問題5.

典型同步問題19第19頁利用信號(hào)量機(jī)制實(shí)現(xiàn)互斥模式使多種進(jìn)程互斥訪問某臨界資源:(1)首先,需為該資源設(shè)置一互斥信號(hào)量mutex, 并設(shè)其初始值為1;(2)然后,將各進(jìn)程訪問臨界資源臨界區(qū)置于 wait(mutex)和signal(mutex)之間即可。例如,用統(tǒng)計(jì)型信號(hào)量實(shí)現(xiàn)兩個(gè)進(jìn)程互斥地使用一臺(tái)打印機(jī)。semaphoremutex=1;main(){CobeginProcess1(){ … wait(mutex);criticalsectionsignal(mutex); … }Process2(){ … wait(mutex);criticalsectionsignal(mutex);… }Coend}說明:每個(gè)程序中用于實(shí)現(xiàn)互斥wait(mutex)和 signal(mutex)必須成對(duì)地出現(xiàn)。20第20頁用信號(hào)量機(jī)制實(shí)現(xiàn)同步模式P1執(zhí)行語句L1后P2才能開始語句L2執(zhí)行,則P1和P2之間必須同步。設(shè)S為兩個(gè)并發(fā)進(jìn)程P1、P2公共信號(hào)量,初值為0(其初值能夠根據(jù)實(shí)際情況確定)。使用信號(hào)量處理進(jìn)程同步問題描述如下:semaphoreS=0;main(){CobeginP1(){ … L1;signal(S); …}P2(){ … wait(S); L2; …}Coend}21第21頁信號(hào)量機(jī)制操作實(shí)現(xiàn)互斥或同步一般步驟:由問題給出條件,確定有幾個(gè)或幾類進(jìn)程;確定進(jìn)程間制約關(guān)系是互斥還是同步;確定各進(jìn)程間通過哪些信號(hào)量實(shí)現(xiàn)彼此制約,標(biāo)明信號(hào)量含義和初值。用P、V操作寫出對(duì)應(yīng)代碼段。驗(yàn)證代碼正確性:設(shè)以不一樣次序運(yùn)行各進(jìn)程,是否能確保問題圓滿處理。切忌按固定次序執(zhí)行各進(jìn)程。22第22頁在生產(chǎn)者進(jìn)程和消費(fèi)者進(jìn)程中,signal操作次序無關(guān)緊要,但兩個(gè)wait操作次序卻不能顛倒,不然也許造成死鎖,即,應(yīng)先執(zhí)行對(duì)資源信號(hào)量wait操作,再執(zhí)行對(duì)互斥信號(hào)量wait操作,這一點(diǎn)要尤其注意。23第23頁注意由于緩沖區(qū)有N個(gè),并且緩沖區(qū)又是臨界資源,因此,需要增加一種信號(hào)量mutex來實(shí)現(xiàn)對(duì)緩沖區(qū)互斥訪問,其初始值為1。需要尤其強(qiáng)調(diào)是,這種情況下,mutex不能省略。對(duì)緩沖區(qū)互斥訪問能夠看作是對(duì)緩沖入口互斥訪問,當(dāng)生產(chǎn)者使用緩沖區(qū)時(shí),不允許消費(fèi)者進(jìn)入緩沖區(qū),反之亦然。在每個(gè)程序中用于實(shí)現(xiàn)互斥wait(mutex)和signal(mutex)必須成對(duì)地出現(xiàn);對(duì)資源信號(hào)量empty和fullwait和signal操作,同樣需要成對(duì)地出現(xiàn),但它們分別處于不一樣程序中。在每個(gè)程序中多種wait操作次序同樣不能顛倒,應(yīng)先執(zhí)行對(duì)資源信號(hào)量wait操作,然后再執(zhí)行對(duì)互斥信號(hào)量wait操作,不然也許引發(fā)進(jìn)程死鎖。24第24頁【例9】如圖示,有多種PUT操作同步向Buff1放數(shù)據(jù),有一種MOVE操作不停地將Buff1數(shù)據(jù)移到Buff2,有多種GET操作不停地從Buff2中將數(shù)據(jù)取走。Buff1容量為m,Buff2容量是n,PUT、MOVE、GET每次操作一種數(shù)據(jù),在操作過程中要確保數(shù)據(jù)不丟失。試用P、V原語協(xié)調(diào)PUT、MOVE操作,并說明每個(gè)信號(hào)量含義和初值。25第25頁設(shè)置6個(gè)信號(hào)量full1、empty1、B-M1、full2、empty2、B-M2,它們含義和初值如下:full1表達(dá)Buff1是否有數(shù)據(jù),初值為0;empty1表達(dá)Buff1有空間,初值為m;B-M1表達(dá)Buff1是否可操作,初值為1;Full2表達(dá)Buff2是否有數(shù)據(jù),初值為0;Empty2表達(dá)Buff2有空間,初值為n;B-M2表達(dá)Buff2是否可操作,初值為1;26第26頁【例10】(2023年第45題,7分)三個(gè)進(jìn)程P1、P2、P3互斥使用一種包括N(N>0)個(gè)單元緩沖區(qū)。P1每次用produce()生成一種正整數(shù)并用put()送入緩沖區(qū)某一空單元中;P2每次用getodd()從該緩沖區(qū)中取出一種奇數(shù)并用countodd()統(tǒng)計(jì)奇數(shù)個(gè)數(shù);P3每次用geteven()從該緩沖區(qū)中取出一種偶數(shù)并用counteven()統(tǒng)計(jì)偶數(shù)個(gè)數(shù)。請(qǐng)用信號(hào)量機(jī)制實(shí)現(xiàn)這三個(gè)進(jìn)程同步與互斥活動(dòng),并說明所定義信號(hào)量含義。要求用偽代碼描述?!痉治觥勘绢}目考查進(jìn)程同步與互斥。本題目是蘋果-桔子問題變形。進(jìn)程P1能夠看做是生產(chǎn)者,進(jìn)程P2和P3可看做是消費(fèi)者,進(jìn)程P1和P2、P3共享大小為N緩沖區(qū)。進(jìn)程P1、P2和P3需互斥使用緩沖區(qū),P1進(jìn)程需要與P2進(jìn)程、P3進(jìn)程同步。27第27頁28第28頁29第29頁30第30頁31第31頁【例11】在一輛公共汽車上,司機(jī)和售票員各行其職,司機(jī)負(fù)責(zé)開車和到站停車;售票員負(fù)責(zé)售票和開、關(guān)門,當(dāng)售票員關(guān)好車門后,司機(jī)才能繼續(xù)開車行駛。試用P、V操作實(shí)現(xiàn)司機(jī)與售票員之間同步。

【分析】這里存在兩種同步關(guān)系: 司機(jī)到站停車后,售票員才能開門; 售票員關(guān)好車門后,司機(jī)才能啟動(dòng)汽車。32第32頁設(shè)初始狀態(tài)為停車,車門開。設(shè)信號(hào)量:close表達(dá)門是否已關(guān),能否啟動(dòng)車輛

stop表達(dá)車是否已停,能否開車門semaphoreclose=0,stop=1;main(){ Cobegin drive() {While(true){

P(close); 啟動(dòng)車輛; 正常行駛; 到站停車;

V(stop); } }Conductor() {While(true){ 關(guān)車門;

V(close);

售票;

P(stop); 開車門; 上下乘客; } } }33第33頁【例12】(2023年聯(lián)考第45題)某銀行提供一種服務(wù)窗口和10個(gè)供顧客等候座位。顧客達(dá)到銀行時(shí),若有空座位則到取號(hào)機(jī)上領(lǐng)取一種號(hào),等候叫號(hào)。取號(hào)機(jī)每次僅允許一位顧客使用。當(dāng)營(yíng)業(yè)員空閑時(shí),通過叫號(hào)選用一位顧客,并為其服務(wù)。顧客和營(yíng)業(yè)員活動(dòng)過程描述如下:Cobegin{Process顧客i{ 從取號(hào)機(jī)取得一種號(hào)碼; 等候叫號(hào); 取得服務(wù);}Process營(yíng)業(yè)員{while(TRUE){ 叫號(hào); 為顧客服務(wù); }}}Coend請(qǐng)?zhí)砑颖匾盘?hào)量和P、V(或wait()、signal())操作,實(shí)現(xiàn)上述過程中互斥與同步。要求寫出完整過程,說明信號(hào)量含義并賦初值?!痉治觥浚?)互斥關(guān)系:顧客需互斥使用取號(hào)機(jī),設(shè)一互斥信號(hào)量mutex,初值為1;(2)同步關(guān)系:顧客需要取得空座位等候叫號(hào),當(dāng)營(yíng)業(yè)員空閑時(shí),將選用一位顧客并為其服務(wù)。34第34頁Semaphoremutex=1;//互斥使用取號(hào)機(jī)Semaphoreempty=10;//空座位數(shù)量Semaphorefull=0;//已占座位數(shù)量Semaphoreservice=0;//等候叫號(hào)Cobegin{ process顧客i {

P(empty);

P(mutex); 從取號(hào)機(jī)取得一種號(hào);

V(mutex); V(full);

P(service);

//等候叫號(hào) 取得服務(wù); }process營(yíng)業(yè)員{while(TRUE){ P(full);

V(empty);

V(service);

//叫號(hào)

為顧客服務(wù); }}35第35頁【例13】有橋如圖所示,車流如箭頭所示,橋上不允許兩車交匯,但允許同方向多輛車依次通過(即橋上能夠有多種同方向車)。用P、V操作實(shí)現(xiàn)交通管理以避免橋上堵塞。橋北南【分析】本題目類似“讀者—寫作”問題,但又有所不一樣。這個(gè)題目要處理:南、北互斥(橋上不允許兩車交匯,相稱于“讀、寫互斥”),需要設(shè)置一種互斥信號(hào)量mutex,初值為1;南、南共享(相稱于“讀、讀共享”),套用實(shí)現(xiàn)“讀、讀共享”模式,需要設(shè)置一種共享變量south,用于統(tǒng)計(jì)目前橋上向南行駛過橋車輛數(shù)目,初值為0,再設(shè)置一種互斥信號(hào)量smutex,實(shí)現(xiàn)對(duì)south互斥訪問;北、北共享(也相稱于“讀、讀共享”),需要設(shè)置一種共享變量north,用于統(tǒng)計(jì)目前橋上向北行駛過橋車輛數(shù)目,初值為0,再設(shè)置一種互斥信號(hào)量nmutex,實(shí)現(xiàn)對(duì)north互斥訪問。36第36頁semaphoremutex=1,smutex=1,nmutex=1;intsouth=0,north=0;main(){ Cobegin Tosouth(); Tonorth(); Coend }Tosouth(){While(1){

P(smutex); if(south==0)P(mutex);/*當(dāng)?shù)?輛向南車輛過橋時(shí),制止向北車輛過橋*/ south++

V(smutex); 過橋;

P(smutex); south--; If(south==0)V(mutex);

/*當(dāng)最后1輛向南車輛過橋后,允許向北車輛過橋*/

V(smutex);}}Tonorth(){While(1){ P(nmutex); If(north==0)P(mutex);

/*當(dāng)?shù)?輛向北車輛過橋時(shí), 制止向南車輛過橋*/ north++ V(nmutex); 過橋; P(nmutex); north--; If(north==0)V(mutex);

/*當(dāng)最后1輛向北車輛過橋后, 允許向南車輛過橋*/ V(nmutex); }}37第37頁1.(2023年聯(lián)考第25題)設(shè)與某資源關(guān)聯(lián)信號(hào)量初值為3,目前值為1。若M表達(dá)該資源可用個(gè)數(shù),N表達(dá)等候該資源進(jìn)程數(shù),則M、N分別是()。 A.0、1B.1、0C.1、2D.2、0【答案】B練習(xí)38第38頁2.設(shè)兩個(gè)進(jìn)程共用一種臨界資源互斥信號(hào)量mutex,當(dāng)mutex=-1時(shí)表達(dá)()。 A.一種進(jìn)程進(jìn)入了臨界區(qū),另一種進(jìn)程等候 B.沒有一種進(jìn)程進(jìn)入臨界區(qū) C.兩個(gè)進(jìn)程都進(jìn)入了臨界區(qū) D.兩個(gè)進(jìn)程都在等候【答案】A練習(xí)39第39頁3、(2023年聯(lián)考第32題)有兩個(gè)并發(fā)執(zhí)行進(jìn)程P1和P2,共享初值為1變量x。P1對(duì)x加1,P2對(duì)x減1。加1和減1操作指令序列分別如下所示。//加1操作 //減1操作

LoadR1,x//取x到寄存器中 LoadR2,xIncR1 decR2Storex,R1//將R內(nèi)容存入x Storex,R2兩個(gè)操作完成后,x值()。 A.也許為-1B.只能為1 C.也許為0、1、2D.也許為-1、0、1、2【答案】C練習(xí)40第40頁4、某車站售票廳,任何時(shí)刻最多可容納20名購票者進(jìn)入,當(dāng)售票廳中少于20名購票者時(shí),則廳外購票者可立即進(jìn)入,不然需在外面等候。若把一種購票者看作一種進(jìn)程,請(qǐng)回答下列問題:(1)用PV操作管理這些并發(fā)進(jìn)程時(shí),應(yīng)如何定義信號(hào)量,寫出信號(hào)量初值以及信號(hào)量多種取值含義。(2)根據(jù)所定義信號(hào)量,利用PV操作寫出能正確并發(fā)執(zhí)行進(jìn)程。(3)若欲購票者最多為n個(gè)人,寫出信號(hào)量也許變化范圍(最大值和最小值)。41第41頁4.【分析】本題目考查進(jìn)程同步問題?!敬鸢浮?1)定義一信號(hào)量S,初始值為20。S>0S值表達(dá)可繼續(xù)進(jìn)入售票廳人數(shù)S=0表達(dá)售票廳中已有20名顧客(購票者)S<0|S|值為等候進(jìn)入售票廳人數(shù)(2)COBEGIN Pi(i=1,2,……){ P(S); 進(jìn)入售票廳; 購票; 退出; V(S);}COEND(3)S最大值為20S最小值為20-N42第42頁5.在公共汽車上,司機(jī)負(fù)責(zé)開車、停車和駕駛,售票員負(fù)責(zé)門開門、關(guān)門和售票?;静僮饕?guī)則是: 只有停車后,售票員才能開門; 只有售票員關(guān)門后,司機(jī)才能開車。 汽車初始狀態(tài)處于行駛之中。 當(dāng)只有1個(gè)司機(jī)、2個(gè)售票員、2個(gè)門、每個(gè)售票員負(fù)責(zé)一種門時(shí)協(xié)調(diào)操作。請(qǐng)使用P、V原語實(shí)現(xiàn)售票員與司機(jī)之間協(xié)調(diào)操作,說明每個(gè)信號(hào)量含義、初值和值范圍。43第43頁driver(){dowhileT{

P(Door1);P(Door2);

啟動(dòng)車輛;

正常行車;

到站停車;

}}busserver1(){dowhileT{

售票;

開前門;關(guān)前門;

}}busserver2(){dowhileT{

售票;

開后門;關(guān)后門;

}}【分析】本題目考查進(jìn)程同步問題。司機(jī)啟動(dòng)、停車操作需要與兩個(gè)售票員關(guān)門、售票、開門操作同步.確定P、V操作位置司機(jī)操作中,是否關(guān)前門?沒關(guān)則等候,這是一種P操作,P(Door1); 是否關(guān)后門?沒關(guān)則等候,這是一種P操作,P(Door2);44第44頁driver(){dowhileT{

P(Door1);P(Door2);

啟動(dòng)車輛;

正常行車;

到站停車;

}}busserver1(){dowhileT{

售票;

開前門;關(guān)前門;

V(Door1);}}busserver2(){dowhileT{

售票;

開后門;關(guān)后門;

V(Door2);}}【分析】本題目考查進(jìn)程同步問題。司機(jī)啟動(dòng)、停車操作需要與兩個(gè)售票員關(guān)門、售票、開門操作同步.確定P、V操作位置前門售票員關(guān)門操作中,設(shè)置關(guān)門標(biāo)志,這是一種V操作,V(Door1);后門售票員關(guān)門操作中,設(shè)置關(guān)門標(biāo)志,這是一種V操作,V(Door2);45第45頁driver(){dowhileT{

P(Door1);P(Door2);

啟動(dòng)車輛;

V(T1);V(T2);正常行車;

到站停車;

V(S1);V(S2);}}busserver1(){dowhileT{

售票;

開前門;關(guān)前門;

V(Door1);}}busserver2(){dowhileT{

售票;

開后門;關(guān)后門;

V(Door2);}}【分析】本題目考查進(jìn)程同步問題。司機(jī)啟動(dòng)、停車操作需要與兩個(gè)售票員關(guān)門、售票、開門操作同步.確定P、V操作位置司機(jī)操作中,設(shè)置啟動(dòng)標(biāo)志,通知前、后門售票員能夠售票,這是兩個(gè)V操作,V(T1),V(T2);司機(jī)操作中,設(shè)置停車標(biāo)志,通知前、后門售票員能夠開門,這是兩個(gè)V操作,V(S1),V(S2);由于汽車初始狀態(tài)處于行駛之中,因此Door1=Door2=0,T1=T2=0(不嚴(yán)格),S1=S2=0,所有信號(hào)量取值范圍都是-1~1。46第46頁SemaphoreDoor1=Door2=1;SemaphoreS1=S2=0;SemaphoreT1=T2=1;main(){cobegindriver();busserver1();busserver2();coend}driver(){dowhileT{P(Door1);P(Door2);啟動(dòng)車輛;V(T1);V(T2);正常行車;到站停車;V(S1);V(S2);}}busserver1(){dowhileT{P(T1);售票;P(S1);開前門;關(guān)前門;V(Door1);}}busserver2(){dowhileT{P(T2);售票;P(S2);開后門;關(guān)后門;V(Door2);}}47第47頁6.設(shè)A,B兩個(gè)火車站之間是單軌連接,現(xiàn)有許多列車同步到A站,需經(jīng)A站達(dá)到B站,列車出B站后又可分路行駛(如圖)。為確保行駛安全,請(qǐng)?jiān)O(shè)計(jì)一種自動(dòng)調(diào)度系統(tǒng)確保系統(tǒng)安全。提醒:可用P、V操作設(shè)計(jì)。6A.有一種東西方向獨(dú)木橋,每次只能有一人通過,且不允許人在橋上停留。東西兩端各有若干人在等候過橋。請(qǐng)用P、V操作來實(shí)現(xiàn)東西兩端人過橋問題。48第48頁7.一種剪發(fā)店,由一間有N張沙發(fā)等候室和一間放有一種剪發(fā)椅工作室組成。 假如沒有顧客,剪發(fā)師就去睡覺。 假如顧客來時(shí)所有沙發(fā)都有人,那么顧客就拜別。假如剪發(fā)師在忙而有空閑沙發(fā),那么顧客就會(huì)坐在其中一種空閑沙發(fā)上等候。假如剪發(fā)師在睡覺,顧客會(huì)喚醒他。在理完發(fā)后,顧客必須付費(fèi),直到剪發(fā)師收費(fèi)后才能離開剪發(fā)店。 請(qǐng)利用信號(hào)量(semaphores),寫個(gè)程序來協(xié)調(diào)剪發(fā)師和顧客進(jìn)程。49第49頁設(shè)整型變量count:對(duì)剪發(fā)店中顧客進(jìn)行計(jì)數(shù),初值為0;設(shè)6個(gè)信號(hào)量:mutex:用來實(shí)現(xiàn)顧客進(jìn)程對(duì)count互斥訪問,初值為1;sofa:資源信號(hào)量,對(duì)應(yīng)于等候室中N張沙發(fā),初值為N;empty:表達(dá)是否有空閑剪發(fā)椅,初值為1;full:表達(dá)剪發(fā)椅上是否有等候剪發(fā)顧客,初值為0;payment:用來等候付費(fèi),初值為0;receipt:用來等候收費(fèi),初值為0;intcount=0;semaphoremutex=1,sofa=N,empty=1,full=0;semaphorepayment=0,receipt=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論