亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        淺析Linux進(jìn)程通信的幾種方式及其比較

        2012-12-31 11:59:35曹鵬
        中國新技術(shù)新產(chǎn)品 2012年2期
        關(guān)鍵詞:信號量共享內(nèi)存信息量

        曹鵬

        (解放軍國際關(guān)系學(xué)院,江蘇 南京 210039)

        1.進(jìn)程通信的基本概念

        進(jìn)程間通信(IPC)指的是至少兩個進(jìn)程間傳送數(shù)據(jù)或者信號的一些技術(shù)和方法,進(jìn)程是計(jì)算機(jī)系統(tǒng)分配資源的基本單位,每個進(jìn)程都有自己的一部分獨(dú)立的系統(tǒng)資源,彼此是隔離的。為了能使不同的進(jìn)程互相訪問資源并進(jìn)行協(xié)調(diào)工作,才有了進(jìn)程之間的通信。

        2.進(jìn)程通信的分類

        操作系統(tǒng)中進(jìn)程間傳遞的信息量有多有少,因此根據(jù)進(jìn)程通信時信息量大小的不同,可以將進(jìn)程通信劃分為兩大類型,一種類型主要用于傳遞進(jìn)程之間同步、互斥、終止、掛起等控制信息的傳遞,由于進(jìn)程互斥與同步交換的信息量較少,并且每次通信傳遞的信息量固定且效率較低,因此稱這兩種通信方式為低級通信方式,主要方式有信號量。另一種類型在進(jìn)程間以較高的效率傳送大量數(shù)據(jù),被稱為高級通信方式,主要方式有管道,共享內(nèi)存和消息隊(duì)列。下面對這四種通信方式進(jìn)行簡單的論述。

        3.信號量

        信號量也叫信號燈,是一個確定的二元組(S,Q),其中S是個具有非負(fù)初置的整形變量,表示的是臨界資源的實(shí)體。信號量的值有以下兩種情況:

        1)代表可用資源的數(shù)量,此時Q 的隊(duì)列為空。

        2)代表由于等待此種資源而被阻塞的進(jìn)程的數(shù)量,也就是Q隊(duì)列中進(jìn)程的個數(shù)。

        信號量的值僅能由P、V操作進(jìn)行改變,其中p操作和v操作是不可中斷的程序段,稱為原語操作,它是典型的同步機(jī)制之一。每執(zhí)行一次P操作表示分配一個該類資源給執(zhí)行P操作的進(jìn)程,因此P操作將信號量的值減1,當(dāng)信號量的值小于0時,表示已經(jīng)沒有這類資源可供分配了,所以請求資源的進(jìn)程將被阻塞而被插入到Q的等待隊(duì)列當(dāng)中。此時,信號量的絕對值等于Q隊(duì)列中進(jìn)程的個數(shù),即等待分配該類資源的進(jìn)程數(shù)。執(zhí)行一次V操作意味著進(jìn)程釋放出一個該類可用資源,因而V操作是將信號量的值加1。因信號量的值小于等于0表示在該信號量的等待隊(duì)列中有請求該類型而被阻塞的進(jìn)程,因而應(yīng)把該信號量等待隊(duì)中的隊(duì)首的進(jìn)程喚醒,即進(jìn)程的狀態(tài)由阻塞狀態(tài)變?yōu)榛顒泳途w狀態(tài)。

        信號量的創(chuàng)建:Linux系統(tǒng)中使用semget(key,nSemes,flag)來創(chuàng)建一個信號量,key是標(biāo)識信號量的關(guān)鍵字,nSemes表示創(chuàng)建信號量的個數(shù),flag表示為信號量存取權(quán)標(biāo)志與建立標(biāo)志。

        信號量的操作:Linux系統(tǒng)中采用semop(semid,sops,nsops)來實(shí)現(xiàn)對信號量的操作,semid為關(guān)鍵字值,由semget返回得來,第二個參數(shù)是指向?qū)⒁僮鞯臄?shù)組的指針,nsops為數(shù)組sops的大小。

        4.管道通信方式

        管道是Linux支持的最初Unix IPC形式之一,當(dāng)兩個進(jìn)程利用管道進(jìn)行通信時,發(fā)送信息的進(jìn)程稱為寫進(jìn)程,接收信息的進(jìn)程稱為讀進(jìn)程。管道通信方式的中間介質(zhì)就是文件,通常稱這種文件為管道文件.它就像管道一樣將一個寫進(jìn)程和一個讀進(jìn)程連接在一起,實(shí)現(xiàn)兩個進(jìn)程之間的通信。寫進(jìn)程通過寫入端(發(fā)送端)往管道文件中寫入信息,讀進(jìn)程通過讀出端(接收端)從管道文件中讀取信息。管道具有如下特點(diǎn):

        1)管道是半雙工的,數(shù)據(jù)只能向一個方向流動,數(shù)據(jù)只能由寫的一方向讀得一方流動。

        2)單獨(dú)構(gòu)成一種獨(dú)立的文件系統(tǒng):管道對于管道兩端的進(jìn)程而言,就是一個文件,成為管道文件,但它不屬于某種文件系統(tǒng),而是自立門戶,單獨(dú)構(gòu)成一種文件系統(tǒng),并且只存在與內(nèi)存中。

        3)數(shù)據(jù)的讀出和寫入:管道建立時,通信兩端的任務(wù)都是被固定了的,也就是說,一端只能用于讀,而另一端只能用于寫,寫入的內(nèi)容每次都添加在管道緩沖區(qū)的末尾,并且每次都是從緩沖區(qū)的頭部讀出數(shù)據(jù)。

        5.消息隊(duì)列

        消息隊(duì)列的基本思想是:系統(tǒng)管理一組消息緩沖區(qū),并稱之為消息緩沖池,其中每個消息緩沖區(qū)存放一條消息。消息實(shí)際上就是一組信息。當(dāng)一個進(jìn)程要發(fā)送消息時,首先向系統(tǒng)申請一個消息緩沖區(qū),寫入消息后將其連接到接受進(jìn)程PCB所指示的消息隊(duì)列。接受進(jìn)程在適當(dāng)?shù)臅r候從其消息隊(duì)列中取得消息,并立即釋放該消息緩沖區(qū),交回給系統(tǒng)管理。

        消息隊(duì)列就是一個消息的鏈表。就是把消息看作一個記錄,并且這個記錄具有特定的格式以及特定的優(yōu)先級。對消息隊(duì)列有寫權(quán)限的進(jìn)程可以按照一定的規(guī)則添加新消息;對消息隊(duì)列有讀權(quán)限的進(jìn)程則可以從消息隊(duì)列中讀出消息。

        Linux采用消息隊(duì)列的方式來實(shí)現(xiàn)消息傳遞。這種消息的發(fā)送方式是:發(fā)送方不必等待接收方檢查它所收到的消息就可以繼續(xù)工作下去,而接收方如果沒有收到消息也不需等待。這種通信機(jī)制相對簡單,但是應(yīng)用程序使用起來就需要使用相對復(fù)雜的方式來應(yīng)付了。新的消息總是放在隊(duì)列的末尾,接收的時候并不總是從頭來接收,可以從中間來接收。

        Linux中定義了一個名為msgbuf的數(shù)據(jù)結(jié)構(gòu)來表示消息,并利用MSGGET()來創(chuàng)建一個消息隊(duì)列,然后返回這個消息隊(duì)列的標(biāo)識號,然后調(diào)用MSGSND()向一個消息隊(duì)列發(fā)送一個消息,接收進(jìn)城通過MSGRCV()來從一個消息隊(duì)列中收到一個消息。在通信雙方進(jìn)行通信的過程中,系統(tǒng)可以利用MSGCTL()在消息隊(duì)列上執(zhí)行指定的操作,更具參數(shù)的不同和權(quán)限的不同,可以執(zhí)行檢索、刪除等得操作。

        共享的消息隊(duì)列是一個臨界資源,針對同一消息隊(duì)列的諸發(fā)送和接收進(jìn)程必須保證互斥進(jìn)入,這種進(jìn)程間的同步和互斥是由系統(tǒng)提供的系統(tǒng)調(diào)用自動實(shí)現(xiàn)的,所以用戶在使用時不需要再考慮它們之間的同步關(guān)系,非常方便。

        6.共享內(nèi)存

        除上述幾種通信方式之外,Linux還提供了正文段,也就是程序段的共享,當(dāng)若干進(jìn)程需要對公共數(shù)據(jù)區(qū)中的數(shù)據(jù)進(jìn)行頻繁操作時,共享內(nèi)存的通信方式是一種很有用的通信機(jī)制,而且是以一種效率較高的進(jìn)程通信機(jī)制。其基本思想是:系統(tǒng)管理一組共享內(nèi)存控制塊,當(dāng)用戶程序進(jìn)程需要使用共享內(nèi)存段時,使用SHMGET()系統(tǒng)調(diào)用申請一個共享內(nèi)存段,系統(tǒng)位置分配存儲空間和建立有關(guān)的數(shù)據(jù)結(jié)構(gòu),并返回該共享內(nèi)存段的標(biāo)識符shmid,然后系統(tǒng)調(diào)用SHMAT()將由標(biāo)識符shmid標(biāo)識的共享內(nèi)存段附加到進(jìn)程地址空間,一旦將一個共享內(nèi)存段連接到進(jìn)程邏輯地址空間后,進(jìn)程可以像訪問其私有數(shù)據(jù)段一樣存取該共享內(nèi)存段中的數(shù)據(jù)。當(dāng)不在使用共享內(nèi)存時,由系統(tǒng)調(diào)用SHMDT()將由參數(shù)定位的共享內(nèi)存段脫離調(diào)用進(jìn)程的數(shù)據(jù)段。在此期間,可以使用系統(tǒng)調(diào)用SHMCTL()查詢由shmid標(biāo)識的共享內(nèi)存段的狀態(tài)和設(shè)置有關(guān)參數(shù),對共享內(nèi)存段進(jìn)行控制。

        共享內(nèi)存通信與消息緩沖通信有很多類似之處:都是使用一個id來標(biāo)識一個IPC目標(biāo),通過使用 GET(msgget,shmget)來建立一個IPC目標(biāo),都要進(jìn)行權(quán)限檢查等來實(shí)現(xiàn)通信。不同點(diǎn)是:共享內(nèi)存一旦附接后就作為進(jìn)程地址空間的一部分提供給進(jìn)程使用對于該共享內(nèi)存的讀寫操作如同對進(jìn)程私有的緩沖區(qū)一樣。操作系統(tǒng)不再關(guān)心進(jìn)程間是如何使用這個共享內(nèi)存,更無法進(jìn)行干預(yù)。

        7.各種通信方式的比較和優(yōu)缺點(diǎn)。

        如果用戶傳遞的信息較少?;蚴切枰ㄟ^信號來觸發(fā)某些行為,信號量不失為一種簡捷有效的進(jìn)程間通信方式。但若是進(jìn)程間要求傳遞的信息量比較大或者進(jìn)程間存在交換數(shù)據(jù)的要求,就需要考慮高級通信機(jī)制。無名管道簡單方便。但局限于單向通信的工作方式,并且只能在創(chuàng)建它的進(jìn)程及其子孫進(jìn)程之間實(shí)現(xiàn)管道的共享。有名管道雖然可以提供給任意關(guān)系的進(jìn)程使用,但是由于其長期存在于系統(tǒng)之中,使用不當(dāng)容易出錯.所以普通用戶一般不建議使用。

        消息緩沖可以不再局限于父子進(jìn)程,而允許任意進(jìn)程通過共享消息隊(duì)列來實(shí)現(xiàn)進(jìn)程間通信,并由系統(tǒng)調(diào)用函數(shù)來實(shí)現(xiàn)消息發(fā)送和接收之間的同步,從而使得用戶在使用消息緩沖進(jìn)行通信時不再需要考慮同步問題,使用方便,但是信息的復(fù)制需要額外消耗CPU的時間,不適宜于信息量大或操作頻繁的場合。共享內(nèi)存針對消息緩沖的缺點(diǎn)改而利用內(nèi)存緩沖區(qū)直接交換信息,無須復(fù)制,快捷、信息量大是其優(yōu)點(diǎn)。但是共享內(nèi)存的通信方式是通過將共享的內(nèi)存緩沖區(qū)直接附加到進(jìn)程的虛擬地址空間中來實(shí)現(xiàn)的。

        不同的進(jìn)程通信方式有不同的優(yōu)點(diǎn)和缺點(diǎn)。因此,對于不同的應(yīng)用問題,要根據(jù)問題本身的情況來選擇進(jìn)程間的通信方式。

        [1]史杏榮,楊壽寶.操作系統(tǒng)原理與實(shí)現(xiàn)技術(shù)[M].北京:中國科學(xué)技術(shù)大學(xué),1997.

        [2]陸靜,胡明慶,幾種進(jìn)程通信方法的研究和比較[J].福建電腦,2007.

        [3]Tanenbaum.Modern Operating Systems[M].2009年.

        [4]W.Richard Stevens.UNIX高級環(huán)境編程[M].北京:機(jī)械工業(yè)出版社,2000年.

        猜你喜歡
        信號量共享內(nèi)存信息量
        基于STM32的mbedOS信號量調(diào)度機(jī)制剖析
        通過QT實(shí)現(xiàn)進(jìn)程間的通信
        Nucleus PLUS操作系統(tǒng)信號量機(jī)制的研究與測試
        基于信息理論的交通信息量度量
        基于PCI總線的多處理器協(xié)同機(jī)制研究
        如何增加地方電視臺時政新聞的信息量
        新聞傳播(2016年11期)2016-07-10 12:04:01
        基于多尺度互信息量的數(shù)字視頻幀篡改檢測
        基于聯(lián)合熵和交互信息量的視頻篡改檢測
        QNX下PEX8311多路實(shí)時數(shù)據(jù)采集的驅(qū)動設(shè)計(jì)
        電子世界(2014年21期)2014-04-29 06:41:36
        一種高效RTAI 共享內(nèi)存管理層的研究與實(shí)現(xiàn)*
        亚洲欧洲久久久精品| 女人脱了内裤趴开腿让男躁| 亚洲精品无码专区在线| 欧美亚洲国产精品久久高清| 国产视频不卡在线| 精品久久人妻av中文字幕| 性刺激的大陆三级视频| 亚洲av综合久久九九| 亚洲精品免费专区| 国产精品一区二区av白丝在线| 久久国产精品亚洲我射av大全| 男女裸体做爰视频高清| 色 综合 欧美 亚洲 国产| 免费一级肉体全黄毛片| 少妇隔壁人妻中文字幕| 插上翅膀插上科学的翅膀飞| 精品人妻无码一区二区三区蜜桃一| a毛片全部免费播放| 国产精品一区二区日韩精品| 亚洲一区二区三区日本久久九 | 秋霞在线视频| 日本不卡在线视频二区三区| 国产精品自产拍在线18禁| 手机在线看片在线日韩av| 精品国产av一区二区三区四区 | 中文字幕亚洲精品久久| 欧美极品少妇无套实战| 亚洲最大无码AV网站观看| 成人影院视频在线播放| 粗大的内捧猛烈进出小视频| 四川丰满少妇被弄到高潮| 久久久久亚洲AV无码专| 亚洲一区二区三区在线| 国产亚洲无码1024| 偷拍美女一区二区三区视频| 日韩亚洲一区二区三区四区| 成人毛片一区二区| 人妻无码AⅤ不卡中文字幕| 亚洲一区中文字幕一区| 最美女人体内射精一区二区| 无码午夜人妻一区二区三区不卡视频|