进程间基于共享存储区的通信_IPC(进程间通讯):inter process communication
管道
(1)管道是半雙工的,數據只能向一個方向流動;需要雙方通信時,需要建立起兩個管道;
(2)只能用于父子進程或者兄弟進程之間(具有親緣關系的進程);
(3)**單獨構成一種獨立的文件系統:**管道對于管道兩端的進程而言,就是一個文件,但它不是普通的文件,它不屬于某種文件系統,而是自立門戶,單獨構成一種文件系統,并且只存在與內存中。
(4)數據的讀出和寫入:一個進程向管道中寫的內容被管道另一端的進程讀出。寫入的內容每次都添加在管道緩沖區的末尾,并且每次都是從緩沖區的頭部讀出數據。
有名管道
(1)緩存文件創建在文件系統中。所以通過FIFO不相關的進程也能交換數據。
信號
1.信號是Linux系統中用于進程間互相通信或者操作的一種機制,信號可以在任何時候發給某一進程,而無需知道該進程的狀態。
2.如果該進程當前并未處于執行狀態,則該信號就有內核保存起來,直到該進程恢復執行并傳遞給它為止。
3.如果一個信號被進程設置為阻塞,則該信號的傳遞被延遲,直到其阻塞被取消時信號才被傳遞給進程。
信號來源
信號是軟件層次上對中斷機制的一種模擬,是一種異步通信方式,信號可以在用戶空間進程和內核之間直接交互,內核可以利用信號來通知用戶空間的進程發生了哪些系統事件,信號事件主要有兩個來源:
- 硬件來源:用戶按鍵輸入Ctrl+C退出、硬件異常如無效的存儲訪問等。
- 軟件來源:終止進程信號、其他進程調用kill函數、軟件異常產生信號。
消息隊列
消息隊列中的每條消息通常具有以下屬性:
- 一個表示優先級的整數;
- 消息的數據部分的長度;
- 消息數據本身
共享內存
1.共享內存的使用需要用戶自己保證同步 2.共享內存是最快的IPC方式 注: Linux下有三種共享內存的IPC技術:System V共享內存、共享文件映射(mmap)、POSIX共享內存。
套接字
1.可以在單機進行也可以跨網絡進行。 2.socket 內存通信屬于網絡層和應用層之間的橋梁。
信號量
工作原理
由于信號量只能進行兩種操作等待和發送信號,即P(sv)和V(sv),他們的行為是這樣的: P(sv):如果sv的值大于零,就給它減1;如果它的值為零,就掛起該進程的執行 V(sv):如果有其他進程因等待sv而被掛起,就讓它恢復運行,如果沒有進程因等待sv而掛起,就給它加1.
舉個例子,就是 兩個進程共享信號量sv,一旦其中一個進程執行了P(sv)操作,它將得到信號量,并可以進入臨界區,使sv減1。而第二個進程將被阻止進入臨界區,因為 當它試圖執行P(sv)時,sv為0,它會被掛起以等待第一個進程離開臨界區域并執行V(sv)釋放信號量,這時第二個進程就可以恢復執行。
總結
以上是生活随笔為你收集整理的进程间基于共享存储区的通信_IPC(进程间通讯):inter process communication的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业补充医疗保险政策是什么
- 下一篇: 实现tinyc语言的扫描程序_适合编程小