二、讀者寫者問題
—個資料檔案或記錄可被多個程序共享,我們把只要求讀該檔案的程序稱為「reader 程序」,其他程序則稱為「writer程序」。允許多個程序同時讀乙個共享物件,因為讀操
作不會使資料檔案混亂。但不允許乙個writer程序和其他reader程序或writer程序同時訪
問共享物件。因為這種訪問將會引起混亂。所謂「讀者-寫者(reader-writerproblem)問題」 是指保證乙個writer程序必須與其他程序互斥地訪問共享物件的同步問題,讀者-寫者問題 常被用來測試新同步原語。
int sw=1,rc=0,sr=1;void
reader()
void
writer()
三、哲學家就餐問題
該問題是描述有五個皙學家共用一張圓桌,分別坐在周圍的五張椅子上.在圓 桌上有五個碗和五隻筷子,他們的生活方式是交替地進行思考和進餐;平時,乙個哲學家
進行思考,飢餓時便試圖取用其左右最靠近他的筷子,只有在他令到兩隻筷子時才能進餐。
進餐畢,放下筷子繼續思考。
p(si);p(s(i+1)%5
);eat;
v(si);
v(s(i+1)%5);
解決方案
(1) 至多只允許有四位哲學家同時去拿左邊的筷子,最終能保證至少有一位哲學家能
夠進餐,並在用畢時能釋放出他用過的兩隻筷子,從而使史多的哲學家能夠進餐。
(2) 僅當哲學家的左、右兩隻筷子均可用時,才允許他拿起筷子進餐。
p(si,s(i+1)%5);eat;
v(si,s(i+1)%5);
(3) 規定奇數號哲學家先拿他左邊的筷t,然後再去拿右邊的筷子:而偶數號哲學家 則相反。按此規定,將是1、2號哲學家競爭1號筷戶:3、4號哲學家競爭3號筷子。即 五位哲學家都先競爭奇數號筷子,獲得後,再去競爭偶數號筷子,最後總會有一位哲學家 能獲得兩隻筷子而進餐。
if(i%2==1)else
eat;
v(si);
v(s(i+1)%5);
9.4 程序通訊
低階通訊:訊號量,pv操作
高階通訊:信箱
一、程序通訊的型別
共享儲存器系統
(1) 基於共享資料結構的通訊方式。在這種通訊方式中,要求諸程序公用某些資料結構,藉以實現諸程序間的資訊交換,如在生產者-消費者問題中的有界緩衝區。作業系統僅 提供共享儲存器,由程式設計師負責對公用資料結構的設背及對程序間同步的處理。這種通訊 方式儀適於傳遞相對少最的資料,通訊效率低下,屬於低階通訊。
(2) 基於共享儲存區的通訊方式。為了傳輸大量資料,在記憶體中劃出了一塊共享儲存
區域,諸程序可通過對該共享區的讀或寫交換資訊,實現通訊,資料的形式和位置甚至訪問控制都是由程序負責,而不是os。這種通訊方式屬於高階通訊。
管道通訊系統
所謂「管道」,是指用於連線乙個讀程序和乙個寫程序以實現它們之間通訊的乙個共享 檔案,又名pipe檔案。向管道(共享檔案)提供輸入的傳送程序(即寫程序)以字元流形式將大量的資料送入管道:而接受管道輸出的接收程序(即讀程序)則從管道中接收(讀)資料。由於 傳送程序和接收程序是利用管道進行通訊的,故又稱為管道通訊。這種方式首創於 unix 系統,由於它能有效地傳送大量資料,因而又被引入到許多其它作業系統中。
訊息傳遞系統
(1)直接通訊方式,是指傳送程序利用os所提供的傳送原語,直接把訊息傳送給目標程序:
(2)間接通訊方式,是指傳送和接收程序,都通過共享中間實體(稱為郵箱)的方式進行訊息的傳送和接收,完成程序間的通訊。
程序的同步與通訊
於文章,表示十分古老的文章了 進入sleep過程後,核心首先儲存進入睡眠時的處理機執行級,再提高處理機的執行優先順序,來遮蔽所有的中斷,接著將該程序置為 睡眠 狀態,將睡眠位址儲存在程序表項中,並將該程序放入睡眠佇列中。如果程序的睡眠是不可中斷的,做了程序上下文的切換後,程序便可安穩地睡眠。當程序被...
程序的同步與通訊
同步關係 直接制約 為了完成乙個共同任務,相互協作的幾個程序需要在某些確定點上協調他們的工作,等待來自其它程序的資訊,以調整它們的推進速度,方可順利執行完畢。互斥關係 間接制約 把併發程序間存在的因相互競爭使用獨佔資源 共享資源 而產生的制約關係。例如 印表機,共享記憶體 臨界資源 一次僅允許乙個程...
程序通訊與程序同步
多個程序可以共享系統中的各種資源,但其中許多資源一次只能為乙個程序使用,我們把一次僅允許乙個程序使用的資源稱為臨界資源。許多物理裝置都屬於臨界資源,如印表機等 對臨界資源的訪問必須互斥進行,在每個程序中,訪問臨界資源的那段 稱為臨界區。程序通訊與同步的目的主要有下面 1 資料傳輸 乙個程序需要將他的...