作業系統 第2章 程序同步 經典程序同步問題

2021-09-02 01:38:19 字數 2163 閱讀 8196

1.生產者——消費者問題

無論生產者、消費者使用緩衝池時應保證互斥使用(互斥訊號量mutex )

生產者和消費者間交叉有序:

有序的控制最根源在產品數量上。

設定兩個訊號量:分別針對生產者、消費者設定不同的訊號量,empty和full分別表示緩衝池中空緩衝池和滿緩衝池(即產品)的數量。

變數和訊號量

buffer: array [ 0, …, n-1] of item;

in, out: integer :=0, 0;

//不使用counter變數,而是用訊號量

var mutex, empty, full: semaphore :=1, n, 0;

producer :

repeat

… produce an item in nexp;

…wait(empty);

wait(mutex);

buffer(in):=nexp;

in:=(in+1) mod n;

singal(mutex);

singal(empty);

until false;

consumer :

repeat

wait(full);

wait(mutex);

nextc:=buffer(out);

out:=(out+1) mod n;

signal(mutex);

signal(empty);

consume the item in nexc;

until false;

檢查:

每個程式中用於實現互斥的wait(mutex)和signal(mutex)必須成對地出現。

控制順序的訊號量empty和full的wait和signal操作,成對地出現在不同的程序中,在每個程式中的多個wait操作順序不能顛倒。且應先執行對資源訊號量的wait操作,再執行對互斥訊號量的wait操作,否則可能引起程序死鎖。

模擬交替執行過程,檢查控制是否正確。

2.哲學家進餐問題

題目描述:

五個哲學家共用一張圓桌,分別坐在周圍的五張椅子上,在桌子上有五隻碗和五隻筷子,他們的生活方式是交替地進行思考和進餐。平時,乙個哲學家進行思考,飢餓時便試圖取用其左右最靠近他的筷子,只有在他拿到兩隻筷子時才能進餐。進餐畢,放下筷子繼續思考。

可見:相鄰兩位不能同時進餐;最多只能有兩人同時進餐。

記錄型訊號量解決哲學家進餐問題

var chopstick: array [0, …, 4] of semaphore;

//所有訊號量均被初始化為1。

//第i 位哲學家的活動可描述為:

repeat

wait(chopstick[ i ]);

wait(chopstick[ ( i +1) mod 5] );

…eat;

… signal(chopstick[ i ]);

signal(chopstick[ ( i +1) mod 5] );

… think;

until false;

3.讀者——寫者問題

情景:乙個資料檔案被多個程序共享。reader程序只要求讀檔案,writer程序要求寫入內容。

合理的同步關係是:

多個讀程序可同時讀;

writer程序與任何其他程序(包括reader程序或其他writer程序)不允許同時訪問檔案。

讀者reader:

begin

repeat

wait(rmutex);

if readcount=0 then

wait(wmutex);

readcount :=readcount +1;

signal(rmutex);

… perform read operation;

…wait(rmutex);

readcount :=readcount -1;

if readcount=0 then

signal(wmutex);

signal(rmutex);

until false;

end;

作業系統 程序同步經典問題

問題描述 使用乙個緩衝區來儲存物品,只有緩衝區沒有滿,生產者才可以放入物品 只有緩衝區不為空,消費者才可以拿走物品。因為緩衝區屬於臨界資源,因此需要使用乙個互斥量 mutex 來控制對緩衝區的互斥訪問。為了同步生產者和消費者的行為,需要記錄緩衝區中物品的數量。數量可以使用訊號量來進行統計,這裡需要使...

作業系統 第六章 程序同步

實驗 經典同步問題之讀者寫者問題 關於前面討論過的共享記憶體問題,為了讓它能夠儲存buffersize個元素,我們修改其 如下。生產者 while true 消費者 while true 乍一看,消費者和生產者 都正確,但是當這兩段 併發執行的時候就有問題了。併發時,兩個程序會同時操作counter...

作業系統 程序同步

臨界資源 critical resouce 臨界區 critical section 硬體同步機制 訊號量機制 訊號量的應用 管程3使用多道批處理系統不僅能有效的改善資源的利用率,還可以顯著地提高系統的吞吐量,但同時會使系統變得更加複雜,會使程式的執行結果存在不確定性。所以必須引入程序同步機制從而保...