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