系統(tǒng)進程同步處理及管程_第1頁
系統(tǒng)進程同步處理及管程_第2頁
系統(tǒng)進程同步處理及管程_第3頁
系統(tǒng)進程同步處理及管程_第4頁
系統(tǒng)進程同步處理及管程_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、韓都衣舍淘寶店 http:/ 潮州新聞網 http:/ 韓都衣舍童裝時尚女裝 http:/ 網購韓都衣舍首選麥考林 http:/ 韓都衣舍官方旗艦店 http:/ 金彩 http:/ 有限緩沖問題的共享內存解決方案(自學,增加計數變量有限緩沖問題的共享內存解決方案(自學,增加計數變量count) 設設count當前值為當前值為5,則:,則:R1=counter R1=5R1=R1+1 R1=6counter=R1 c=6R2=counter R2=6R2=R2-1 R2=5counter=R2 c=5R1=counter R1=5R1=R1+1 R1=6 R2=counter R2=5R2=R

2、2-1 R2=4counter=R1 c=6counter=R2 c=43 競爭條件競爭條件(race condition):):多個進程并發(fā)訪問和操作多個進程并發(fā)訪問和操作同一數據且執(zhí)行結果與訪問發(fā)生的特定順序有關同一數據且執(zhí)行結果與訪問發(fā)生的特定順序有關 防止競爭條件防止競爭條件:確保一段時間內只有一個進程能操作共享:確保一段時間內只有一個進程能操作共享變量變量進程同步進程同步(process synchronization)補充:并發(fā)與并行補充:并發(fā)與并行 并發(fā)(并發(fā)(concurrency):):多個事件在同一時間間隔內發(fā)生多個事件在同一時間間隔內發(fā)生 并行(并行(parallel):

3、):多個事件在同一時刻發(fā)生多個事件在同一時刻發(fā)生 單單CPUCPU系統(tǒng)中,程序在宏觀上并發(fā),微觀上串行執(zhí)行系統(tǒng)中,程序在宏觀上并發(fā),微觀上串行執(zhí)行 多多CPUCPU系統(tǒng)中,程序在宏觀上并發(fā),微觀上并行執(zhí)行系統(tǒng)中,程序在宏觀上并發(fā),微觀上并行執(zhí)行4臨界區(qū)域問題臨界區(qū)域問題臨界區(qū)(臨界區(qū)(critical section):):進程的代碼段進程的代碼段臨界區(qū)問題:設計一個進程用來協(xié)作的協(xié)議臨界區(qū)問題:設計一個進程用來協(xié)作的協(xié)議 進入區(qū)(進入區(qū)(entry section) 退出區(qū)(退出區(qū)(exit section) 剩余區(qū)(剩余區(qū)(remainder section)臨界區(qū)問題的解答必須滿足三項要

4、求臨界區(qū)問題的解答必須滿足三項要求0互斥互斥0有空讓進(前進要求)有空讓進(前進要求)0有限等待有限等待1) 典型進程典型進程Pi的通用結構的通用結構do 臨界區(qū)臨界區(qū) 剩余區(qū)剩余區(qū) while(1)進入區(qū)進入區(qū)退出區(qū)退出區(qū)51、兩進程解法、兩進程解法 算法算法1 算法算法2do 臨界區(qū)臨界區(qū) 剩余區(qū)剩余區(qū) while(1)flagi=true; while(flagj);flagi=false;do 臨界區(qū)臨界區(qū) 剩余區(qū)剩余區(qū) while(1)while(turn!=i);turn=j;分析:分析:滿足互斥要求滿足互斥要求不滿足前進要求(嚴格交替)不滿足前進要求(嚴格交替)分析:分析:滿足互

5、斥要求滿足互斥要求不滿足前進要求(精確時序)不滿足前進要求(精確時序)6do 臨界區(qū)臨界區(qū) 剩余區(qū)剩余區(qū) while(1)flagi=true;turn=j;while(flagj&turn=j);flagi=false; 算法算法3分析:分析:滿足互斥要求滿足互斥要求滿足前進要求滿足前進要求滿足有限等待要求滿足有限等待要求72、多進程解法、多進程解法v 面包店算法面包店算法 思想:小號碼客戶先得到服務,相同號碼取名稱小者思想:小號碼客戶先得到服務,相同號碼取名稱小者 數據結構數據結構boolean choosingn; (初值為初值為false)int numbern; (初值為初值

6、為0) 約定符號約定符號若若 ac或或a=c&bd 則記為則記為 (a,b)=ai 對對i=0,n-1成立成立8面包店算法中進程面包店算法中進程Pi的結構的結構do 臨界區(qū)臨界區(qū) 剩余區(qū)剩余區(qū) while(1)choosingi=true;numberi=max(number0,number1,numbern-1)+1;choosingi=false;for(j=0;jn;j+) while(choosingj); while(numberj!=0)&(numberj,j)(numberi,i);numberi=0;上述四種算法都要忙等待(循環(huán)測試)!上述四種算法都要忙等待(循

7、環(huán)測試)!9同步硬件同步硬件(簡單了解)(簡單了解) 單處理器環(huán)境單處理器環(huán)境0在修改共享變量時禁止中斷出現在修改共享變量時禁止中斷出現 多處理器環(huán)境多處理器環(huán)境0使用特殊硬件指令,提供原子操作使用特殊硬件指令,提供原子操作xTestAndSetxSwap10信號量信號量 信號量(信號量(semaphore,S)0整數變量,除了初始化,只能由整數變量,除了初始化,只能由wait和和signal訪問訪問 wait的經典定義的經典定義 signal的經典定義的經典定義 對信號量整數值的修改必須不可分的執(zhí)行對信號量整數值的修改必須不可分的執(zhí)行原子操作原子操作wait(S) while(s=0) ;/

8、no-op S-;signal(S) S+;111、用法、用法解決解決n個進程的臨界區(qū)問題個進程的臨界區(qū)問題互斥互斥0 設設n個進程共享一個信號量個進程共享一個信號量mutex,初始化為初始化為10 進程進程Pi的組織結構如下的組織結構如下do 臨界區(qū)臨界區(qū) 剩余區(qū)剩余區(qū) while(1)wait(mutex);signal(mutex);使用信號量解決各種同步問題使用信號量解決各種同步問題同步同步122、實現、實現 自旋鎖(自旋鎖(spinlock)忙等待忙等待 克服忙等,重新定義信號量和克服忙等,重新定義信號量和wati、signal操作操作 信號量定義信號量定義typedef struc

9、t int value; struct process *L; semaphore;整數值整數值進程進程鏈表鏈表13 wait操作操作 signal操作操作void wait(semaphore S) S.value - -; if (S. value0) add this process to S.L; block( ); void signal(semaphore S) S.value + +; if (S. value=0) remove a process from S.L; wakeup( P); 若若S.value0,則其絕對值是等待信號量則其絕對值是等待信號量S的進程個數的進程個

10、數 信號量原子執(zhí)行信號量原子執(zhí)行143、死鎖與饑餓(、死鎖與饑餓(了解概念了解概念) 死鎖(死鎖(deadlocked)0兩個或多個進程無限地等待一個事件,而該事件只能由兩個或多個進程無限地等待一個事件,而該事件只能由這些等待進程之一來產生這些等待進程之一來產生 饑餓(饑餓(starvation)或無限期阻塞(或無限期阻塞(indefinite blocking)0進程在信號量內無窮等待進程在信號量內無窮等待157.5 經典同步問題經典同步問題1、有限緩沖問題(生產者消費者問題)、有限緩沖問題(生產者消費者問題) 數據結構數據結構 semaphore mutex,empty,fullxmute

11、x:提供對緩沖池訪問的互斥要求,初值提供對緩沖池訪問的互斥要求,初值1xempty:空緩沖項,初值空緩沖項,初值nxfull:滿緩沖項,初值滿緩沖項,初值016do produce an item in nextp; wait(empty); wait(mutex); add nextp to buffer signal(mutex); signal(full); while(1);do wait(full); wait(mutex); remove an item from buffer to nextc; signal(mutex); signal(empty); consume the

12、item in nextc while(1);生產者進程結構生產者進程結構消費者進程結構消費者進程結構172、讀者作者問題、讀者作者問題第一讀者作者問題(第一讀者作者問題(V):):讀者不需等待讀者不需等待第二讀者作者問題:若有作者等待,新讀者需等待第二讀者作者問題:若有作者等待,新讀者需等待數據結構數據結構0 semaphore mutex,wrt;0 int readcount;xmutex:確保在更新變量確保在更新變量readcount時的互斥,初值時的互斥,初值1xwrt:供寫者及第一個進入臨界區(qū)和最后一個離開臨界供寫者及第一個進入臨界區(qū)和最后一個離開臨界區(qū)的讀者使用,初值區(qū)的讀者使用

13、,初值11) readcount:用來跟蹤有多少進程正在讀對象用來跟蹤有多少進程正在讀對象18 作者進程結構作者進程結構讀者進程結構讀者進程結構 wait(wrt); writing is performed signal(wrt); wait(mutex); readcount+ +; If(readcount=1) wait(wrt); signal(mutex); reading is performed wait(mutex); readcount- -; if(readcount=0) signal(wrt); signal(mutex); 第一個進第一個進入臨界區(qū)入臨界區(qū)的讀者的讀

14、者最后一個最后一個離開臨界離開臨界區(qū)的讀者區(qū)的讀者193、哲學家就餐問題、哲學家就餐問題 數據結構數據結構0semaphore chopstick5;xchopsticki:第第i個哲學家身邊的筷子,初值個哲學家身邊的筷子,初值1食物食物20哲學家哲學家i的結構的結構do wait(chopsticki); wait(chopstick(i+1)%5 ); eat signal(chopsticki); signal(chopstick (i+1)%5 ); think while(1);分析:分析:確保沒有兩個相鄰哲確保沒有兩個相鄰哲學家同時進餐學家同時進餐可能會導致死鎖(例可能會導致死鎖(

15、例如如5個哲學家同時拿個哲學家同時拿起左邊的筷子)起左邊的筷子)21解決死鎖問題的方案解決死鎖問題的方案最多只允許最多只允許4個哲學家同時坐在桌子上個哲學家同時坐在桌子上只有兩只筷子都可用時才允許一個哲學家拿起它們只有兩只筷子都可用時才允許一個哲學家拿起它們使用非對稱解決,即奇數哲學家先拿起他左邊的筷使用非對稱解決,即奇數哲學家先拿起他左邊的筷子,接著拿他右邊的筷子,而偶數哲學家先拿起他子,接著拿他右邊的筷子,而偶數哲學家先拿起他右邊的筷子,接著拿起他左邊的筷子右邊的筷子,接著拿起他左邊的筷子餓死問題無法確保餓死問題無法確保22臨界區(qū)域臨界區(qū)域(簡單了解)(簡單了解) 信號量使用時可能出現一些

16、錯誤信號量使用時可能出現一些錯誤0若交換了若交換了wait和和signal的執(zhí)行順序,多個進程可能在的執(zhí)行順序,多個進程可能在臨界區(qū)內同時執(zhí)行,違反互斥要求臨界區(qū)內同時執(zhí)行,違反互斥要求0若若wait替代了替代了signal,會發(fā)生死鎖會發(fā)生死鎖0若省略了若省略了wait或或signal或兩者,可能會死鎖或違反互或兩者,可能會死鎖或違反互斥斥 針對上述問題高級語言構造針對上述問題高級語言構造0臨界區(qū)域(條件臨界區(qū)域)臨界區(qū)域(條件臨界區(qū)域)0管程(管程(monitor)23臨界區(qū)域臨界區(qū)域 需要定義的數據結構需要定義的數據結構0v:類型為類型為T的共享數據(的共享數據(v: shared T)

17、0B:布爾邏輯表達式布爾邏輯表達式0S:與與v關聯的執(zhí)行語句關聯的執(zhí)行語句 region v when(B) S;0當語句當語句S在執(zhí)行時,沒有其他進程能訪問變量在執(zhí)行時,沒有其他進程能訪問變量v 當進程試圖進入臨界區(qū)時,先計算布爾邏輯表達式當進程試圖進入臨界區(qū)時,先計算布爾邏輯表達式B,若若為真,執(zhí)行語句為真,執(zhí)行語句S;否則,進程放棄互斥并延遲到否則,進程放棄互斥并延遲到B為真為真,并且沒有其他進程位于與,并且沒有其他進程位于與v相關聯的區(qū)域內相關聯的區(qū)域內24管程(管程(monitor) 管程的語法管程的語法monitor monitor-name shared variable dec

18、larations procedure body p1() procedure body p2() procedure body pn() initialization code 管程:由程序員定義的一管程:由程序員定義的一組操作符,管程構造確保一組操作符,管程構造確保一次只有一個進程能在管程內次只有一個進程能在管程內活動活動 條件變量條件變量 condition x, y;x.wait();調用操作的進程會暫停直到調用操作的進程會暫停直到另一進程調用另一進程調用x.signal();重新啟動一個懸掛的進程重新啟動一個懸掛的進程251、管程哲學家就餐問題的無死鎖解答、管程哲學家就餐問題的無死鎖

19、解答 數據結構數據結構0enum thinking, hungry, eating state5;0condition self5;0管程管程dp控制筷子的分布控制筷子的分布 哲學家哲學家i的操作的操作dp.pickup(i); eat dp.putdown(i);26哲學家就餐問題的管程解法哲學家就餐問題的管程解法monitor dp enum thinking, hungry, eating state5; condition self5; void pickup(int i) statei=hungry; test(i); if(statei!= eating) selfi.wait()

20、; void putdown(int i) statei=thinking; test(i+4)%5); test(I+1)%5); 27void test (int i) if (state(i+4)%5!=eating)&(statei=hungry) &(state(i+1)%5!=eating) statei=eating; selfi.signal(); void init () for(int i=0;i0) signal(next);else signal(mutex);外部程序外部程序293、條件變量的實現、條件變量的實現 semaphore x_sem; /初

21、值為初值為0 int x_count; /初值為初值為0 x.waitx.signalx_count+ +;if (next_count0) signal(next);else signal(mutex);wait(x-sem);x_count- -;if (x_count0) next_count+ +; signal(x_sem); wait(next); signal(mutex); next_count- -;30總結補充總結補充 信號量小結信號量小結 wait、signal操作小結操作小結 前驅關系的信號量解答前驅關系的信號量解答 針對信號量問題的補充練習針對信號量問題的補充練習31

22、1、信號量小結、信號量小結v 一個信號量可用于一個信號量可用于n n個進程的同步互斥;且只能由個進程的同步互斥;且只能由waitwait、signalsignal操作修改。操作修改。用于互斥時,用于互斥時,S S初值為初值為1 1,取值為,取值為1 - (1 - (n-1) n-1) (相當于臨界區(qū)的通行證,實際上也是資源個數)相當于臨界區(qū)的通行證,實際上也是資源個數) S=1S=1:臨界區(qū)可用:臨界區(qū)可用 S=0S=0:已有一進程進入臨界區(qū):已有一進程進入臨界區(qū) S0S=0=0 S=0:S=0:表示可用資源個數表示可用資源個數 S0: S0: 表示該資源的等待隊列長度表示該資源的等待隊列長度

23、322 2、waitwait、signalsignal操作小結操作小結 wait(S)wait(S):請求分配一個資源。請求分配一個資源。 signal(S)signal(S):釋放一個資源。釋放一個資源。 waitwait、signalsignal操作必須成對出現。操作必須成對出現。 用于互斥時,位于同一進程內;用于互斥時,位于同一進程內; 用于同步時,交錯出現于兩個合作進程內。用于同步時,交錯出現于兩個合作進程內。 多個多個waitwait操作的次序不能顛倒,否則可能導致死鎖。操作的次序不能顛倒,否則可能導致死鎖。 多個多個signalsignal操作的次序可任意。操作的次序可任意。333

24、、補充例題(前驅關系)、補充例題(前驅關系) 如圖所示的優(yōu)先圖,要求用信號量實現如圖所示的優(yōu)先圖,要求用信號量實現S1S3S4S5S6S7S234Semaphore a,b,c,d,e,f,g; /初值為初值為0 S1;signal(a);signal(b); wait(a);S2;S4;signal (c);signal(d); wait(b);S3;signal(e); wait (c);wait(e);S5;signal(f); wait(d);S6;signal(g); wait(f);wait(g);S735補充題目練習補充題目練習S1S3S4S5S6S236Semaphore a,

25、b,c,d,e,f,g; /初值為初值為0 S1;signal(a);signal(b); wait(a);S2; signal(c);signal(d); wait (b); S3;signal(e); wait(c);S4;signal(f); wait(d);S5;signal(g); wait(e);wait(f);wait(g);S6;374、針對信號量問題的補充練習、針對信號量問題的補充練習桌子上有一個盤子,可以存放一個水果。父親總是放蘋桌子上有一個盤子,可以存放一個水果。父親總是放蘋果到盤子中,而母親總是放香蕉到盤子中;兒子專等吃果到盤子中,而母親總是放香蕉到盤子中;兒子專等吃盤

26、中的香蕉,而女兒專等吃盤中的蘋果。盤中的香蕉,而女兒專等吃盤中的蘋果。 分析:生產者消費者問題的一種變形,生產者、消費分析:生產者消費者問題的一種變形,生產者、消費者以及放入緩沖區(qū)的產品都有兩類,但每類消費者只消者以及放入緩沖區(qū)的產品都有兩類,但每類消費者只消費其中固定的一種產品。費其中固定的一種產品。 數據結構:數據結構:semaphore dish, apple , banana ; dish:表示盤子是否為空,初值為表示盤子是否為空,初值為1 apple:表示盤中是否有蘋果,初值為表示盤中是否有蘋果,初值為0 banana:表示盤中是否有香蕉,初值為表示盤中是否有香蕉,初值為038father:do wait(dish); 將蘋果放到盤中;將蘋果放到盤中; signal(apple);while(1);mother:do wait(dish); 將香蕉放到盤中;將香蕉放到盤中; signal(banana);while(1);son:do wait(banana); 從盤

溫馨提示

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

評論

0/150

提交評論