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

下載本文檔

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

文檔簡(jiǎn)介

1、六、兩個(gè)進(jìn)程合作完成一個(gè)任務(wù)。在并發(fā)執(zhí)行中,一個(gè)進(jìn)程要等待其合作伙伴發(fā)來(lái)消 息,或者建立某個(gè)條件后再向前執(zhí)行,這種制約性合作關(guān)系被稱(chēng)為進(jìn)程的。 A.同步 B互斥 C. 調(diào)度 D執(zhí)行 答:A 七、為了進(jìn)行進(jìn)程協(xié)調(diào),進(jìn)程之間應(yīng)當(dāng)具有一定的聯(lián)系,這種聯(lián)系通常采用進(jìn)程間交換數(shù)據(jù)的方式進(jìn)行,這種方式稱(chēng)為。 A.進(jìn)程互斥 B進(jìn)程同步 C進(jìn)程制約 D進(jìn)程通信 答:D 八、在測(cè)量控制系統(tǒng)中,數(shù)據(jù)采集任務(wù)把所采集的數(shù)據(jù)送入一單緩沖區(qū);計(jì)算任務(wù)從該單緩沖區(qū)中取出數(shù)據(jù)進(jìn)行計(jì)算。試寫(xiě)出利用信號(hào)量機(jī)制實(shí)現(xiàn)兩者共享單緩沖區(qū)的同步算法。P33 分析及相關(guān)知識(shí) 在本題中采集任務(wù)與計(jì)算任務(wù)共用一個(gè)單緩沖區(qū)當(dāng)采集 任務(wù)采集到一個(gè)

2、數(shù)據(jù)后,只有當(dāng)緩沖區(qū)為空時(shí)才能將數(shù)據(jù)送入緩沖區(qū)中存放,否則應(yīng)等待緩沖區(qū)騰空;當(dāng)緩沖區(qū)中有數(shù)據(jù)時(shí),計(jì)算任務(wù)才能從緩沖區(qū)中取出數(shù)據(jù)進(jìn)行計(jì)算,否則也應(yīng)等待。 本題實(shí)際上是一個(gè)生產(chǎn)者消費(fèi)者問(wèn)題。將生產(chǎn)者消費(fèi)者問(wèn)題抽象出來(lái),以另外 一種形式描述是一種常見(jiàn)的試題形式只要對(duì)生產(chǎn)者消費(fèi)者問(wèn)題有了深入的理 解,就不難解決此類(lèi)試題。 解;在本題中,應(yīng)設(shè)置兩個(gè)信號(hào)量Sf,Se,信號(hào)量Sf表示緩沖區(qū)中是否有可供打印的計(jì)算結(jié)果,其初值為0;信號(hào)量Se用于表示緩沖區(qū)有無(wú)空位置存放新的信息,其初值為1。 本題的同步描述如下: int Se=l; int Sf=0; main() cobegin get(); compute

3、(); coend get() while (采集工作未完成) 采集一個(gè)數(shù)據(jù): p(Se); 將數(shù)據(jù)送入緩沖區(qū)中; v(Sf); compute() while(計(jì)算工作未完成) p(Sf); 從緩沖區(qū)中取出數(shù)據(jù); v(Se); 進(jìn)行數(shù)據(jù)計(jì)算; 九、圖27給出了四個(gè)進(jìn)程合作完成某一任務(wù)的前趨圖,試說(shuō)明這四個(gè)進(jìn)程間的同步關(guān)系,并用P、V操作描述它。P35                     圖27 四個(gè)合作進(jìn)程的前趨圖 解:圖27說(shuō)明任務(wù)啟動(dòng)后S1先執(zhí)行。當(dāng)S1結(jié)束后,S2、S3可以開(kāi)始執(zhí)行。

4、S2、S3 完成后,S4才能開(kāi)始執(zhí)行。為了確保這一執(zhí)行順序,設(shè)三個(gè)同步信號(hào)量b2、b3、b4分別 表示進(jìn)程S2、S3、S4是否可以開(kāi)始執(zhí)行,其初值均為0。這四個(gè)進(jìn)程的同步描述如下: int b2=0; /*表示進(jìn)程S2是否可以開(kāi)始執(zhí)行* int b3=0; /*表示進(jìn)程S3是否可以開(kāi)始執(zhí)行* int b4=0; /*表示進(jìn)程S4是否可以開(kāi)始執(zhí)行* main() cobegin S1 ( ); S2 ( ); S3 ( ); S4 ( ); coend S1 ( ) v(b2); v(b3); S2 ( ) p(b2); v(b4); S3 ( ) p(b3): v(b4); S4 ( ) p(

5、b4); p(b4); /*因在S2及S3完成時(shí)均對(duì)b4做了v操作,因此這里要用兩個(gè)p操作* 十、桌上有一空盤(pán),允許存放一只水果。爸爸可向盤(pán)中放蘋(píng)果,也可向盤(pán)中放桔子,兒子專(zhuān)等吃盤(pán)中的桔子,女兒專(zhuān)等吃盤(pán)中的蘋(píng)果。規(guī)定當(dāng)盤(pán)空時(shí)一次只能放一只水果供吃者取用,請(qǐng)用P、V原語(yǔ)實(shí)現(xiàn)爸爸、兒子、女兒三個(gè)并發(fā)進(jìn)程的同步。P37 分析及相關(guān)知識(shí) 在本題中,爸爸、兒子、女兒共用一個(gè)盤(pán)子,且盤(pán)中一次只能放一個(gè)水果當(dāng)盤(pán)子為空時(shí),爸爸可將一個(gè)水果放入果盤(pán)中。若放入果盤(pán)中的是桔子,則允許兒子吃,女兒必須等待;若放入果盤(pán)中的是蘋(píng)果,則允許女兒吃,兒子必須等待。本題實(shí)際上是生產(chǎn)者消費(fèi)者問(wèn)題的一種變形。這里,生產(chǎn)者放入緩沖區(qū)

6、的產(chǎn)品有兩類(lèi),消費(fèi)者也有兩類(lèi),每類(lèi)消費(fèi)者只消費(fèi)其中固定的一類(lèi)產(chǎn)品。 解:在本題中,應(yīng)設(shè)置三個(gè)信號(hào)量S、So、Sa,信號(hào)量S表示盤(pán)子是否為空,其初值 為1;信號(hào)量So表示盤(pán)中是否有桔子,其初值為0;信號(hào)量Sa表示盤(pán)中是否有蘋(píng)果,其初 值為0。同步描述如下: int S=1; int Sa=O: int So=O: main( ) cobegin father(); son(); daughter(): coend father() while (1) p(S); 將水果放入盤(pán)中; if(放入的是桔子) v(So): else v(Sa); ) son( ) while(1) p(So); 從盤(pán)中

7、取出桔子; v(S); 吃桔子; daushter() while(1) p(Sa); 從盤(pán)中取出蘋(píng)果; v(S): 吃蘋(píng)果; PV原語(yǔ)操作詳解   PV原語(yǔ)通過(guò)操作信號(hào)量來(lái)處理進(jìn)程間的同步與互斥的問(wèn)題。其核心就是一段不可分割不可中斷的程序。 信號(hào)量的概念1965年由著名的荷蘭計(jì)算機(jī)科學(xué)家Dijkstra提出,其基本思路是用一種新的變量類(lèi)型(semaphore)來(lái)記錄當(dāng)前可用資源的數(shù)量。      semaphore有兩種實(shí)現(xiàn)方式:      1) semaphore的取值必須大于或等于0。0表

8、示當(dāng)前已沒(méi)有空閑資源,而正數(shù)表示當(dāng)前空閑資源的數(shù)量;     2) semaphore的取值可正可負(fù),負(fù)數(shù)的絕對(duì)值表示正在等待進(jìn)入臨界區(qū)的進(jìn)程個(gè)數(shù)。      信號(hào)量是由操作系統(tǒng)來(lái)維護(hù)的,用戶(hù)進(jìn)程只能通過(guò)初始化和兩個(gè)標(biāo)準(zhǔn)原語(yǔ)(P、V原語(yǔ))來(lái)訪問(wèn)。初始化可指定一個(gè)非負(fù)整數(shù),即空閑資源總數(shù)。      P原語(yǔ):P是荷蘭語(yǔ)Proberen(測(cè)試)的首字母。為阻塞原語(yǔ),負(fù)責(zé)把當(dāng)前進(jìn)程由運(yùn)行狀態(tài)轉(zhuǎn)換為阻塞狀態(tài),直到另外一個(gè)進(jìn)程喚醒它。操作為:申請(qǐng)一個(gè)空閑資源(把信號(hào)量減1),若成功,則退出;若失

9、敗,則該進(jìn)程被阻塞;      V原語(yǔ):V是荷蘭語(yǔ)Verhogen(增加)的首字母。為喚醒原語(yǔ),負(fù)責(zé)把一個(gè)被阻塞的進(jìn)程喚醒,它有一個(gè)參數(shù)表,存放著等待被喚醒的進(jìn)程信息。操作為:釋放一個(gè)被占用的資源(把信號(hào)量加1),如果發(fā)現(xiàn)有被阻塞的進(jìn)程,則選擇一個(gè)喚醒之。      P原語(yǔ)操作的動(dòng)作是:    (1)sem減1;    (2)若sem減1后仍大于或等于零,則進(jìn)程繼續(xù)執(zhí)行;    (3)若sem減1后小于零,則該進(jìn)程被阻塞后進(jìn)入

10、與該信號(hào)相對(duì)應(yīng)的隊(duì)列中,然后轉(zhuǎn)進(jìn)程調(diào)度。    V原語(yǔ)操作的動(dòng)作是:    (1)sem加1;    (2)若相加結(jié)果大于零,則進(jìn)程繼續(xù)執(zhí)行;    (3)若相加結(jié)果小于或等于零,則從該信號(hào)的等待隊(duì)列中喚醒一等待進(jìn)程,然后再返回原進(jìn)程繼續(xù)執(zhí)行或轉(zhuǎn)進(jìn)程調(diào)度。     PV操作對(duì)于每一個(gè)進(jìn)程來(lái)說(shuō),都只能進(jìn)行一次,而且必須成對(duì)使用。在PV原語(yǔ)執(zhí)行期間不允許有中斷的發(fā)生。   -      具體

11、PV原語(yǔ)對(duì)信號(hào)量的操作可以分為三種情況:      1) 把信號(hào)量視為一個(gè)加鎖標(biāo)志位,實(shí)現(xiàn)對(duì)一個(gè)共享變量的互斥訪問(wèn)。      實(shí)現(xiàn)過(guò)程:      P(mutex); / mutex的初始值為1 訪問(wèn)該共享數(shù)據(jù);     V(mutex);     非臨界區(qū);      2) 把信號(hào)量視為是某種類(lèi)型的共享資源的剩余個(gè)數(shù),實(shí)現(xiàn)對(duì)一類(lèi)共享資源的訪問(wèn)。   &#

12、160;  實(shí)現(xiàn)過(guò)程:      P(resource); / resource的初始值為該資源的個(gè)數(shù)N 使用該資源;     V(resource);     非臨界區(qū);  3) 把信號(hào)量作為進(jìn)程間的同步工具      實(shí)現(xiàn)過(guò)程:      臨界區(qū)C1;     P(S);     V(S);     臨界

13、區(qū)C2;   -  舉例說(shuō)明:       例1:某超市門(mén)口為顧客準(zhǔn)備了100輛手推車(chē),每位顧客在進(jìn)去買(mǎi)東西時(shí)取一輛推車(chē),在買(mǎi)完?yáng)|西結(jié)完帳以后再把推車(chē)還回去。試用P、V操作正確實(shí)現(xiàn)顧客進(jìn)程的同步互斥關(guān)系。      分析:把手推車(chē)視為某種資源,每個(gè)顧客為一個(gè)要互斥訪問(wèn)該資源的進(jìn)程。因此這個(gè)例子為PV原語(yǔ)的第二種應(yīng)用類(lèi)型。      解:  semaphore S_CartNum;   &

14、#160;/ 空閑的手推車(chē)數(shù)量,初值為100 void  consumer(void)    / 顧客進(jìn)程    P(S_CartNum);    買(mǎi)東西;    結(jié)帳;    V(S_CartNum);       例2:桌子上有一個(gè)水果盤(pán),每一次可以往里面放入一個(gè)水果。爸爸專(zhuān)向盤(pán)子中放蘋(píng)果,兒子專(zhuān)等吃盤(pán)子中的蘋(píng)果。把爸爸、兒子看作二個(gè)進(jìn)程,試用P、V操作使這兩個(gè)進(jìn)程能正確地

15、并發(fā)執(zhí)行。      分析:爸爸和兒子兩個(gè)進(jìn)程相互制約,爸爸進(jìn)程執(zhí)行完即往盤(pán)中放入蘋(píng)果后,兒子進(jìn)程才能執(zhí)行即吃蘋(píng)果。因此該問(wèn)題為進(jìn)程間的同步問(wèn)題。      解:  semaphore  S_PlateNum;  / 盤(pán)子容量,初值為1 semaphore  S_AppleNum;  / 蘋(píng)果數(shù)量,初值為0 void  father( )  / 父親進(jìn)程     while(1)  &#

16、160;          P(S_PlateNum);         往盤(pán)子中放入一個(gè)蘋(píng)果;         V(S_AppleNum);     void  son( )   / 兒子進(jìn)程     while(1)      

17、0;      P(S_AppleNum);         從盤(pán)中取出蘋(píng)果;         V(S_PlateNum);         吃蘋(píng)果;      -      另附用PV原語(yǔ)解決進(jìn)程同步與互斥問(wèn)題的例子:    &

18、#160;     例3:兩個(gè)進(jìn)程PA、PB通過(guò)兩個(gè)FIFO(先進(jìn)先出)緩沖區(qū)隊(duì)列連接(如圖)         PA從Q2取消息,處理后往Q1發(fā)消息;PB從Q1取消息,處理后往Q2發(fā)消息,每個(gè)緩沖區(qū)長(zhǎng)度等于傳送消息長(zhǎng)度。 Q1隊(duì)列長(zhǎng)度為n,Q2隊(duì)列長(zhǎng)度為m. 假設(shè)開(kāi)始時(shí)Q1中裝滿(mǎn)了消息,試用P、V操作解決上述進(jìn)程間通訊問(wèn)題。      解:  / Q1隊(duì)列當(dāng)中的空閑緩沖區(qū)個(gè)數(shù),初值為0semaphore  S_BuffNum_Q1; &

19、#160; / Q2隊(duì)列當(dāng)中的空閑緩沖區(qū)個(gè)數(shù),初值為m semaphore  S_BuffNum_Q2;     / Q1隊(duì)列當(dāng)中的消息數(shù)量,初值為n semaphore  S_MessageNum_Q1; / Q2隊(duì)列當(dāng)中的消息數(shù)量,初值為0 semaphore  S_MessageNum_Q2;  void PA( )     while(1)          

20、   P(S_MessageNum_Q2);         從Q2當(dāng)中取出一條消息;         V(S_BuffNum_Q2);         處理消息;         生成新的消息;         P(S_Buff

21、Num_Q1);         把該消息發(fā)送到Q1當(dāng)中;         V(S_MessageNum_Q1);      void PB( )     while(1)             P(S_MessageNum_Q1);    

22、60;    從Q1當(dāng)中取出一條消息;         V(S_BuffNum_Q1);         處理消息;         生成新的消息;         P(S_BuffNum_Q2);         把該

23、消息發(fā)送到Q2當(dāng)中;         V(S_MessageNum_Q2);           例4:操作系統(tǒng)課程的期末考試即將舉行,假設(shè)把學(xué)生和監(jiān)考老師都看作進(jìn)程,學(xué)生有N人,教師1人??紙?chǎng)門(mén)口每次只能進(jìn)出一個(gè)人,進(jìn)考場(chǎng)的原則是先來(lái)先進(jìn)。當(dāng)N個(gè)學(xué)生都進(jìn)入了考場(chǎng)后,教師才能發(fā)卷子。學(xué)生交卷后即可離開(kāi)考場(chǎng),而教師要等收上來(lái)全部卷子并封裝卷子后才能離開(kāi)考場(chǎng)。     (1)問(wèn)共需設(shè)置幾個(gè)進(jìn)程?   

24、  (2)請(qǐng)用P、V操作解決上述問(wèn)題中的同步和互斥關(guān)系。      解:  semaphore  S_Door;         / 能否進(jìn)出門(mén),初值1 semaphore  S_StudentReady; / 學(xué)生是否到齊,初值為0 semaphore  S_ExamBegin;   / 開(kāi)始考試,初值為0 semaphore  S_ExamOver; &

25、#160;  / 考試結(jié)束,初值為0  int nStudentNum = 0;       / 學(xué)生數(shù)目 semaphore  S_Mutex1;       /互斥信號(hào)量,初值為1 int  nPaperNum = 0;       / 已交的卷子數(shù)目 semaphore  S_Mutex2;  

26、;     /互斥信號(hào)量,初值為1  void  student( )     P(S_Door);     進(jìn)門(mén);    V(S_Door);     P(S_Mutex1);     nStudentNum +;   / 增加學(xué)生的個(gè)數(shù)     if(nStudentNum = N)  V(S_Stude

27、ntReady);     V(S_Mutex1);     P(S_ExamBegin);  / 等老師宣布考試開(kāi)始     考試中     交卷;     P(S_Mutex2);     nPaperNum +;    / 增加試卷的份數(shù)         if(nPaperNum =

28、 N)          V(S_ExamOver);         V(S_Mutex2);         P(S_Door);         出門(mén);         V(S_Door);  void  teac

29、her( )     P(S_Door);     進(jìn)門(mén);    V(S_Door);     P(S_StudentReady);    /等待最后一個(gè)學(xué)生來(lái)喚醒     發(fā)卷子;         for(i = 1; i <= N; i+)        &#

30、160;   V(S_ExamBegin);         P(S_ExamOver);    /等待考試結(jié)束         封裝試卷;         P(S_Door);         出門(mén);     

31、;   V(S_Door);        例 5:某商店有兩種食品A和B,最大數(shù)量均為m個(gè)。 該商店將A、B兩種食品搭配出售,每次各取一個(gè)。為避免食品變質(zhì),遵循先到食品先出售的原則。有兩個(gè)食品公司分別不斷地供應(yīng)A、B兩種食品(每次一個(gè))。為保證正常銷(xiāo)售,當(dāng)某種食品的數(shù)量比另一種的數(shù)量超過(guò)k(k<m)個(gè)時(shí),暫停對(duì)數(shù)量大的食品進(jìn)貨,補(bǔ)充數(shù)量少的食品。     (1) 問(wèn)共需設(shè)置幾個(gè)進(jìn)程?     (2) 用P、V操作解決上述問(wèn)題中的同步互斥關(guān)系。 &#

32、160;    解:  semaphore  S_BuffNum_A;  /A的緩沖區(qū)個(gè)數(shù), 初值m semaphore  S_Num_A;      / A的個(gè)數(shù),初值為0 semaphore  S_BuffNum_B;  /B的緩沖區(qū)個(gè)數(shù), 初值m semaphore  S_Num_B;      / B的個(gè)數(shù),初值為0  void  Shop( ) &

33、#160;   while(1)             P(S_Num_A);         P(S_Num_B);         分別取出A、B食品各一個(gè);         V(S_BuffNum_A);     

34、0;   V(S_BuffNum_A);         搭配地銷(xiāo)售這一對(duì)食品;      / “A食品加1,而B(niǎo)食品不變”這種情形允許出現(xiàn)的次數(shù)(許可證的數(shù)量),其值等于/k-(A-B),初值為k semaphore  S_A_B; / “B食品加1,而A食品不變”這種情形允許出現(xiàn)的次數(shù)(許可證的數(shù)量),其值等于/k-(B-A),初值為k semaphore  S_B_A;  void  Producer_A( ) 

35、0;   while(1)             生產(chǎn)一個(gè)A食品;         P(S_BuffNum_A);         P(S_A_B);         向商店提供一個(gè)A食品;       &#

36、160; V(S_Num_A);         V(S_B_A);      void  Producer_B( )     while(1)             生產(chǎn)一個(gè)B食品;         P(S_BuffNum_B);    

37、0;    P(S_B_A);         向商店提供一個(gè)B食品;         V(S_Num_B);         V(S_A_B);           例6:在一棟學(xué)生公寓里,只有一間浴室,而且這間浴室非常小,每一次只能容納一個(gè)人。公寓里既住著男生也住著女生,他們

38、不得不分享這間浴室。因此,樓長(zhǎng)制定了以下的浴室使用規(guī)則:      (1)每一次只能有一個(gè)人在使用;      (2)女生的優(yōu)先級(jí)要高于男生,即如果同時(shí)有男生和女生在等待使用浴室,則女生優(yōu)先;      (3)對(duì)于相同性別的人來(lái)說(shuō),采用先來(lái)先使用的原則。      假設(shè):     (1)當(dāng)一個(gè)男生想要使用浴室時(shí),他會(huì)去執(zhí)行一個(gè)函數(shù)boy_wants_to_use_bathroom,當(dāng)他離開(kāi)浴室時(shí),也會(huì)去執(zhí)行

39、另外一個(gè)函數(shù)boy_leaves_bathroom;     (2)當(dāng)一個(gè)女生想要使用浴室時(shí),會(huì)去執(zhí)行函數(shù)girl_wants_to_use_bathroom,當(dāng)她離開(kāi)時(shí), 也會(huì)執(zhí)行函數(shù)girl_leaves_bathroom;      問(wèn)題:請(qǐng)用信號(hào)量和P、V操作來(lái)實(shí)現(xiàn)這四個(gè)函數(shù)(初始狀態(tài):浴室是空的)。      解:  信號(hào)量的定義: semaphore  S_mutex;  / 互斥信號(hào)量,初值均為1 semaphore  S

40、_boys;   / 男生等待隊(duì)列,初值為0 semaphore  S_girls; / 女生等待隊(duì)列,初值為0  普通變量的定義: int  boys_waiting = 0;  / 正在等待的男生數(shù); int  girls_waiting = 0; / 正在等待的女生數(shù); int  using = 0;         / 當(dāng)前是否有人在使用浴室;  void  boy_wants_to_us

41、e_bathroom ( )     P(S_mutex);     if(using = 0) && (girls_waiting = 0)                     using  =  1;          

42、60;  V(S_mutex);             else                     boys_waiting +;             V(S_mutex);  

43、           P(S_boys);          void  boy_leaves_bathroom ( )     P(S_mutex);     if(girls_waiting  >  0)  / 優(yōu)先喚醒女生        

44、             girls_waiting -;             V(S_girls);             else  if(boys_waiting  >  0)     

45、60;               boys_waiting -;             V(S_ boys);                 else      &

46、#160;         using  =  0;     / 無(wú)人在等待             V(S_mutex);  void  girl_wants_to_use_bathroom ( )     P(S_mutex);     if(using

47、= 0)             using  =  1;         V(S_mutex);         else             girls_waiting +;      

48、60;  V(S_mutex);         P(S_girls);      void  girl_leaves_bathroom ( )     P(S_mutex);     if(girls_waiting  >  0)  / 優(yōu)先喚醒女生            

49、; girls_waiting -;         V(S_girls);         else  if(boys_waiting  >  0)                     boys_waiting -;   

50、60;         V(S_ boys);                 else                using  =  0;     / 無(wú)人在等待

51、            V(S_mutex);         再附上幾個(gè)例子: *  用PV原語(yǔ)實(shí)現(xiàn)進(jìn)程的互斥 由于用于互斥的信號(hào)量sem與所有的并發(fā)進(jìn)程有關(guān),所以稱(chēng)之為公有信號(hào)量。公有信號(hào)量的值反映了公有資源的數(shù)量。只要把臨界區(qū)置于P(sem)和V(sem)之間,即可實(shí)現(xiàn)進(jìn)程間的互斥。就象火車(chē)中的每節(jié)車(chē)廂只有一個(gè)衛(wèi)生間,該車(chē)廂的所有旅客共享這個(gè)公有資源:衛(wèi)生間,所以旅客間必須互斥進(jìn)入衛(wèi)生間,只

52、要把衛(wèi)生間放在P(sem)和V(sem)之間,就可以到達(dá)互斥的效果。以下例子說(shuō)明進(jìn)程的互斥實(shí)現(xiàn)。 例1:     生產(chǎn)圍棋的工人不小心把相等數(shù)量的黑子和白子混裝載一個(gè)箱子里,現(xiàn)要用自動(dòng)分揀系統(tǒng)把黑子和白子分開(kāi),該系統(tǒng)由兩個(gè)并發(fā)執(zhí)行的進(jìn)程組成,功能如下:    (1)進(jìn)程A專(zhuān)門(mén)揀黑子,進(jìn)程B專(zhuān)門(mén)揀白子;    (2)每個(gè)進(jìn)程每次只揀一個(gè)子,當(dāng)一個(gè)進(jìn)程在揀子時(shí)不允許另一個(gè)進(jìn)程去揀子;     分析:    第一步:確定進(jìn)

53、程間的關(guān)系。由功能(2)可知進(jìn)程之間是互斥的關(guān)系。    第二步:確定信號(hào)量及其值。由于進(jìn)程A和進(jìn)程B要互斥進(jìn)入箱子去揀棋子,箱子是兩個(gè)進(jìn)程的公有資源,所以設(shè)置一個(gè)信號(hào)量s,其值取決于公有資源的數(shù)目,由于箱子只有一個(gè),s的初值就設(shè)為1。     實(shí)現(xiàn):begin    s:semaphore;    s:=1;    cobegin        process A&

54、#160;       begin            L1: P(s);            揀黑子;            V(s);     

55、0;      goto L1;        end;         process B        begin            L2:P(s);     &

56、#160;      揀白子;            V(s);            goto L2;        end;    coend;end; 判斷進(jìn)程間是否互斥,關(guān)鍵是看進(jìn)程間是否共享某一公有資源,一個(gè)公

57、有資源與一個(gè)信號(hào)量相對(duì)應(yīng)。確定信號(hào)量的值是一個(gè)關(guān)鍵點(diǎn),它代表了可用資源實(shí)體數(shù)。如下實(shí)例:   例2:     某車(chē)站售票廳,任何時(shí)刻最多可容納20名購(gòu)票者進(jìn)入,當(dāng)售票廳中少于20名購(gòu)票者時(shí),廳外的購(gòu)票者可立即進(jìn)入,否則需要在外面等待。每個(gè)購(gòu)票者可看成一個(gè)進(jìn)程。     分析:第一步:確定進(jìn)程間的關(guān)系。售票廳是各進(jìn)程共享的公有資源,當(dāng)售票廳中多于20名購(gòu)票者時(shí),廳外的購(gòu)票者需要在外面等待。所以進(jìn)程間是互斥的關(guān)系。第二步:確定信號(hào)量及其值。只有一個(gè)公有資源:售票廳,所以設(shè)置一個(gè)信號(hào)量s。售票廳最多容納20個(gè)進(jìn)

58、程,即可用資源實(shí)體數(shù)為20,s的初值就設(shè)為20。     實(shí)現(xiàn): begin     s:semaphore;    s:=20;    cobegin        process PI(I=1,2,)        begin P(s);     

59、0;      進(jìn)入售票廳;            購(gòu)票;            退出;            V(s);        end;&#

60、160;   coend; end;      當(dāng)購(gòu)票者進(jìn)入售票廳前要執(zhí)行P(s)操作,執(zhí)行后若s大于或等于零,說(shuō)明售票廳的人數(shù)還未滿(mǎn)可進(jìn)入。執(zhí)行后若s小于零,則說(shuō)明售票廳的人數(shù)已滿(mǎn)不能進(jìn)入。這個(gè)實(shí)現(xiàn)中同時(shí)最多允許20個(gè)進(jìn)程進(jìn)入售票廳購(gòu)票,其余進(jìn)程只能等待。 用PV原語(yǔ)實(shí)現(xiàn)進(jìn)程的同步 與進(jìn)程互斥不同,進(jìn)程同步時(shí)的信號(hào)量只與制約進(jìn)程及被制約進(jìn)程有關(guān)而不是與整組并發(fā)進(jìn)程有關(guān),所以稱(chēng)該信號(hào)量為私有信號(hào)量。利用PV原語(yǔ)實(shí)現(xiàn)進(jìn)程同步的方法是:首先判斷進(jìn)程間的關(guān)系為同步的,且為各并發(fā)進(jìn)程設(shè)置私有信號(hào)量,然后為私有信號(hào)量賦初值,最后利用P

61、V原語(yǔ)和私有信號(hào)量規(guī)定各進(jìn)程的執(zhí)行順序。下面我們將例1增添一個(gè)條件,使其成為進(jìn)程間是同步的。 例3:     在例1的基礎(chǔ)之上再添加一個(gè)功能:(3)當(dāng)一個(gè)進(jìn)程揀了一個(gè)棋子(黑子或白子)以后,必讓另一個(gè)進(jìn)程揀一個(gè)棋子(黑子或白子)。     分析:    第一步:確定進(jìn)程間的關(guān)系。由功能(1)(2)(3)可知,進(jìn)程間的關(guān)系為同步關(guān)系。第二步:確定信號(hào)量及其值。進(jìn)程A和B共享箱子這個(gè)公有資源,但規(guī)定兩個(gè)進(jìn)程必須輪流去取不同色的棋子,因而相互間要互通消息。對(duì)于進(jìn)程A可設(shè)置一個(gè)私有信號(hào)量s1,該私有信號(hào)

62、量用于判斷進(jìn)程A是否能去揀黑子,初值為1。對(duì)于進(jìn)程B同樣設(shè)置一個(gè)私有信號(hào)量s2,該私有信號(hào)量用于判斷進(jìn)程B是否能去揀白子,初值為0。當(dāng)然你也可以設(shè)置s1初值為0,s2初值為1。     實(shí)現(xiàn): begin    s1,s2:semaphore;    s1:=1;s2:=0;    cobegin        process A     

63、;       begin            L1: P(s1);            揀黑子;            V(s2);      

64、      goto L1;        end;            process B        begin            L2:P(s2);            揀白子;    &

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論