順序程式特徵
:1.順序性
2.封閉性(執行環境封閉性)
3.確定性
4.可再現性
併發程式特徵:
1.共享性
2.併發性
3.隨機性
由於程序要求共享資源,而且有些資源需要互斥使用,因此各程序間競爭使用這些資源,程序這種關係為程序的互斥。
系統中某些資源一次只允許乙個程序使用,稱這樣的資源為臨界資源或互斥資源。
在程序中涉及到互斥資源的程式段叫臨界區。
程序同步指的是多個程序需要互相配合共同完成一項任務。
資料傳輸:乙個程序需要將它的資料傳送給另乙個程序。
資源共享:多個程序之間共享同樣的資源。
通知事件:乙個程序需要向另乙個過一組程序傳送訊息,通知它(它們)發生了某種事件(如程序的終止時要通知父程序)。
程序控制: 有些程序希望完全控制另乙個程序的執行(如debug程序),此時控制程序希望能夠攔截乙個程序的所有陷入和異常,並且能夠及時知道它的狀態改變。
檔案檔案鎖
管道(pipe)和有名管道(fifo)
訊號(signal)
訊息佇列
共享記憶體
訊號量互斥量
條件變數
讀寫鎖套接字
system v ipc:
system v 訊息佇列
system v 共享記憶體
system v 訊號量
posix ipc:
訊息佇列
共享記憶體
訊號量互斥量
條件變數
讀寫鎖隨程序持續:一直存在知道開啟的最後乙個程序結束。(如pipe和fifo)
隨核心持續:一直持續直到核心自舉或顯示刪除。(如system v訊息佇列,共享記憶體,訊號量)
隨檔案系統持續:一直存在直到顯示刪除,即使核心自舉還存在。(posix訊息佇列、共享記憶體、訊號量如果是使用對映檔案來實現)。
死鎖是指多個程序之間相互等待對方的資源,而在得到對方資源之前又不釋放自己的資源,這樣,造成迴圈等待的一種現象。如果所有程序都在等待乙個不可能發生的事情,則程序就死鎖了。
死鎖產生的必要條件:
互斥條件:
程序對資源進行排它性使用,即在一段時間內某資源僅為乙個程序所占用。
請求和保持條件:
當程序已獲得的資源在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。
環路等待條件:
各個程序組成封閉的環形鏈,每個程序都等待下乙個程序所占用的資源。
防止死鎖的辦法:
資源一次性分配(破壞請求和保持條件)
可剝奪資源:破壞不可剝奪條件
資源有序分配方法:(破壞迴圈等待條件)
預防死鎖的幾種策略,會嚴重的損害系統效能。因此在避免死鎖時,要施加較弱的限制,從而獲得比較滿意的系統效能。
由於在避免死鎖的策略中,允許程序動態的申請資源。因而,系統在進行資源分配之前預先計算資源分配的安全性。若此次分配不會導致系統進入不安全狀態,則將資源分配給程序;否則,程序等待。其中最具有代表性的避免死鎖的演算法是銀行家演算法。
訊號量和p、v原語由迪傑斯特拉提出。
訊號量:
互斥:p、v在同乙個程序中。
同步:p、v在不同程序中。
訊號量及其含義:
s>0:s表示可用資源的個數
s=0:表示無可用資源,無等待程序。
s<0:|s|表示等待佇列中程序個數。
程序管理之基本概念
1就緒 ready 狀態 當程序已分配到除cpu以外的所有必要資源後,只要再獲得cpu,便可立即執行,程序這時的狀態稱為就緒狀態。在乙個系統中處於就緒狀態的程序可能有多個,所有處於就緒狀態的程序排成乙個佇列,稱為就緒佇列 2執行狀態 程序已獲得cpu,其程式正在執行。3阻塞狀態 正在執行的程序由於發...
Java NIO學習筆記之基本概念
緩衝區,以及緩衝區如何工作,是所有 i o 的基礎。所謂 輸入 輸出 講的無非就是把資料移進或移出緩衝區。程序使用 read 系統呼叫,要求其緩衝區被填滿。核心隨即向磁碟控制硬體發出命令,要求其從磁碟讀取資料。磁碟控制器把資料直接寫入核心記憶體緩衝區,這一步通過 dma 完成,無需主 cpu 協助。...
Java NIO學習筆記之基本概念
緩衝區,以及緩衝區如何工作,是所有 i o 的基礎。所謂 輸入 輸出 講的無非就是把資料移進或移出緩衝區。程序使用 read 系統呼叫,要求其緩衝區被填滿。核心隨即向磁碟控制硬體發出命令,要求其從磁碟讀取資料。磁碟控制器把資料直接寫入核心記憶體緩衝區,這一步通過 dma 完成,無需主 cpu 協助。...