《作業系統》
主講人:黃伯虎
上一講內容回顧
程序間的相互作用
基本概念:同步、互斥、臨界資源、臨界區帶來的問題
解決方案
鎖變數法(測試和設定指令)
訊號量和p、v操作
訊號量的物理含義
s>0:表示可用資源數目。
s<=0:表示沒有資源可用。
s<0:其絕對值表示因為此訊號量而被阻塞的程序數。
}p(ss為訊號量
}v(s) //s為訊號量
s semaphore; //設定公有訊號量s = 1; //初值
process
v(s);……}
使用p 、v 操作時的注意事項
p 、v 操作(對同一訊號量)總是成對出現的;互斥操作時他們處於同一程序中;同步操作時他們處於不同程序中。
p 、v 操作的位置和次序十分重要,使用時注意邏輯關係。
s semaphore; //設定公有訊號量s = 1; //初值process v(s);……}
while (true)
生產者程序t1while (true)
消費者程序t2
ipc (inter-process communication)經典問題
讀者寫者問題
問題描述:乙個資料物件(檔案、記錄)可以為多個併發程序共享。
其中有的程序只需要讀其中的內容,我們稱為「讀者」;有的程序負責更新其中內容,我們稱為「寫者」。「讀者」可以同時讀取共享資料物件;「寫者」不能和其它任何程序同時訪問共享資料物件。
data
reader reader read read reader
read
...writer write writer write writer
write
...五、程序間的相互作用
分析:讀程序的行為:系統中會有多個讀程序同時訪問共享資料,不過我們可以將他們的行為合併,只需要區分第乙個進入的讀程序(佔
有臨界資源)和最後乙個離開的讀程序(釋放臨界資源)。因此需要
設定乙個計數器readnum來記錄讀程序的數目。
確定臨界資源:data, readnum
分清同步和互斥關係
①「讀者——讀者」:互斥訪問readnum
②「讀者——寫者」:互斥訪問data
③「寫者——寫者」:互斥訪問data
五、程序間的相互作用
設定訊號量:
int readnum =0; //計數,用於記錄讀者的數目
semaphore mutex, write ; //公用訊號量,用於互斥
mutex=1; write=1; //mutex 用於對readnum 互斥;write 用於寫者之間以及寫
者和讀者之間互斥p(mutex);//對readnum 互斥readnum ++; //讀者數目加1
if (readnum==1) //第乙個讀程序p(write);//申請使用data 資源v(mutex); //釋放readnum reading;
p(mutex); //對readnum 互斥readnum --;
if (readnum==0)//最後乙個讀程序v(write); //釋放data 資源v(mutex); //釋放readnum
讀者程序:
p(write); //申請使用data 資源writing;
v(write); //釋放data 資源
寫者程序:
自學:寫者優先(第二類讀者寫者問題)
理髮師問題
理髮椅理髮師
等候椅規則:
1.如果沒有顧客,理髮師睡覺;
2.如果顧客到來,理髮師正在睡覺,喚醒他理髮;
3.如果顧客到來,理髮師正忙給別人理髮,則顧客看看等候椅是否有空:
如果為有空,則坐下等候;
否則,離開。
}理髮師程序:else }
顧客程序:
設定訊號量:
semaphore customers, barbers ; //私有訊號量,用於同步
customers=0; barbers=0; //customers 表示顧客數目,barbers 表示理髮師狀態int wait=0; //等待的人,計數chairs //表示等候椅個數
哲學家問題
五個哲學家圍坐在一圓桌旁,桌**有一盤通心粉,每人面前有乙隻空盤子,每兩人之間放乙隻叉子。每個哲學家的行為是思
考,感到飢餓,然後吃通心粉。為了吃通心粉,每個哲學家必須
拿到兩隻叉子,並且每個人只能直接從自己的左邊或右邊去取叉
子。food
問題:五個人同時感到飢餓,拿起了左手(右手)邊的叉子——死鎖;
規定拿叉子的順序為從左至右(從右至左),如果右邊(左邊)的叉子不能用,則放下左手的叉子,過一段時間再拿。如果行動高度統
一——飢餓;
原因:p、v操作將同步和互斥操作分散到各個程序中,沒有乙個程序能對全域性進行考慮。
如何解決?
管程(monitor)
2023年,hoare和brinch hanson提出。是乙個由過程、變數和資料結構等組成的特殊的模組或者軟體包。
基本思想:
集中管理各程序中的臨界區;
程序可以呼叫管程中的過程,但是不能在管程外的過程中直接訪問管程內的資料結構。
系統保證在任何時刻管程中只能有乙個活躍程序存在(互斥執行)。
特點:模組化:可以單獨編譯的實體;
抽象資料型別:將資料結構和操作封裝在乙個模組中;
資訊隱蔽:管程如何實現其功能的對外界隱蔽。
優點:安全性、互斥性、等待機制。
作業p117 習題29, 31
第2章程序設計基礎
考點精講 考點 1 程式設計的方法與風格 養成良好的程式設計風格,主要考慮下述因素 1 源程式文件化 1 符號名的命名 符號名的命名應具有一定的實際含義,以便於對程式功能的理解。2 程式注釋 在源程式中新增正確的注釋可幫助人們理解程式。程式注釋可分為序言 性注釋和功能性注釋。語句結構清晰第 一 效率...
第3講銷售管理
1資訊科技與商務管理系25 1企業資源規劃 erp 資訊科技與商務管理系25 2企業資源規劃 erp 主要內容銷售管理業務型別 資訊科技與商務管理系25 3企業資源規劃 erp 企業銷售管理的職能是在企業供需鏈中處於市場 客戶 與企業 製造 資訊科技與商務管理系25 5企業資源規劃 erp 銷售管理...
第3講遞推
遞推是一種應用非常廣泛的常用演算法之一,與下一章的遞迴有著密切的聯絡。本章 遞推在求解數列 數陣以及計數等應用案例方面的應用。在紛繁變幻的世界,所有事物都隨時間的流逝發生著微妙的變化。許多現象的變化是有規律可循的,這種規律往往呈現出前因後果的關係。某種現象的變化結果與緊靠它前面變化的乙個或一些結果緊...