協作程序能與系統內的其他執行程序相互影響。協作程序或能直接共享邏輯位址空間(即**和資料),或能通過檔案或訊息來共享資料,然而共享資料的併發訪問可能導致資料的不一致
共享資料併發/並行訪問:
例:有界緩衝
防止競爭條件方法:併發程序同步或互斥
互斥若能保證諸程序互斥進入關聯的臨界區,可實現對臨界資源的互斥訪問
臨界區問題:設計乙個協議以便協作程序
進入區:在進入臨界區前,每個程序應請求許可,實現這一請求**區段為進入區
退出區:臨界區之後可以有退出區
剩餘區:其他**為剩餘區
處理作業系統臨界區問題的兩種常用方法:
臨界區使用準則
有空讓進(progress)
有限等待(bounded waiting)
訪問臨界區
自旋鎖:忙等待,當有乙個程序在臨界區中,任何其他程序在進入臨界區時必須連續迴圈地呼叫acquire(),因為程序不停地旋轉,以等待鎖變得可用
訊號量-軟體解決方案
二值訊號量:
當程序使用資源時,要對訊號量執行wait操作;當程序釋放資源時,要對訊號量執行signal操作;當訊號量為0時,所有資源都在使用中,需要使用資源的程序將會阻塞,直到計數器大於0
整型訊號量:
整型訊號量的問題:忙等(解決方案,修改訊號量操作(記錄型訊號量)):
理解wait()(p操作)和signal()(v操作)這兩個原子操作
注意訊號量初值
訊號量使用中注意的問題
例:概念
互斥分析
消費者(多個):
劃分臨界區
增加互斥機制
同步分析
生產者與消費者
同步訊號量定義概念
問題詳述
寫者:方案一:
方案二:
第二讀者-作者問題(寫者優先):一旦作者就緒,那麼作者會盡快可能地執行;如果有乙個作者等待訪問物件,那麼不會有新的讀者可以開始讀
有些系統將讀者-寫者問題及其解答進行了抽象,從而提供了讀寫鎖
概念解決方法
死鎖解決措施:
僅當乙個哲學家左右兩邊的筷子都可用時,才允許他拿起筷子(筷子要一起拿)
給所有哲學家編號,奇數號的哲學家必須首先拿左邊的筷子,偶數號的哲學家則反之(效率低,並不知道程序會申請什麼資源)
問題:
解決方法:
訊號量是分布式;管程是集中式
同步:條件變數問題:
存在可能:
管程內程序p喚醒q後
condition x
x.wait()
x.signal()
作業系統概念第六章 同步
多個程序併發訪問和操作同一資料並且執行結果與訪問順序有關,稱為競爭條件。為防止出現競爭條件,需確保一次只有乙個程序可以運算元據,為此要求這些程序按照一定方式來進行同步。同步的解決方案1 互斥鎖 當乙個程序試圖獲取不可用的鎖時,它會阻塞,知道鎖被釋放。當有乙個程序在臨界區時,任何其他程序在進入臨界區時...
作業系統 第六章 程序同步
實驗 經典同步問題之讀者寫者問題 關於前面討論過的共享記憶體問題,為了讓它能夠儲存buffersize個元素,我們修改其 如下。生產者 while true 消費者 while true 乍一看,消費者和生產者 都正確,但是當這兩段 併發執行的時候就有問題了。併發時,兩個程序會同時操作counter...
作業系統第六章 檔案管理
檔案在檔案系統中是乙個基本的管理單元,這個管理單元必然有一組屬性 資料形式 訪問控制屬性 組織形式和處理方法 作業系統中的各類檔案 管理檔案的軟體,以及管理檔案所涉及到的資料結構等資訊的集合 物件及其屬性 對物件操縱和管理的軟體集合 檔案系統的介面 close也會出錯,乙個是資料還沒有寫進乙個是檔案...