999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2012-12-31 11:59:35曹鵬
中國新技術(shù)新產(chǎn)品 2012年2期
關(guān)鍵詞:進(jìn)程系統(tǒng)

曹鵬

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

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

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

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

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

3.信號量

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

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

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

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

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

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

4.管道通信方式

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

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

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

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

5.消息隊(duì)列

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

消息隊(duì)列就是一個(gè)消息的鏈表。就是把消息看作一個(gè)記錄,并且這個(gè)記錄具有特定的格式以及特定的優(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ì)列的末尾,接收的時(shí)候并不總是從頭來接收,可以從中間來接收。

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

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

6.共享內(nèi)存

除上述幾種通信方式之外,Linux還提供了正文段,也就是程序段的共享,當(dāng)若干進(jìn)程需要對公共數(shù)據(jù)區(qū)中的數(shù)據(jù)進(jìn)行頻繁操作時(shí),共享內(nèi)存的通信方式是一種很有用的通信機(jī)制,而且是以一種效率較高的進(jìn)程通信機(jī)制。其基本思想是:系統(tǒng)管理一組共享內(nèi)存控制塊,當(dāng)用戶程序進(jìn)程需要使用共享內(nèi)存段時(shí),使用SHMGET()系統(tǒng)調(diào)用申請一個(gè)共享內(nèi)存段,系統(tǒng)位置分配存儲(chǔ)空間和建立有關(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)程地址空間,一旦將一個(gè)共享內(nèi)存段連接到進(jìn)程邏輯地址空間后,進(jìn)程可以像訪問其私有數(shù)據(jù)段一樣存取該共享內(nèi)存段中的數(shù)據(jù)。當(dāng)不在使用共享內(nèi)存時(shí),由系統(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)存通信與消息緩沖通信有很多類似之處:都是使用一個(gè)id來標(biāo)識一個(gè)IPC目標(biāo),通過使用 GET(msgget,shmget)來建立一個(gè)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)程間是如何使用這個(gè)共享內(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)容易出錯(cuò).所以普通用戶一般不建議使用。

消息緩沖可以不再局限于父子進(jìn)程,而允許任意進(jìn)程通過共享消息隊(duì)列來實(shí)現(xiàn)進(jìn)程間通信,并由系統(tǒng)調(diào)用函數(shù)來實(shí)現(xiàn)消息發(fā)送和接收之間的同步,從而使得用戶在使用消息緩沖進(jìn)行通信時(shí)不再需要考慮同步問題,使用方便,但是信息的復(fù)制需要額外消耗CPU的時(shí)間,不適宜于信息量大或操作頻繁的場合。共享內(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年.

猜你喜歡
進(jìn)程系統(tǒng)
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無人機(jī)系統(tǒng)
ZC系列無人機(jī)遙感系統(tǒng)
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統(tǒng)
債券市場對外開放的進(jìn)程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
半沸制皂系統(tǒng)(下)
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
我國高等教育改革進(jìn)程與反思
Linux僵死進(jìn)程的產(chǎn)生與避免
男女平等進(jìn)程中出現(xiàn)的新矛盾和新問題
主站蜘蛛池模板: 国产成人综合亚洲网址| 亚洲一区无码在线| 亚洲精品日产精品乱码不卡| 色悠久久久| 精品久久久久久成人AV| 91在线一9|永久视频在线| 全午夜免费一级毛片| 人妻无码一区二区视频| 欧美精品色视频| 波多野结衣无码AV在线| 欧美在线视频不卡第一页| 午夜老司机永久免费看片 | 国产精品乱偷免费视频| 亚洲天堂日韩av电影| 国产第一页第二页| 啊嗯不日本网站| 伊人精品视频免费在线| 国产午夜无码片在线观看网站| 国产精品一区二区在线播放| 五月天久久综合| 狠狠色婷婷丁香综合久久韩国| 久久中文字幕av不卡一区二区| 国产中文在线亚洲精品官网| 免费视频在线2021入口| 国产一区二区三区在线观看视频 | 青青草a国产免费观看| 老司机久久99久久精品播放| 日本www色视频| 国内黄色精品| 亚洲欧美日韩中文字幕一区二区三区| 一本无码在线观看| 97综合久久| 亚洲日韩欧美在线观看| 99视频全部免费| 免费观看亚洲人成网站| 国产一二三区在线| 成人精品午夜福利在线播放| 亚洲AⅤ无码国产精品| 国产精鲁鲁网在线视频| 国产精品自在自线免费观看| 好久久免费视频高清| 波多野结衣一区二区三区AV| 国产午夜小视频| 国产不卡网| 日韩国产另类| 99偷拍视频精品一区二区| 丝袜国产一区| 国产精品成人一区二区| 午夜视频日本| 欧美精品啪啪一区二区三区| 992tv国产人成在线观看| 欧美国产精品不卡在线观看| 丁香六月激情综合| 毛片在线看网站| 亚洲av无码人妻| 国产中文在线亚洲精品官网| 国产精品三区四区| 日韩国产综合精选| 国产流白浆视频| 国产你懂得| 国产精品黄色片| 国产96在线 | 日韩欧美中文字幕一本| 999精品在线视频| 欧美福利在线| 国产精品黑色丝袜的老师| 99久久99视频| 国产系列在线| 精品国产美女福到在线直播| 国产亚洲精品va在线| 亚洲日本中文综合在线| 精品国产电影久久九九| 亚洲精品自拍区在线观看| 色哟哟国产精品一区二区| 91在线精品麻豆欧美在线| 亚洲精品自拍区在线观看| 色哟哟国产精品一区二区| 国产成年女人特黄特色毛片免| 日韩第一页在线| 欧美国产三级| 国产www网站| 免费国产小视频在线观看|