操作系統精髓與設計原理讀書筆記5
進程同步互斥
進程的並發執行:並發是所有問題產生的基礎,並發是操作系統設計的基礎
進程互斥
由於各進程要求使用共享資源(變數、文件等),而這些資源需要排他性使用
各進程之間競爭使用這些資源
—— 這一關係稱為進程互斥
臨界資源:critical resource
系統中某些資源一次只允許一個進程使用,稱這樣的資源為臨界資源或互斥資源或共享變數
臨界區(互斥區):critical section(region)
各個進程中對某個臨界資源(共享變數)實施操作的程序片段
軟體方案 Dekker解法、Peterson解法
硬體方案 屏蔽中斷、TSL(XCHG)指令
進程同步:synchronization
指系統中多個進程中發生的事件存在某種時序關係,需要相互合作,共同完成一項任務
具體地說,一個進程運行到某一點時,要求另一夥伴進程為它提供消息,在未獲得消息之前,該進程進入阻塞態,獲得消息後被喚醒進入就緒態
生產者/消費者問題
問題描述:
一個或多個生產者生產某種類型的數據放置在緩衝區中
有消費者從緩衝區中取數據,每次取一項
只能有一個生產者或消費者對緩衝區進行操作
要解決的問題:
當緩衝區已滿時,生產者不會繼續向其中添加數據;
當緩衝區為空時,消費者不會從中移走數據
避免忙等待
睡眠 與 喚醒 操作(原語)
讀者寫者問題
問題描述:
多個進程共享一個數據區,這些進程分為兩組:
讀者進程:只讀數據區中的數據
寫者進程:只往數據區寫數據
要求滿足條件:
允許多個讀者同時執行讀操作
不允許多個寫者同時操作
不允許讀者、寫者同時操作
讀者優先
如果讀者執行:
無其他讀者、寫者,該讀者可以讀
若已有寫者等,但有其他讀者正在讀,則該讀者也可以讀
若有寫者正在寫,該讀者必須等
如果寫者執行:
無其他讀者、寫者,該寫者可以寫
若有讀者正在讀,該寫者等待
若有其他寫者正在寫,該寫者等待
信號量及PV操作
一個特殊變數
用於進程間傳遞信息的一個整數值
定義如下:
struc semaphore
{
int count;
queueType queue;
}
信號量說明:semaphore s;
對信號量可以實施的操作:初始化、P和V(P、V分別是荷蘭語的test(proberen)和increment(verhogen))
經典的IPC問題
推薦閱讀:
※如何減少電腦中病毒的幾率?
※谷歌自研Fuchsia OS將兼容安卓:亦可在x86體系運行
※銀河麒麟系統的前世今生
※OS 實驗二 | Linux 內核模塊編程
※Linux性能分析工具