• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 200, comments - 8, trackbacks - 0, articles - 0

            轉(zhuǎn)自http://www.ibm.com/developerworks/cn/linux/l-ipc/index.html,作者:鄭彥興

            linux下的進(jìn)程通信手段基本上是從Unix平臺(tái)上的進(jìn)程通信手段繼承而來(lái)的。而對(duì)Unix發(fā)展做出重大貢獻(xiàn)的兩大主力 AT&T的貝爾實(shí)驗(yàn)室及BSD(加州大學(xué)伯克利分校的伯克利軟件發(fā)布中心)在進(jìn)程間通信方面的側(cè)重點(diǎn)有所不同。前者對(duì)Unix早期的進(jìn)程間通信手 段進(jìn)行了系統(tǒng)的改進(jìn)和擴(kuò)充,形成了“system V IPC”,通信進(jìn)程局限在單個(gè)計(jì)算機(jī)內(nèi);后者則跳過(guò)了該限制,形成了基于套接口(socket)的進(jìn)程間通信機(jī)制。Linux則把兩者繼承了下來(lái),如圖 示:


             

            其中,最初Unix IPC包括:管道、FIFO、信號(hào);System V IPC包括:System V消息隊(duì)列、System V信號(hào)燈、System V共享內(nèi)存區(qū);Posix IPC包括: Posix消息隊(duì)列、Posix信號(hào)燈、Posix共享內(nèi)存區(qū)。有兩點(diǎn)需要簡(jiǎn)單說(shuō)明一下:1)由于Unix版本的多樣性,電子電氣工程協(xié)會(huì)(IEEE)開(kāi) 發(fā)了一個(gè)獨(dú)立的Unix標(biāo)準(zhǔn),這個(gè)新的ANSI Unix標(biāo)準(zhǔn)被稱為計(jì)算機(jī)環(huán)境的可移植性操作系統(tǒng)界面(PSOIX)。現(xiàn)有大部分Unix和流行版本都是遵循POSIX標(biāo)準(zhǔn)的,而Linux從一開(kāi)始就遵 循POSIX標(biāo)準(zhǔn);2)BSD并不是沒(méi)有涉足單機(jī)內(nèi)的進(jìn)程間通信(socket本身就可以用于單機(jī)內(nèi)的進(jìn)程間通信)。事實(shí)上,很多Unix版本的單機(jī) IPC留有BSD的痕跡,如4.4BSD支持的匿名內(nèi)存映射、4.3+BSD對(duì)可靠信號(hào)語(yǔ)義的實(shí)現(xiàn)等等。

            圖一給出了linux 所支持的各種IPC手段,在本文接下來(lái)的討論中,為了避免概念上的混淆,在盡可能少提及Unix的各個(gè)版本的情況下,所有問(wèn)題的討論最終都會(huì)歸結(jié)到 Linux環(huán)境下的進(jìn)程間通信上來(lái)。并且,對(duì)于Linux所支持通信手段的不同實(shí)現(xiàn)版本(如對(duì)于共享內(nèi)存來(lái)說(shuō),有Posix共享內(nèi)存區(qū)以及System V共享內(nèi)存區(qū)兩個(gè)實(shí)現(xiàn)版本),將主要介紹Posix API。

            linux下進(jìn)程間通信的幾種主要手段簡(jiǎn)介:

            1. 管道(Pipe)及有名管道(named pipe):管道可用于具有親緣關(guān)系進(jìn)程間的通信,有名管道克服了管道沒(méi)有名字的限制,因此,除具有管道所具有的功能外,它還允許無(wú)親緣關(guān)系進(jìn)程間的通信;
            2. 信號(hào)(Signal):信號(hào)是比較復(fù)雜的通信方式,用于通知接受進(jìn)程有某種事件發(fā)生,除了用于進(jìn)程間通信外,進(jìn)程還可以發(fā)送信號(hào) 給進(jìn)程本身;linux除了支持Unix早期信號(hào)語(yǔ)義函數(shù)sigal外,還支持語(yǔ)義符合Posix.1標(biāo)準(zhǔn)的信號(hào)函數(shù)sigaction(實(shí)際上,該函數(shù) 是基于BSD的,BSD為了實(shí)現(xiàn)可靠信號(hào)機(jī)制,又能夠統(tǒng)一對(duì)外接口,用sigaction函數(shù)重新實(shí)現(xiàn)了signal函數(shù));
            3. 報(bào)文(Message)隊(duì)列(消息隊(duì)列):消息隊(duì)列是消息的鏈接表,包括Posix消息隊(duì)列system V消息隊(duì)列。有足夠權(quán)限的進(jìn)程可以向隊(duì)列中添加消息,被賦予讀權(quán)限的進(jìn)程則可以讀走隊(duì)列中的消息。消息隊(duì)列克服了信號(hào)承載信息量少,管道只能承載無(wú)格式字 節(jié)流以及緩沖區(qū)大小受限等缺點(diǎn)。
            4. 共享內(nèi)存:使得多個(gè)進(jìn)程可以訪問(wèn)同一塊內(nèi)存空間,是最快的可用IPC形式。是針對(duì)其他通信機(jī)制運(yùn)行效率較低而設(shè)計(jì)的。往往與其它通信機(jī)制,如信號(hào)量結(jié)合使用,來(lái)達(dá)到進(jìn)程間的同步及互斥。
            5. 信號(hào)量(semaphore):主要作為進(jìn)程間以及同一進(jìn)程不同線程之間的同步手段。
            6. 套接口(Socket):更為一般的進(jìn)程間通信機(jī)制,可用于不同機(jī)器之間的進(jìn)程間通信。起初是由Unix系統(tǒng)的BSD分支開(kāi)發(fā)出來(lái)的,但現(xiàn)在一般可以移植到其它類Unix系統(tǒng)上:Linux和System V的變種都支持套接字。

            下面將對(duì)上述通信機(jī)制做具體闡述。

            附1:參考文獻(xiàn)[2]中對(duì)linux環(huán)境下的進(jìn)程進(jìn)行了概括說(shuō)明:

            一般來(lái)說(shuō),linux下的進(jìn)程包含以下幾個(gè)關(guān)鍵要素:

            • 有一段可執(zhí)行程序;
            • 有專用的系統(tǒng)堆棧空間;
            • 內(nèi)核中有它的控制塊(進(jìn)程控制塊),描述進(jìn)程所占用的資源,這樣,進(jìn)程才能接受內(nèi)核的調(diào)度;
            • 具有獨(dú)立的存儲(chǔ)空間

            進(jìn)程和線程有時(shí)候并不完全區(qū)分,而往往根據(jù)上下文理解其含義。


            參考資料

            • UNIX環(huán)境高級(jí)編程,作者:W.Richard Stevens,譯者:尤晉元等,機(jī)械工業(yè)出版社。具有豐富的編程實(shí)例,以及關(guān)鍵函數(shù)伴隨Unix的發(fā)展歷程。

            • linux內(nèi)核源代碼情景分析(上、下),毛德操、胡希明著,浙江大學(xué)出版社,提供了對(duì)linux內(nèi)核非常好的分析,同時(shí),對(duì)一些關(guān)鍵概念的背景進(jìn)行了詳細(xì)的說(shuō)明。

            • UNIX網(wǎng)絡(luò)編程第二卷:進(jìn)程間通信,作者:W.Richard Stevens,譯者:楊繼張,清華大學(xué)出版社。一本比較全面闡述Unix環(huán)境下進(jìn)程間通信的書(shū)(沒(méi)有信號(hào)和套接口,套接口在第一卷中)。
            国产一区二区精品久久| 国内精品久久久久久不卡影院| 狠狠色丁香久久婷婷综合图片| 蜜臀av性久久久久蜜臀aⅴ麻豆 | 久久国产色av免费看| 亚洲国产精品久久久天堂| 久久精品免费一区二区| 国产精品久久精品| 久久精品国产黑森林| 国产精品成人无码久久久久久 | 国产精品福利一区二区久久| 久久久久亚洲av成人网人人软件| 国产精品成人99久久久久91gav| 久久久久久av无码免费看大片| 亚洲欧美一级久久精品| 亚洲欧美国产精品专区久久| 日产精品久久久一区二区| 91久久精品无码一区二区毛片| 色婷婷久久综合中文久久蜜桃av| 久久久久99精品成人片直播| 久久超乳爆乳中文字幕| 午夜不卡久久精品无码免费| 久久精品国产第一区二区三区| 久久国产亚洲高清观看| 国内精品久久久久影院日本| 国产精品久久网| 91久久精品国产成人久久| 亚洲av日韩精品久久久久久a| 久久精品国产精品青草app| 伊人久久大香线蕉成人| 久久久久久综合网天天| 77777亚洲午夜久久多喷| 久久精品国产亚洲AV麻豆网站| 久久无码av三级| 色婷婷久久综合中文久久一本| 国产精品久久久久久| 思思久久99热只有频精品66| 狠狠色婷婷久久一区二区三区| 精品熟女少妇AV免费久久| 亚洲国产精品婷婷久久| 无码久久精品国产亚洲Av影片|