相關術語
程序的互動:根據程序相互之間知道對方的程度分類為如下幾個等級。
互斥的要求:
互斥的硬體支援:中斷禁用;專用機器指令(比較和交換指令,交換指令)
互斥的軟體支援:
訊號量看成乙個值為整數的變數。主要有三個操作:
訊號量可以初始化為非負數
semwait操作使訊號量減一,若值為負數,則阻塞執行semwait的程序,否則程序繼續執行
semsignal使訊號量加1,若值小於等於0,則被semwait操作阻塞的程序恢復執行。
可以初始化為0或1
semwaitb檢查訊號的值,若為0,則進行執行semwaitb就會受阻,若值為1,那麼將其改為0,然後繼續執行
semsignalb檢查是否有任何程序在該訊號上受阻,若受阻,則通過semwaitb操作,受阻的程序將會被喚醒,若沒有程序受阻,那麼值設為1
區域性變數只能被管程的過程所訪問。任何外部過程都不能訪問
乙個程序呼叫管程的過程進入管程
任何時候,只能有乙個程序在管程中執行,呼叫管程過程的其他程序都會被阻塞,以等待管程可用。
管程使用條件變數提供同步支援,這些變數包含在管程中,並且只有在管程中才能被訪問。條件變數有兩個操作
cwait(c):呼叫程序的執行在條件c上阻塞,管程現在可以被另外乙個程序呼叫
csignal(c):恢復執行在cwait之後的因某些條件被阻塞的程序。
管程優於訊號量在於:(1)所有的同步機制都被限制在管程內,不僅有利於驗證同步的正確性,並且易於檢測錯誤。(2)若乙個管道被正確編寫,則所有程序對受保護的資源的訪問都是正確的,而訊號量得保證所有訪問資源得程序被正確編寫時,資源訪問才是正確的。
程序互動的時候,必須滿足同步和通訊,需要同步去實施互斥,交換資訊來實現合作。訊息傳遞是實現程序互動的一種方式。具備兩個基本操作,也是最小操作集。
send(destination,message),程序以訊息的形式向目標程序傳送訊息。
receive(source,message),接受訊息。
阻塞的可能性:
send阻塞,receive阻塞,傳送方和接收方都將阻塞,直到完成訊息的傳遞。
send無阻塞,receive阻塞,接收方被阻塞,直到收到訊息
send無阻塞,receive無阻塞。
無阻塞send會隱藏乙個潛在的錯誤:錯誤會導致程序重**送訊息。這些訊息可能消耗系統資源,進而損害其他程序。
訊息傳遞過程中需要確定哪個程序接收訊息:使用定址操作,包括直接定址和間接定址。
直接定址:(1)對於send,引數中包含目標程序的識別符號.(2)對於receive,兩種方式,一種是要求程序顯示指定源程序,另外一種是不可能指定所期望的源程序(印表機服務)。不可能指定所希望的源程序時,通過source引數儲存相應資訊
間接定址:訊息不直接從源程序傳遞到目標程序,而是借助於信箱,它是乙個共享資料結構,該結構由臨時儲存訊息的佇列構成。
讀者/寫者:有乙個資料區被多個程序所共享,有些程序只用於從資料區中讀取資料,有些程序只像資料區中寫入資料。並滿足如下幾個條件:
讀取資料的程序是沒有數量限制的
一次只有乙個寫程序可以向資料區寫入資料
若乙個寫程序正在寫入資料,則禁止任何程序訪問資料區。
生產者/消費者問題不能看成讀者/寫者問題,因為生產者不僅僅是產生資料,它還會讀取佇列指標,確定在**寫入,以及確定快取區是否已經寫滿,消費者不僅僅是從佇列中讀取資料,它還會調整佇列指標,以保證自己移走了乙個資源。
死鎖:一組相互競爭系統資源或者進行通訊的程序間的永久阻塞,當一組程序中的每乙個程序都在等待某個事件(等待釋放請求的資源),而且僅有這組程序中被阻塞的程序才能觸發這個事件的時候。
資源分類:可重用資源和可消耗資源
可重用資源:一次僅供乙個程序安全的使用且不因使用而耗盡的資源。
可消耗資源:可被建立和銷毀的資源,通常對某種型別可消耗資源的數目沒有限制,乙個無阻塞的生產程序可以建立任意數目的這類資源
死鎖條件:
互斥:一次只有乙個程序可以使用資源。其它程序不能訪問已經分配給其他程序的資源。
占有且等待:當乙個程序等待其它程序釋放資源的時候,繼續占有這個資源
不可搶占:不能強行佔據其他程序的資源
處理死鎖的方式:預防,避免和檢測
預防:
避免:通過判斷當前的請求是否能導致死鎖,來決定是否分配資源。
程序啟動拒絕:若乙個程序的請求會導致死鎖,那麼禁止
資源分配拒絕:若乙個程序增加的資源請求會導致死鎖,那麼不允許這一資源分配。
優點:無需死鎖預防中的搶占和回滾程序。且與死鎖預防相比限制更少。
缺點:必須事先宣告每個程序請求的最大資源
程序執行順序必須沒有任何同步要求的限制
分配的資源數量必須是固定的
占有資源的時候,程序不能退出。
死鎖檢測:死鎖檢測不限制資源訪問或約束程序行為。只要有可能,被請求的資源就被分配給程序。作業系統周期性地執行乙個演算法檢測死鎖條件4(迴圈等待)
恢復:死鎖檢測到之後,需要恢復,常見方法:
直接取消所有的死鎖程序。
把死鎖程序回滾到前面定義的某些檢查點,並重新啟動所有程序。
連續取消死鎖直到不在產生死鎖
連續搶占資源直到不再存在死鎖。
總結:
posted @
2019-04-04 19:27
tingwei_chen 閱讀(
...)
編輯收藏
作業系統之高併發
高併發 high concurrency 是網際網路分布式系統架構設計中必須考慮的因素之一,它通常是指,通過設計保證系統能夠同時並行處理很多請求。高併發相關常用的一些指標有響應時間 response time 吞吐量 throughput 每秒查詢率qps query per second 併發使用...
併發程式設計 作業系統
一 作業系統的發展史 1.手工操作 穿孔卡片 對應於程式和資料的已穿孔的紙帶 或卡片 裝入輸入機 啟動輸入機 把程式和資料輸入計算機記憶體 通過控制台開關啟動程式針對資料執行 計算完畢 印表機輸出計算結果 使用者取走結果並卸下紙帶 或卡片 缺點 使用者獨佔全機。不會出現因cpu資源已被其他使用者占用...
併發程式設計 作業系統 併發 簡介
1,作業系統介紹 現代的作業系統中有 分時技術 多道技術 實時技術.多道技術 可以在計算機中同時存在多個程式,當乙個程式在進行io操作的時候,另外乙個程式可以使用cpu 分時技術 在多道技術的基礎上 反而降低了cpu的利用率,但是提高了使用者體驗 特點 多路性.若干個使用者同時使用一台計算機.圍觀上...