




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第2章 進程管理互斥 和 同步 的區別2.4.32.4.3信號量機制信號量機制1. 1. 整型信號量整型信號量最初由最初由Dijkstra把整型信號量定義為一個用于把整型信號量定義為一個用于表示資源數目的整型量表示資源數目的整型量S,它與一般整型量不同,它與一般整型量不同,除初始化外,僅能通過兩個標準的原子操作除初始化外,僅能通過兩個標準的原子操作(Atomic Operation) wait(S)和和signal(S)來訪問。來訪問。很長時間以來,這兩個操作一直被分別稱為很長時間以來,這兩個操作一直被分別稱為P、V操作。操作。 wait(S) while(S=0); S-;signal(S)
2、 S+;2.4.42.4.4信號量的應用信號量的應用1. 1. 利用信號量實現進程互斥利用信號量實現進程互斥為使多個進程能互斥地訪問某臨界資源,為使多個進程能互斥地訪問某臨界資源,只需為該資源設置一互斥信號量只需為該資源設置一互斥信號量mutex,并,并設其初始值為設其初始值為1,然后將各進程訪問該資源的,然后將各進程訪問該資源的臨界區臨界區CS置于置于wait(mutex)和和signal(mutex)操作之間即可。操作之間即可。 在一個只允許單向行駛的十字路口,分別有若干由東向西,由南向北的車輛在等待通過。為了安全,每次只允許一輛車通過。當有車輛通過時其他車輛必須等候,當無車輛在路口行駛時
3、則允許一輛車通過。請用PV操作來設計一個十字路口安全行駛的自動管理系統。設互斥信號量S=1,表示臨界資源十字路口,其初值為1int s=1;main()pew();psn();pew()p(s)由東向西通過十字路口;V(S);psn()p(s)由南向北通過十字路口;V(S);說明:互斥信號量是根據臨界資源的類型設置的,有幾種類型的臨界資源就設置幾個互斥信號量。它代表該類臨界資源的數量,或表示是否可用,其初值一般為1。2 記錄型信號量機制(1)記錄型信號量的出現 盡管整型信號能夠實現進程之間的同步,但是,代價是巨大的,缺陷是進程出現了“忙等”的現象,原因是該機制不能完全遵循同步機制應遵循的規則。
4、 以此為思路,提出記錄型信號量機制,解決進程“忙等”問題,從而使得該機制能夠完全遵循同步機制應遵循的規則。 2.4.3 信號量機制(2)記錄型信號量的P、V操作1)P原語操作的主要動作是:sem減1;若sem減1后仍大于或等于零,則進程繼續執行;若sem減1后小于零,則該進程被阻塞到與該信號相對應的阻塞隊列中,然后轉向進程調度。2.4.3 信號量機制(2)記錄型信號量的P、V操作2)V原語操作的主要動作是:sem加1;若相加結果大于零,則進程繼續執行;若相加結果小于或等于零,則從該信號的等待隊列中喚醒一等待進程,然后再返回原進程繼續執行或轉向進程調度。2.4.3 信號量機制2 記錄型信號量機制
5、(3)記錄型信號量的實現 在記錄型信號量機制中,1)需要一個用于代表資源數目的整型變量value(資源信號量)。2)需要一個用于鏈接上述的所有等待進程的進程鏈表L。 記錄型信號量是由于它采用了記錄型的數據結構而得名的。 2.4.3 信號量機制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 信號量機制(4)(4)記錄型信號量機制的記錄型信號量機制的wait()wait()和和signal()signal()操作操作一般地,把各進程之間發送的消息作為信號量看待。與進程互斥不同的是,這里的信號量只與制約進程及被制約進程有關,而不是與整組 并發進程有關。因此,該信號量為私用信號量。與私用信號量相對應,互斥時使用的信號量為公用信號量。1 從下面對臨界區的論述中,選出一條正確的論述。( D )A 臨界區是指進程中用于實現進程互斥的那段代碼B 臨界區是指進程中用于實現進程通信的那段代碼C 臨界區是指進程中用于訪問共享資源的那段代碼D 臨界區是指進程中用于
7、訪問臨界資源的那段代碼2 用信號量S實現對系統中4臺打印機的互斥使用,S.value的初值應設置為( 4 ),若S.value的當前值為-1,則表示S.L隊列中有( 1 )個等待進程。3 設有10個進程共享一個互斥段,如果最多允許有1個進程進入互斥段,則所采用的互斥信號量初值應設置為( 1 ),而該信號量的取值范圍為(1-9),如果最多允許有3個進程同時進入互斥段,則所采用的互斥信號量初值應設置為( 3 )。2.4.42.4.4信號量的應用信號量的應用1. 1. 利用信號量實現進程互斥利用信號量實現進程互斥為使多個進程能互斥地訪問某臨界資源,只需為為使多個進程能互斥地訪問某臨界資源,只需為該資
8、源設置一互斥信號量該資源設置一互斥信號量mutex,并設其初始值為,并設其初始值為1,然后將各進程訪問該資源的臨界區然后將各進程訪問該資源的臨界區CS置于置于wait(mutex)和和signal(mutex)操作之間即可。操作之間即可。 在利用信號量機制實現進程互斥時應該注意,在利用信號量機制實現進程互斥時應該注意,wait(mutex)wait(mutex)和和signal(mutex)signal(mutex)必須成對地出現。缺少必須成對地出現。缺少wait(mutex)wait(mutex)將會導致系統混亂,不能保證對臨界資源將會導致系統混亂,不能保證對臨界資源的互斥訪問,缺少的互斥訪
9、問,缺少signal(mutex)signal(mutex)將會是臨界資源永遠將會是臨界資源永遠不被釋放,從而使因等待該資源而阻塞的進程不能被不被釋放,從而使因等待該資源而阻塞的進程不能被喚醒。喚醒。2. 2. 利用信號量實現前趨關系利用信號量實現前趨關系還可利用信號量來描述程序或語句之間的前趨關系。設有還可利用信號量來描述程序或語句之間的前趨關系。設有兩個并發執行的進程兩個并發執行的進程P1和和P2。P1中有語句中有語句S1;P2中有語句中有語句S2。我們希望在我們希望在S1執行后再執行執行后再執行S2。為實現這種前趨關系,只需使。為實現這種前趨關系,只需使進程進程P1和和P2共享一個公用信
10、號量共享一個公用信號量S,并賦予其初值為,并賦予其初值為0,將,將signal(S)操作放在語句操作放在語句S1后面,而在后面,而在S2語句前面插入語句前面插入wait(S)操操作,即作,即在進程在進程P1中,用中,用S1;signal(S);在進程在進程P2中,用中,用wait(S);S2;由于由于S被初始化為被初始化為0,這樣,若,這樣,若P2先執行必定先執行必定阻塞,只有在進程阻塞,只有在進程P1執行完執行完S1; signal(S);操作;操作后使后使S增為增為1時,時,P2進程方能成功執行語句進程方能成功執行語句S2。S1Signal(S)S2wait(S)橘子蘋果問題橘子蘋果問題
11、桌子上有一個空盤子,只允許放一個水果。爸爸可桌子上有一個空盤子,只允許放一個水果。爸爸可以向盤中放蘋果,也可以向盤中放桔子,兒子專等吃盤以向盤中放蘋果,也可以向盤中放桔子,兒子專等吃盤中的桔子,女兒專等吃盤中的蘋果。規定當盤空時,一中的桔子,女兒專等吃盤中的蘋果。規定當盤空時,一次只能放一個水果,請用次只能放一個水果,請用waitwait、signalsignal操作實現爸爸、兒操作實現爸爸、兒子、女兒三個并發進程的同步。子、女兒三個并發進程的同步。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); 同步信號量是根據進程的數量設置的,一般情況同步信號量是根據進程的數量設置的,一般情況下,有幾個進程就應設置幾個同步信號量,用以表下,有幾個進程就應設置幾個同步信號量,用以表示該進程是否可以執行,或表示該進程是否執行結示該進程是否可以執行,或表示該進程是否執行結束,其初
13、值一般為束,其初值一般為0.0.經典經典IPCIPC問題問題-生產者生產者- -消費者問題消費者問題 假定在生產者和消費者之間的公用緩沖池中具有假定在生產者和消費者之間的公用緩沖池中具有n個緩沖個緩沖區,這時可利用互斥信號量區,這時可利用互斥信號量mutex實現諸進程對緩沖池的互實現諸進程對緩沖池的互斥使用;利用信號量斥使用;利用信號量empty和和full分別表示緩沖池中空緩沖分別表示緩沖池中空緩沖區和滿緩沖區的數量。又假定這些生產者和消費者相互等效,區和滿緩沖區的數量。又假定這些生產者和消費者相互等效,只要緩沖池未滿,生產者便可將消息送入緩沖池;只要緩沖只要緩沖池未滿,生產者便可將消息送入
14、緩沖池;只要緩沖池未空,消費者便可從緩沖池中取走一個消息。池未空,消費者便可從緩沖池中取走一個消息。 #define k 100 /假設緩沖區大小為100semaphore mutex=1; /mutex是對緩沖區的互斥信號量semaphore empty=k; /empty是空緩沖個數,同步信號量semaphore full=0; /full是有產品的緩沖個數,同步信號量int arrayk,i=0,j=0; /定義緩沖區,i是生產者指針,j是消費者指針void producer( ) produce a product x; /制造數據 wait(empty); /申請空緩沖區 wait(mutex); /申請對緩沖區的讀寫控制權,互斥操作 arrayi=x; /將數據放入緩沖區 i=(i+1)% k; /在循環隊列中計算下一次正確位置 sign
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業廢水處理與節能環保的綜合策略
- 工業無線通信中的機器學習技術
- 工業大數據的采集與處理技術
- 工業機器人技術及其在制造業中的應用探討
- 工業污染控制與智能環境監測的融合
- 工業生產中的資源循環利用技術
- 工業綠色生產技術創新與發展趨勢
- 工業污染防治的國際經驗與啟示
- 工業涂料生產中的環保技術及措施
- 工業設計中的創新方法與技術應用
- 燈具簡介課件
- 最新國家開放大學電大《兒童家庭教育指導》終結性考試大作業答案
- 玻璃深加工有限公司風險分級管控和隱患排查治理雙重預防工作機制文件
- 科室醫院感染風險評估表
- 部編(統編)版高中歷史必修《中外歷史綱要(上)》全冊教案教學設計-新教材-含教學計劃 教學進度 培優補差計劃-
- 上鐵運發號鐵路局常用調度命令用語附件
- 餐廚廢棄物資源化利用和無害化處理項目可行性研究報告
- 綠色農村人居環境整治建設宜居美麗鄉村環境整治是關鍵動態PPT模板
- LANTEK蘭特鈑金軟件手冊(下)
- 套管開窗側鉆技術
- 砍掉成本題庫合并
評論
0/150
提交評論