0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺析嵌入式Linux中進程間的幾種通信方式

Q4MP_gh_c472c21 ? 來源:未知 ? 作者:胡薇 ? 2018-08-20 09:03 ? 次閱讀

線程間通信:由于多線程共享地址空間和數(shù)據(jù)空間,所以多個線程間的通信是一個線程的數(shù)據(jù)可以直接提供給其他線程使用,而不必通過操作系統(tǒng)

所以線程間通信和同步的方式主要有鎖、信號、信號量進程間的通信則不同,它的數(shù)據(jù)空間的獨立性決定了它的通信相對比較復(fù)雜,需要通過操作系統(tǒng)。

通信機制主要有:管道、有名管道、消息隊列、信號量、共享空間、信號、套接字(socket)。

下面簡單介紹下進程間的幾種通信方式:

管道:它傳遞數(shù)據(jù)是單向性的,只能從一方流向另一方,也就是一種半雙工的通信方式;只用于有親緣關(guān)系的進程間的通信,親緣關(guān)系也就是 父子進程或兄弟進程;沒有名字并且大小受限,傳輸?shù)氖菬o格式的流,所以兩進程通信時必須約定好數(shù)據(jù)通信的格式。

管道它就像一個特殊的文件,但這個文件之存在于內(nèi)存中,在創(chuàng)建管道時,系統(tǒng)為管道分配了一個頁面作為數(shù)據(jù)緩沖區(qū),進程對這個數(shù)據(jù)緩沖區(qū)進行讀寫,以此來完成通信。其中一個進程只能讀一個只能寫,所以叫半雙工通信,為什么一個只能讀一個只能寫呢?因為寫進程是在緩沖區(qū)的末尾寫入,讀進程是在緩沖區(qū)的頭部讀取,他們各自 的數(shù)據(jù)結(jié)構(gòu)不同,所以功能不同。

有名管道:看見這個名字就能知道個大概了,它于管道的不同的是它有名字了。這就不同與管道只能在具有親緣關(guān)系的進程間通信了。

它提供了一個路徑名與之關(guān)聯(lián),有了自己的傳輸格式。有名管道和管道的不同之處還有一點是,有名管道是個設(shè)備文件,存儲在文件系統(tǒng)中,沒有親緣關(guān)系的進程也可以訪問,但是它要按照先進先出的原則讀取數(shù)據(jù)。同樣也是單雙工的。

共享內(nèi)存:就是分配一塊能被其他進程訪問的內(nèi)存。共享內(nèi)存可以說是最有用的進程間通信方式,也是最快的IPC形式。首先說下在使用共享內(nèi)存區(qū)前,必須通過系統(tǒng)函數(shù)將其附加到進程的地址空間或說為映射到進程空間。兩個不同進程A、B共享內(nèi)存的意思是,同一塊物理內(nèi)存被映射到進程A、B各自的進程地址空間。進程A可以即時看到進程B對共享內(nèi)存中數(shù)據(jù)的更新,反之亦然。

由于多個進程共享同一塊內(nèi)存區(qū)域,必然需要某種同步機制,互斥鎖和信號量都可以。采用共享內(nèi)存通信的一個顯而易 見的好處是效率高,因為進程可以直接讀寫內(nèi)存,而不需要任何數(shù)據(jù)的拷貝。對于像管道和消息隊列等通信方式,則需要在內(nèi)核和用戶空間進行四次的數(shù)據(jù)拷貝,而共享內(nèi)存則只拷貝兩次數(shù)據(jù)[1]:一次從輸入文件到共享內(nèi)存區(qū),另一次從共享內(nèi)存區(qū)到輸出文件。實際上,進程之間在共享內(nèi)存時,并不總是讀寫少量數(shù)據(jù)后就 解除映射,有新的通信時,再重新建立共享內(nèi)存區(qū)域。而是保持共享區(qū)域,直到通信完畢為止,這樣,數(shù)據(jù)內(nèi)容一直保存在共享內(nèi)存中,并沒有寫回文件。共享內(nèi)存 中的內(nèi)容往往是在解除映射時才寫回文件的。因此,采用共享內(nèi)存的通信方式效率是非常高的。

信號:信號是在軟件層次上對中斷機制的一種模擬,在原理上,一個進程收到一個信號與處理器收到一個中斷請求可以說是一樣的。

信號是異步的,一個進程不必通過任何操作來等待信號的到達,事實上,進程也不知道信號到底什么時候到達。信號是進程間通信機制中唯一的異步通信機制,可以看作是異步通知,通知接收信號的進程有哪些事情發(fā)生了。信號機制經(jīng)過POSIX實時擴展后,功能更加強大,除了基本通知功能外,還可以傳遞附加信息。信號事件的發(fā)生有兩個來源:硬件來源(比如我們按下了鍵盤或者其它硬件故障);軟件來源。信號分為可靠信號和不可靠信號,實時信號和非實時信號。進程有三種方式響應(yīng)信號1.忽略信號2.捕捉信號3.執(zhí)行缺省操作。

信號量:也可以說是一個計數(shù)器,常用來處理進程或線程同步的問題,特別是對臨界資源的訪問同步問題。臨界資源:為某一時刻只能由一個進程或線程操作的資源,當信號量的值大于或等于0時,表示可以供并發(fā)進程訪問的臨界資源數(shù),當小于0時,表示正在等待使用臨界資源的進程數(shù)。更重要的是,信號量的值僅能由PV操作來改變。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 信號
    +關(guān)注

    關(guān)注

    11

    文章

    2774

    瀏覽量

    76552
  • 共享內(nèi)存
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    8304

原文標題:盤點嵌入式Linux中進程間通信和線程間通信的幾種方式

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    嵌入式Linux學(xué)習(xí)步驟

    內(nèi)存 任務(wù)管理 API 了解Linux系統(tǒng)任務(wù)管理機制 熟悉進程通信幾種方式 熟悉
    發(fā)表于 05-04 15:01

    Linux進程通信方式-管道

    Linux進程通信方式-管道分享到: 本文關(guān)鍵字: linux 管道
    發(fā)表于 08-29 15:29

    Linux進程通信

    華清遠見嵌入式linux學(xué)習(xí)資料《Linux進程通信》,通過前面的學(xué)習(xí),讀者已經(jīng)知道了
    發(fā)表于 09-04 10:07

    嵌入式Linux學(xué)習(xí)步驟

    API 了解Linux系統(tǒng)任務(wù)管理機制 熟悉進程通信幾種方式 熟悉
    發(fā)表于 03-24 10:41

    嵌入式linux學(xué)習(xí)步驟

    一個守護進程程序 sleep系統(tǒng)調(diào)用任務(wù)管理、同步與通信 Linux任務(wù)概述任務(wù)調(diào)度 管道 信號 共享內(nèi)存 任務(wù)管理 API 了解Linux系統(tǒng)任務(wù)管理機制 熟悉
    發(fā)表于 09-12 14:23

    嵌入式學(xué)習(xí)路線 嵌入式學(xué)習(xí)路線詳解

    ,編寫一個守護進程程序,sleep系統(tǒng)調(diào)用任務(wù)管理、同步與通信Linux任務(wù)概述任務(wù)調(diào)度管道、信號共享內(nèi)存,任務(wù)管理 API,了解Linux系統(tǒng)任務(wù)管理機制,熟悉
    發(fā)表于 03-17 18:05

    嵌入式linux學(xué)習(xí)步驟

    幾種方式 熟悉嵌入式Linux中的任務(wù)同步與通信編寫一個簡單的管道程序?qū)崿F(xiàn)文件傳輸 編寫一個
    發(fā)表于 10-25 10:12

    嵌入式Linux學(xué)習(xí)步驟

    調(diào)度 管道 信號 共享內(nèi)存 任務(wù)管理 API 了解Linux系統(tǒng)任務(wù)管理機制 熟悉進程通信幾種方式
    發(fā)表于 07-03 00:56

    初學(xué)者嵌入式linux系統(tǒng)的學(xué)習(xí)步驟

    /O 編寫串口通信程序 編寫多串口通信程序7、嵌入式系統(tǒng)中多進程程序設(shè)計Linux系統(tǒng)進程概述
    發(fā)表于 01-18 10:34

    嵌入式設(shè)計應(yīng)具備的基本技能

    編寫一個守護進程程序 sleep系統(tǒng)調(diào)用任務(wù)管理同步與通信Linux任務(wù)概述任務(wù)調(diào)度 管道 信號 共享內(nèi)存 任務(wù)管理 API 了解Linux系統(tǒng)任務(wù)管理機制 熟悉
    發(fā)表于 11-04 07:39

    嵌入式linux學(xué)習(xí)步驟

    幾種方式 熟悉嵌入式Linux中的任務(wù)同步與通信編寫一個簡單的管道程序?qū)崿F(xiàn)文件傳輸 編寫一個
    發(fā)表于 09-08 11:51

    常用的進程通信主要有哪幾種方式

    這里說的嵌入式系統(tǒng),是嵌入式linux系統(tǒng),嵌入式linux系統(tǒng)其實和電腦端的linux系統(tǒng)一樣
    發(fā)表于 11-08 07:38

    嵌入式linux系統(tǒng)的學(xué)習(xí)步驟

    管理機制 熟悉進程通信幾種方式 熟悉嵌入式Linux
    發(fā)表于 07-23 13:59 ?964次閱讀

    Linux進程通信方式——管道

    管道是Linux中進程通信的一種方式,它把一個程序的輸出直接連接到另一個程序的輸入。Linux
    發(fā)表于 06-01 09:13 ?1379次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>進程</b><b class='flag-5'>間</b><b class='flag-5'>通信</b><b class='flag-5'>方式</b>——管道

    談?wù)?b class='flag-5'>嵌入式系統(tǒng)中多進程設(shè)計與進程通信

    這里說的嵌入式系統(tǒng),是嵌入式linux系統(tǒng),嵌入式linux系統(tǒng)其實和電腦端的linux系統(tǒng)一樣
    發(fā)表于 11-03 16:51 ?9次下載
    談?wù)?b class='flag-5'>嵌入式</b>系統(tǒng)中多<b class='flag-5'>進程</b>設(shè)計與<b class='flag-5'>進程</b><b class='flag-5'>通信</b>