計(jì)算機(jī)操作系統(tǒng)資源java3第2章進(jìn)程管理_第1頁(yè)
計(jì)算機(jī)操作系統(tǒng)資源java3第2章進(jìn)程管理_第2頁(yè)
計(jì)算機(jī)操作系統(tǒng)資源java3第2章進(jìn)程管理_第3頁(yè)
計(jì)算機(jī)操作系統(tǒng)資源java3第2章進(jìn)程管理_第4頁(yè)
計(jì)算機(jī)操作系統(tǒng)資源java3第2章進(jìn)程管理_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第2章 進(jìn)程管理互斥 和 同步 的區(qū)別2.4.32.4.3信號(hào)量機(jī)制信號(hào)量機(jī)制1. 1. 整型信號(hào)量整型信號(hào)量最初由最初由Dijkstra把整型信號(hào)量定義為一個(gè)用于把整型信號(hào)量定義為一個(gè)用于表示資源數(shù)目的整型量表示資源數(shù)目的整型量S,它與一般整型量不同,它與一般整型量不同,除初始化外,僅能通過兩個(gè)標(biāo)準(zhǔn)的原子操作除初始化外,僅能通過兩個(gè)標(biāo)準(zhǔn)的原子操作(Atomic Operation) wait(S)和和signal(S)來(lái)訪問。來(lái)訪問。很長(zhǎng)時(shí)間以來(lái),這兩個(gè)操作一直被分別稱為很長(zhǎng)時(shí)間以來(lái),這兩個(gè)操作一直被分別稱為P、V操作。操作。 wait(S) while(S=0); S-;signal(S)

2、 S+;2.4.42.4.4信號(hào)量的應(yīng)用信號(hào)量的應(yīng)用1. 1. 利用信號(hào)量實(shí)現(xiàn)進(jìn)程互斥利用信號(hào)量實(shí)現(xiàn)進(jìn)程互斥為使多個(gè)進(jìn)程能互斥地訪問某臨界資源,為使多個(gè)進(jìn)程能互斥地訪問某臨界資源,只需為該資源設(shè)置一互斥信號(hào)量只需為該資源設(shè)置一互斥信號(hào)量mutex,并,并設(shè)其初始值為設(shè)其初始值為1,然后將各進(jìn)程訪問該資源的,然后將各進(jìn)程訪問該資源的臨界區(qū)臨界區(qū)CS置于置于wait(mutex)和和signal(mutex)操作之間即可。操作之間即可。 在一個(gè)只允許單向行駛的十字路口,分別有若干由東向西,由南向北的車輛在等待通過。為了安全,每次只允許一輛車通過。當(dāng)有車輛通過時(shí)其他車輛必須等候,當(dāng)無(wú)車輛在路口行駛時(shí)

3、則允許一輛車通過。請(qǐng)用PV操作來(lái)設(shè)計(jì)一個(gè)十字路口安全行駛的自動(dòng)管理系統(tǒng)。設(shè)互斥信號(hào)量S=1,表示臨界資源十字路口,其初值為1int s=1;main()pew();psn();pew()p(s)由東向西通過十字路口;V(S);psn()p(s)由南向北通過十字路口;V(S);說明:互斥信號(hào)量是根據(jù)臨界資源的類型設(shè)置的,有幾種類型的臨界資源就設(shè)置幾個(gè)互斥信號(hào)量。它代表該類臨界資源的數(shù)量,或表示是否可用,其初值一般為1。2 記錄型信號(hào)量機(jī)制(1)記錄型信號(hào)量的出現(xiàn) 盡管整型信號(hào)能夠?qū)崿F(xiàn)進(jìn)程之間的同步,但是,代價(jià)是巨大的,缺陷是進(jìn)程出現(xiàn)了“忙等”的現(xiàn)象,原因是該機(jī)制不能完全遵循同步機(jī)制應(yīng)遵循的規(guī)則。

4、 以此為思路,提出記錄型信號(hào)量機(jī)制,解決進(jìn)程“忙等”問題,從而使得該機(jī)制能夠完全遵循同步機(jī)制應(yīng)遵循的規(guī)則。 2.4.3 信號(hào)量機(jī)制(2)記錄型信號(hào)量的P、V操作1)P原語(yǔ)操作的主要?jiǎng)幼魇牵簊em減1;若sem減1后仍大于或等于零,則進(jìn)程繼續(xù)執(zhí)行;若sem減1后小于零,則該進(jìn)程被阻塞到與該信號(hào)相對(duì)應(yīng)的阻塞隊(duì)列中,然后轉(zhuǎn)向進(jìn)程調(diào)度。2.4.3 信號(hào)量機(jī)制(2)記錄型信號(hào)量的P、V操作2)V原語(yǔ)操作的主要?jiǎng)幼魇牵簊em加1;若相加結(jié)果大于零,則進(jìn)程繼續(xù)執(zhí)行;若相加結(jié)果小于或等于零,則從該信號(hào)的等待隊(duì)列中喚醒一等待進(jìn)程,然后再返回原進(jìn)程繼續(xù)執(zhí)行或轉(zhuǎn)向進(jìn)程調(diào)度。2.4.3 信號(hào)量機(jī)制2 記錄型信號(hào)量機(jī)制

5、(3)記錄型信號(hào)量的實(shí)現(xiàn) 在記錄型信號(hào)量機(jī)制中,1)需要一個(gè)用于代表資源數(shù)目的整型變量value(資源信號(hào)量)。2)需要一個(gè)用于鏈接上述的所有等待進(jìn)程的進(jìn)程鏈表L。 記錄型信號(hào)量是由于它采用了記錄型的數(shù)據(jù)結(jié)構(gòu)而得名的。 2.4.3 信號(hào)量機(jī)制Procedure wait(S)var S: semaphore;beginS.value:=S.value-1;if S.value0 then block(S,L);endProcedure signal(S)var S: semaphore;beginS.value:=S.value+1;i f S . v a l u e 0 t h e n wa

6、keup(S,L);end2.4.3 信號(hào)量機(jī)制(4)(4)記錄型信號(hào)量機(jī)制的記錄型信號(hào)量機(jī)制的wait()wait()和和signal()signal()操作操作一般地,把各進(jìn)程之間發(fā)送的消息作為信號(hào)量看待。與進(jìn)程互斥不同的是,這里的信號(hào)量只與制約進(jìn)程及被制約進(jìn)程有關(guān),而不是與整組 并發(fā)進(jìn)程有關(guān)。因此,該信號(hào)量為私用信號(hào)量。與私用信號(hào)量相對(duì)應(yīng),互斥時(shí)使用的信號(hào)量為公用信號(hào)量。1 從下面對(duì)臨界區(qū)的論述中,選出一條正確的論述。( D )A 臨界區(qū)是指進(jìn)程中用于實(shí)現(xiàn)進(jìn)程互斥的那段代碼B 臨界區(qū)是指進(jìn)程中用于實(shí)現(xiàn)進(jìn)程通信的那段代碼C 臨界區(qū)是指進(jìn)程中用于訪問共享資源的那段代碼D 臨界區(qū)是指進(jìn)程中用于

7、訪問臨界資源的那段代碼2 用信號(hào)量S實(shí)現(xiàn)對(duì)系統(tǒng)中4臺(tái)打印機(jī)的互斥使用,S.value的初值應(yīng)設(shè)置為( 4 ),若S.value的當(dāng)前值為-1,則表示S.L隊(duì)列中有( 1 )個(gè)等待進(jìn)程。3 設(shè)有10個(gè)進(jìn)程共享一個(gè)互斥段,如果最多允許有1個(gè)進(jìn)程進(jìn)入互斥段,則所采用的互斥信號(hào)量初值應(yīng)設(shè)置為( 1 ),而該信號(hào)量的取值范圍為(1-9),如果最多允許有3個(gè)進(jìn)程同時(shí)進(jìn)入互斥段,則所采用的互斥信號(hào)量初值應(yīng)設(shè)置為( 3 )。2.4.42.4.4信號(hào)量的應(yīng)用信號(hào)量的應(yīng)用1. 1. 利用信號(hào)量實(shí)現(xiàn)進(jìn)程互斥利用信號(hào)量實(shí)現(xiàn)進(jìn)程互斥為使多個(gè)進(jìn)程能互斥地訪問某臨界資源,只需為為使多個(gè)進(jìn)程能互斥地訪問某臨界資源,只需為該資

8、源設(shè)置一互斥信號(hào)量該資源設(shè)置一互斥信號(hào)量mutex,并設(shè)其初始值為,并設(shè)其初始值為1,然后將各進(jìn)程訪問該資源的臨界區(qū)然后將各進(jìn)程訪問該資源的臨界區(qū)CS置于置于wait(mutex)和和signal(mutex)操作之間即可。操作之間即可。 在利用信號(hào)量機(jī)制實(shí)現(xiàn)進(jìn)程互斥時(shí)應(yīng)該注意,在利用信號(hào)量機(jī)制實(shí)現(xiàn)進(jìn)程互斥時(shí)應(yīng)該注意,wait(mutex)wait(mutex)和和signal(mutex)signal(mutex)必須成對(duì)地出現(xiàn)。缺少必須成對(duì)地出現(xiàn)。缺少wait(mutex)wait(mutex)將會(huì)導(dǎo)致系統(tǒng)混亂,不能保證對(duì)臨界資源將會(huì)導(dǎo)致系統(tǒng)混亂,不能保證對(duì)臨界資源的互斥訪問,缺少的互斥訪

9、問,缺少signal(mutex)signal(mutex)將會(huì)是臨界資源永遠(yuǎn)將會(huì)是臨界資源永遠(yuǎn)不被釋放,從而使因等待該資源而阻塞的進(jìn)程不能被不被釋放,從而使因等待該資源而阻塞的進(jìn)程不能被喚醒。喚醒。2. 2. 利用信號(hào)量實(shí)現(xiàn)前趨關(guān)系利用信號(hào)量實(shí)現(xiàn)前趨關(guān)系還可利用信號(hào)量來(lái)描述程序或語(yǔ)句之間的前趨關(guān)系。設(shè)有還可利用信號(hào)量來(lái)描述程序或語(yǔ)句之間的前趨關(guān)系。設(shè)有兩個(gè)并發(fā)執(zhí)行的進(jìn)程兩個(gè)并發(fā)執(zhí)行的進(jìn)程P1和和P2。P1中有語(yǔ)句中有語(yǔ)句S1;P2中有語(yǔ)句中有語(yǔ)句S2。我們希望在我們希望在S1執(zhí)行后再執(zhí)行執(zhí)行后再執(zhí)行S2。為實(shí)現(xiàn)這種前趨關(guān)系,只需使。為實(shí)現(xiàn)這種前趨關(guān)系,只需使進(jìn)程進(jìn)程P1和和P2共享一個(gè)公用信

10、號(hào)量共享一個(gè)公用信號(hào)量S,并賦予其初值為,并賦予其初值為0,將,將signal(S)操作放在語(yǔ)句操作放在語(yǔ)句S1后面,而在后面,而在S2語(yǔ)句前面插入語(yǔ)句前面插入wait(S)操操作,即作,即在進(jìn)程在進(jìn)程P1中,用中,用S1;signal(S);在進(jìn)程在進(jìn)程P2中,用中,用wait(S);S2;由于由于S被初始化為被初始化為0,這樣,若,這樣,若P2先執(zhí)行必定先執(zhí)行必定阻塞,只有在進(jìn)程阻塞,只有在進(jìn)程P1執(zhí)行完執(zhí)行完S1; signal(S);操作;操作后使后使S增為增為1時(shí),時(shí),P2進(jìn)程方能成功執(zhí)行語(yǔ)句進(jìn)程方能成功執(zhí)行語(yǔ)句S2。S1Signal(S)S2wait(S)橘子蘋果問題橘子蘋果問題

11、桌子上有一個(gè)空盤子,只允許放一個(gè)水果。爸爸可桌子上有一個(gè)空盤子,只允許放一個(gè)水果。爸爸可以向盤中放蘋果,也可以向盤中放桔子,兒子專等吃盤以向盤中放蘋果,也可以向盤中放桔子,兒子專等吃盤中的桔子,女兒專等吃盤中的蘋果。規(guī)定當(dāng)盤空時(shí),一中的桔子,女兒專等吃盤中的蘋果。規(guī)定當(dāng)盤空時(shí),一次只能放一個(gè)水果,請(qǐng)用次只能放一個(gè)水果,請(qǐng)用waitwait、signalsignal操作實(shí)現(xiàn)爸爸、兒操作實(shí)現(xiàn)爸爸、兒子、女兒三個(gè)并發(fā)進(jìn)程的同步。子、女兒三個(gè)并發(fā)進(jìn)程的同步。semaphore Sp=1;semaphore So=0;semaphore Sa=0;father();son();daughter();fa

12、ther() while(1) wait(Sp); if (放入的是蘋果) signal(Sa); else signal(So); daughter( ) while(1) wait(Sa); 從盤中取出蘋果; signal(Sp); son( ) while(1) wait(So); 從盤中取出桔子; signal(Sp); 同步信號(hào)量是根據(jù)進(jìn)程的數(shù)量設(shè)置的,一般情況同步信號(hào)量是根據(jù)進(jìn)程的數(shù)量設(shè)置的,一般情況下,有幾個(gè)進(jìn)程就應(yīng)設(shè)置幾個(gè)同步信號(hào)量,用以表下,有幾個(gè)進(jìn)程就應(yīng)設(shè)置幾個(gè)同步信號(hào)量,用以表示該進(jìn)程是否可以執(zhí)行,或表示該進(jìn)程是否執(zhí)行結(jié)示該進(jìn)程是否可以執(zhí)行,或表示該進(jìn)程是否執(zhí)行結(jié)束,其初

13、值一般為束,其初值一般為0.0.經(jīng)典經(jīng)典IPCIPC問題問題-生產(chǎn)者生產(chǎn)者- -消費(fèi)者問題消費(fèi)者問題 假定在生產(chǎn)者和消費(fèi)者之間的公用緩沖池中具有假定在生產(chǎn)者和消費(fèi)者之間的公用緩沖池中具有n個(gè)緩沖個(gè)緩沖區(qū),這時(shí)可利用互斥信號(hào)量區(qū),這時(shí)可利用互斥信號(hào)量mutex實(shí)現(xiàn)諸進(jìn)程對(duì)緩沖池的互實(shí)現(xiàn)諸進(jìn)程對(duì)緩沖池的互斥使用;利用信號(hào)量斥使用;利用信號(hào)量empty和和full分別表示緩沖池中空緩沖分別表示緩沖池中空緩沖區(qū)和滿緩沖區(qū)的數(shù)量。又假定這些生產(chǎn)者和消費(fèi)者相互等效,區(qū)和滿緩沖區(qū)的數(shù)量。又假定這些生產(chǎn)者和消費(fèi)者相互等效,只要緩沖池未滿,生產(chǎn)者便可將消息送入緩沖池;只要緩沖只要緩沖池未滿,生產(chǎn)者便可將消息送入

14、緩沖池;只要緩沖池未空,消費(fèi)者便可從緩沖池中取走一個(gè)消息。池未空,消費(fèi)者便可從緩沖池中取走一個(gè)消息。 #define k 100 /假設(shè)緩沖區(qū)大小為100semaphore mutex=1; /mutex是對(duì)緩沖區(qū)的互斥信號(hào)量semaphore empty=k; /empty是空緩沖個(gè)數(shù),同步信號(hào)量semaphore full=0; /full是有產(chǎn)品的緩沖個(gè)數(shù),同步信號(hào)量int arrayk,i=0,j=0; /定義緩沖區(qū),i是生產(chǎn)者指針,j是消費(fèi)者指針void producer( ) produce a product x; /制造數(shù)據(jù) wait(empty); /申請(qǐng)空緩沖區(qū) wait(mutex); /申請(qǐng)對(duì)緩沖區(qū)的讀寫控制權(quán),互斥操作 arrayi=x; /將數(shù)據(jù)放入緩沖區(qū) i=(i+1)% k; /在循環(huán)隊(duì)列中計(jì)算下一次正確位置 sign

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論