程序同步: 多個程序需要相互配合共同完成一項任務。
程序互斥: 由於各程序要求共享資源,而且有些資源需要互斥使用,因此各程序間競爭使用這些資源,程序的這種關係為程序的互斥;系統中某些資源一次只允許乙個程序使用,稱這樣的資源為臨界資源或互斥資源, 而在程序中涉及到互斥資源的程式段叫臨界區.
linux下的程序通訊手段基本上是從unix平台上的程序通訊手段繼承而來的。而對unix發展做出重大貢獻的兩大主力at&t的貝爾實驗室及bsd(加州大學伯克利分校的伯克利軟體發布中心)在程序間的通訊方面的側重點有所不同。前者是對unix早期的程序間通訊手段進行了系統的改進和擴充,形成了「system v ipc」,其通訊程序主要侷限在單個計算機內;而bsd則跳過了該限制,形成了基於套介面(socket)的程序間通訊機制。而linux則把兩者的優勢都繼承了下來.
程序間通訊分類
檔案檔案鎖
管道(pipe)和命名管道(fifo)
訊號(signal)
訊息佇列
共享記憶體
訊號量互斥量
條件變數
讀寫鎖套接字(socket)
ipc物件的持續性
隨程序持續:一直存在直到開啟的最後乙個程序結束。(如pipe和fifo(程序結束,資料刪除))
隨核心持續:一直存在直到核心自舉或顯式刪除(如system v訊息佇列、共享記憶體、訊號量)
隨檔案系統持續:一直存在直到顯式刪除,即使核心自舉還存在。(posix訊息佇列、共享記憶體、訊號量如果是使用對映檔案來實現)
[ipc物件是由linux核心管理的]
死鎖是指多個程序之間相互等待對方的資源,而在得到對方資源之前又不釋放自己的資源,這樣,造成迴圈等待的一種現象。如果所有程序都在等待乙個不可能發生的事,則程序就死鎖了。
死鎖產生的四個必要條件
(1)互斥條件
程序對資源進行排它性使用,即在一段時間內某資源僅為乙個程序所占用。
(2)請求和保持條件
當程序因請求資源而阻塞時,對已獲得的資源保持不放。
(3)不可剝奪條件
程序已獲得的資源在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。
(4)環路等待條件
各個程序組成封閉的環形鏈,每個程序都等待下乙個程序所占用的資源
死鎖預防
資源一次性分配:(破壞請求和保持條件)
可剝奪資源:破壞不可剝奪條件)
資源有序分配法:(破壞迴圈等待條件)
死鎖避免
預防死鎖的幾種策略,會嚴重地損害系統效能。因此在避免死鎖時,要施加較弱的限制,從而獲得較滿意的系統效能。
由於在避免死鎖的策略中,允許程序動態地申請資源。因而,系統在進行資源分配之前預先計算資源分配的安全性。若此次分配不會導致系統進入不安全狀態,則將資源分配給程序;否則,程序等待。其中最具有代表性的避免死鎖演算法是銀行家演算法。
銀行家演算法
為保證資金的安全,銀行家規定:
(1) 當乙個顧客對資金的最大需求量不超過銀行家現有的資金時就可接納該顧客;
(2) 顧客可以分期貸款,但貸款的總數不能超過最大需求量
(3) 當銀行家現有的資金不能滿足顧客尚需的貸款數額時,對顧客的貸款可推遲支付,但總能使顧客在有限的時間裡得到貸款
(4) 當顧客得到所需的全部資金後,一定能在有限的時間裡歸還所有的資金.
哲學家就餐問題
五個哲學家圍在乙個圓桌就餐,每個人都必須拿起兩把叉子才能用餐;
哲學家就餐問題解法:
(1)服務生解法: 將服務生看作是乙個管理者, 哲學家在拿叉子之前需要徵得服務生的同意;
(2)最多4個哲學家;
(3)僅當乙個哲學家兩邊筷子都可用時才允許他拿筷子;
(4)給所有哲學家編號,奇數號的哲學家必須首先拿左邊的筷子,偶數號的哲學家則反之;
訊號量和p、v原語由dijkstra(迪傑斯特拉)提出, 迪傑斯特拉的三大貢獻: goto有害, pv原語, 迪傑斯塔拉最短路演算法;
訊號量值含義
s>0
:s表示可用資源的個數
s=0
:表示無可用資源,無等待程序
s<0
:|s|表示等待佇列中程序個數
pv操作
//訊號量定義typedef structsemaphore;
//p原語//p(semaphore *s)
wait(semaphore *s)
}
//v原語//v(semaphore *s)
signal(semaphore *s)
}
人工智慧實踐 1 概述
cnn 卷積神經網路 convolutional neural network rnn 迴圈神經網路 recurrent neural network 機器學習 統計學方法,計算機利用已有資料,得出某種模型,再利用此模型 結果 三要素 資料 演算法 算力 機器學習的主流應用 連續資料的 離散資料的分...
敏捷實踐之概述
建立團隊的節奏感 有預期的節奏,容易讓團隊形成習慣,團隊生產效率更規律。降低協同成本 能夠並行的去安排多個迭代的規劃,評審等活動,減低溝通和協同成本。簡化規劃活動 如果固定的迭代長度,當團隊人力固定的時候,團隊的生產率理論上也是固定的,有利於規劃的合理性。此外,長週期從需求完整性 頻率 工作強度上優...
容器監控實踐 Prometheus概述
prometheus是一套開源的監控 報警 時間序列資料庫的組合,起始是由soundcloud公司開發的。從2016年加入cncf,2016年6月正式發布1.0版本,2017年底發布了基於全新儲存層的2.0版本,能更好地與容器平台 雲平台配合,到2018年8月畢業,現在已經成為kubernetes的...