經典程序的同步問題
哲學家就餐問題
避免死鎖的解決方法:
(1)、5位哲學家就餐只允許4位同時去拿左邊的筷子,剩乙個堵塞
問題:為什麼不讓3個或者2個同時去拿左邊的筷子?
回答:為了充分利用資源,不讓cpu空閒
(2)、利用and訊號量,如果同時拿到兩邊的筷子就執行,否則就堵塞
(3)、奇數號哲學家拿左邊的筷子,偶數號哲學家拿右邊的筷子,這樣可能會出現1 ,2號哲學家同時爭搶筷子
生產者-消費者問題
需考慮:
(1)兩個生產者同時向乙個盤子放入產品
(2)兩個消費者同時取同乙個盤子的產品
(3)盤子都空的情況下消費者去取
(4)盤子都滿的情況下生產者去放。
解決方法:**:
empty=n;full=0;mutex=1;
producer:
repeat
produce an item in nexp;
//empty和full兩個訊號量的設定解決(3)(4)問題
//兩個wait順序不能顛倒,先有盤子多個消費者才能去爭搶資源
wait(empty);//是否有空的盤子
wait(mutex);//互斥訊號量,解決上述(1)(2)問題
buffer[in]:=nexp;
in:=(in+1) mod n;//進入臨界區**執行in+1後
signal(mutex);//釋放訊號量mutex
signal(full);//釋放乙個產品,產品數+1,生產者可取
until false;
consumer:
repeat
wait(full);//盤子中是否有產品
wait(mutex);
nextc:=buffer(out);
out:=(out+1) mod n;
signal(mutex);
signal(empty);//釋放盤子,消費者可放
讀者-寫者問題
(1)讀者優先的方式(讀者優先體現在一旦讀者爭搶到讀資源,要等待所有讀者都讀完才釋放資源)
reader:
repeat
//rmutex的作用是防止多個讀者同時去爭搶wmutex資源,或者多個讀者可以同時釋放資源
wait(rmutex);//讀者之間的互斥
if readcount=0 then wait(wmutex);//第零個讀者去和寫者爭搶資源
readcount:=readcount+1;
signal(rmutex);//+1之後釋放資源
...perform read opration;
...wait(rmutex)//不釋放wmutex,多個讀者
readcount:=readcount-1;
if readcount=0 then signal(wmutex);//沒有讀者,即釋放資源
signal(rmutex);//釋放rmutex,回到初值
until false;
writer:
dowhile(true);
(2)、使用and型訊號量(寫者優先)
l=rn,mx=1;
//若讀者先來,l-1,(l,rn,0)控制寫者獲取不了資源
//若寫著先來,mx-1,(mx,1,0)控制讀者獲取不了資源
reader:
repeat
swait(l,1,1);
swait(mx,1,0);//起到乙個開關的作用
...讀操作...
ssignal(l,1);
until false;
writer:
repeat
swait(mx,1,1;l,rn,0);//後面的0為開關作用
寫操作;
ssignal(mx,1);
until false;
第二章 程序的描述與控制
概念 所謂前趨圖 指乙個有向無迴圈圖 dag 它用於描述程序之間執行的先後順序。特徵 特徵 定義 為了使程式併發執行,並且可以對併發執行的程式加以描述和控制,人們引入了程序的概念。為了使參與併發執行的每個程式都能獨立執行,在作業系統中必須為之分配乙個專門的資料結構,稱為程序控制塊 pcb 系統利用p...
作業系統 第二章程序的控制與描述(5)
通訊鏈路 communication link 要在傳送程序和接收程序之間能進行通訊,必須在兩者之間建立一條通訊鏈路。兩種方式 顯式的 建立連線 和拆除鏈路。用命令 原語 請求系統做。這種方式主要用於計算機網路中 系統自動地建立一條鏈路。無須明確提出建立鏈路的請求,只須利用系統提供的傳送命令 原語 ...
第二章 程序通訊
1 低階通訊 程序之間的互斥和同步 訊號量機制是有效的同步工具,但作為通訊工具缺點如下 1 效率低 通訊量少 2 通訊對使用者不透明 程式設計師實現,作業系統只提供共享儲存器供 操作 2 高階程序通訊 使用者直接利用作業系統提供的一組通訊命令,高效地傳送大量資料的通訊方式。作業系統隱藏了程序通訊的細...