3.1.2 臨界資源與臨界區
3.1.3 互斥實現的硬體方法
3.1.4 互斥實現的軟體方法
3.1.5 訊號量和pv操作
3.2 經典程序同步與互斥問題
3.3 and訊號量
3.4 管程
3.4.2 管程的結構
3.4.3 用管程解決實際應用
3.5 同步與互斥例項
3.5.2 windows的同步與互斥
3.5.3 linux的同步與互斥
3.6 程序通訊
3.6.2 程序通訊中的問題
3.6.3 訊息傳遞系統的實現
3.6.4 客戶端——伺服器系統通訊
為了保證系統的正常活動,使程式的執行具有可再現性,作業系統必須提供某種機制。
程序之間的協作關係包括互斥、同步和通訊
互斥是指多個程序不能同時使用同乙個資源,當某個程序使用某種資源時,其他程序必須等待。
同步是指多個程序中發生的事件存在著某種時序關係,某些程序的執行必須先於另一些程序。
程序通訊是指多個程序之間要傳遞一定量的資訊。
帶來了以下苦難:
1)全域性變數的共享充滿了危險。
2)作業系統很難最佳地管理資源的分配。
3)定位程式的錯誤是很苦難的。
按程序之間是否知道對方的存在以及程序的互動方式劃分,可分為以下情況:
1)程序之間不知道對方的存在
2)程序間接知道對方
3)程序直接得知對方
程序的併發執行使程序之間存在著互動,程序之間的互動關係包括互斥、同步和通訊。
按照程序間之間的程度:程序通訊》程序同步》程序互斥
競爭雙方本來毫無關係,但由於競爭統一資源,使二者產生了相互制約的 關係,這種制約關係就是互斥。所謂互斥就是指多個程序不能同時使用同一資源。
所謂程序同步,是指多個程序中發生的事件存在著某種時序關係,它們必須按時序執行,以共同完成一項任務。
在某段時間內只允許乙個程序使用的資源成為臨界資源,每個程序中訪問臨界資源的那段程式稱為臨界區。
幾個程序共享同一臨界資源,它們必須以互相排斥的方式使用臨界資源,即當乙個程序正在使用臨界資源且尚未使用完畢時,其他程序必須延遲對該資源的進一步操作,在當前程序使用完畢之前,不能從中插入使用這個臨界資源,否則將會造成資訊混亂和操作出錯。
即:進入區、臨界區、退出區、剩餘區
進入區:在臨界區前面增加的一段用於進行檢查臨界資源是否被訪問的**
退出區:在臨界區後面的用於將臨界區正在被訪問的標誌恢復為未被訪問標誌的**
剩餘區:程序中除了上述進入區、臨界區及退出區之外的其他部分的**
所有同步機制都必須遵循下述4個準則
1)空閒讓進。當無程序處於臨界區時,臨界資源處於空閒狀態,允許程序進入臨界區。
2)忙則等待。當已有程序進入臨界區時,臨界資源正在被訪問,其他想要進入臨界區的程序必須等待。
3)有限等待。對於要求訪問臨界資源的程序,應保證在有效的時間內進入,以免進入「死等」狀態。
4)讓權等待。當程序不能進入臨界區時,應立即釋放處理機,以免其他程序進入「忙等」狀態。
1)硬體方法分為ts指令、swap指令
2)硬體方法的優點
(1)適用範圍廣
(2)簡單
(3)支援多個臨界區
3)硬體方法的缺點
(1)程序在等待進入臨界區時,不能做到「讓權等待」
(2)由於進入臨界區的程序是從等待過程中隨機選擇的,可能造成某個程序長時間不能被選上,從而導致「飢餓」現象。
可以保證任何時刻至多只有乙個程序進入臨界區,但缺點是強制性輪流進入臨界區,不能保證「空閒讓進」。
解決了「空閒讓進」,但不能保證「忙則等待」 。
可防止兩個程序同時進入臨界區,但缺點是可能兩個程序因過分「謙讓」而都進入不了臨界區。
實現了同步機制的前兩條——「空閒讓進」和「忙則等待」 。
管程的定義是乙個共享資源的資料結構以及一組能為併發程序在其上執行的針對改資源的一組操作,這組操作能同步程序和改變管程中的資料。
管程的基本思想是把訊號量及其操作原語封裝在乙個物件內部,即將共享資源以及針對共享資源的所有操作集中在乙個模組中。管程可以用函式庫的形式實現,乙個管程就是乙個基本程式單位,可以單獨編譯。
管程的主要特徵為以下幾點:
(1)侷限於管程的共享變數(資料結構)只能被管程的過程訪問,任何外部過程都不能訪問。
(2)乙個程序通過呼叫管程的乙個過程進入管程。
(3)任何時候只能有乙個程序在管程中執行,呼叫管程的任何其他過程都被掛起,以等待管程變為可用,即管程有效地實現互斥。
管程必須使用條件變數提供對同步的支援,這些條件變數包含在管程中,並且只有在管程中才能被訪問。以下兩個函式可以操作條件變數:
a.cwait(c):呼叫程序的執行在條件c上掛起,管程現在可被另乙個程序使用
b.csignal(c):恢復在cwait上因為某些條件而掛起的程序的執行。如果有多種這樣的程序,選擇其中乙個。
按照交換資訊量的大小,可以把程序之間的通訊分為低階通訊和高階通訊。
低階通訊之中,程序之間只能傳遞狀態和整數值,訊號量機制屬於低階通訊方式。其優點是傳遞資訊的速度快,缺點是傳送的資訊量少、通訊效率低。
高階通訊之中,程序之間可以傳送任意數量的資料,傳遞的資訊量大。
高階通訊機制可分為三大類,分別為共享儲存器系統、訊息傳遞系統和管道通訊。
因實現方式不同,又分為直接通訊方式和間接通訊方式。
1)直接通訊方式
2)間接通訊方式
所謂管道,是指用於連線乙個讀程序和乙個寫程序,以實現程序之間通訊的一種共享檔案,又稱pipe檔案
為了協調雙方的通訊,管道通訊機制必須提供以下幾個方面的協調能力。
1)互斥
2)同步
3)雙方是否存在
常用的通訊方式有命名管道、套接字和遠端過程呼叫
————————————————————————————————————
大概就是這些,有些點到為止,有些就需要自己好好琢磨了,諸如經典程序同步與互斥問題,每乙個都需要自己慢慢琢磨,教材的講解和例子都有限,反正我們上網課,和課本的有出入,所以慢慢來,一步一步走踏實。
作業系統學習筆記 第三章 程序
1.1 定義 程序的兩個基本元素是程式 和 相關聯的資料集。程序控制塊,由作業系統建立和管理,程序控制塊包含充分的資訊,這樣就可以中斷乙個程序的執行,並且再後來恢復程序執行時,就好像程序從來未中斷過一樣。1.2 程序的狀態 1.2.1 兩狀態程序模型 執行態和未執行態 程序建立的原因 程序終止的原因...
作業系統 第2章 程序同步 經典程序同步問題
1.生產者 消費者問題 無論生產者 消費者使用緩衝池時應保證互斥使用 互斥訊號量mutex 生產者和消費者間交叉有序 有序的控制最根源在產品數量上。設定兩個訊號量 分別針對生產者 消費者設定不同的訊號量,empty和full分別表示緩衝池中空緩衝池和滿緩衝池 即產品 的數量。變數和訊號量 buffe...
第三章 程序排程與死鎖
程序排程的功能 程序排程的功能由作業系統的程序程式來完成 按照某種策略和演算法從就緒態程序中為當前空閒的cpu選擇在其上執行的新程序 程序排程的功能是什麼?按照某種策略和演算法從就緒態程序中選擇新程序執行。需要程序排程的時機 1.程序正常或異常結束 程序阻塞 有更高優先順序程序到來,時間片用完時都會...