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

淺析Linux進程通信的幾種方式及其比較

2012-12-31 11:59:35曹鵬
中國新技術新產品 2012年2期
關鍵詞:進程系統

曹鵬

(解放軍國際關系學院,江蘇 南京 210039)

1.進程通信的基本概念

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

2.進程通信的分類

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

3.信號量

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

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

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

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

信號量的創建:Linux系統中使用semget(key,nSemes,flag)來創建一個信號量,key是標識信號量的關鍵字,nSemes表示創建信號量的個數,flag表示為信號量存取權標志與建立標志。

信號量的操作:Linux系統中采用semop(semid,sops,nsops)來實現對信號量的操作,semid為關鍵字值,由semget返回得來,第二個參數是指向將要操作的數組的指針,nsops為數組sops的大小。

4.管道通信方式

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

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

2)單獨構成一種獨立的文件系統:管道對于管道兩端的進程而言,就是一個文件,成為管道文件,但它不屬于某種文件系統,而是自立門戶,單獨構成一種文件系統,并且只存在與內存中。

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

5.消息隊列

消息隊列的基本思想是:系統管理一組消息緩沖區,并稱之為消息緩沖池,其中每個消息緩沖區存放一條消息。消息實際上就是一組信息。當一個進程要發送消息時,首先向系統申請一個消息緩沖區,寫入消息后將其連接到接受進程PCB所指示的消息隊列。接受進程在適當的時候從其消息隊列中取得消息,并立即釋放該消息緩沖區,交回給系統管理。

消息隊列就是一個消息的鏈表。就是把消息看作一個記錄,并且這個記錄具有特定的格式以及特定的優先級。對消息隊列有寫權限的進程可以按照一定的規則添加新消息;對消息隊列有讀權限的進程則可以從消息隊列中讀出消息。

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

Linux中定義了一個名為msgbuf的數據結構來表示消息,并利用MSGGET()來創建一個消息隊列,然后返回這個消息隊列的標識號,然后調用MSGSND()向一個消息隊列發送一個消息,接收進城通過MSGRCV()來從一個消息隊列中收到一個消息。在通信雙方進行通信的過程中,系統可以利用MSGCTL()在消息隊列上執行指定的操作,更具參數的不同和權限的不同,可以執行檢索、刪除等得操作。

共享的消息隊列是一個臨界資源,針對同一消息隊列的諸發送和接收進程必須保證互斥進入,這種進程間的同步和互斥是由系統提供的系統調用自動實現的,所以用戶在使用時不需要再考慮它們之間的同步關系,非常方便。

6.共享內存

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

共享內存通信與消息緩沖通信有很多類似之處:都是使用一個id來標識一個IPC目標,通過使用 GET(msgget,shmget)來建立一個IPC目標,都要進行權限檢查等來實現通信。不同點是:共享內存一旦附接后就作為進程地址空間的一部分提供給進程使用對于該共享內存的讀寫操作如同對進程私有的緩沖區一樣。操作系統不再關心進程間是如何使用這個共享內存,更無法進行干預。

7.各種通信方式的比較和優缺點。

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

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

不同的進程通信方式有不同的優點和缺點。因此,對于不同的應用問題,要根據問題本身的情況來選擇進程間的通信方式。

[1]史杏榮,楊壽寶.操作系統原理與實現技術[M].北京:中國科學技術大學,1997.

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

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

[4]W.Richard Stevens.UNIX高級環境編程[M].北京:機械工業出版社,2000年.

猜你喜歡
進程系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統
債券市場對外開放的進程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
半沸制皂系統(下)
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
我國高等教育改革進程與反思
教育與職業(2014年7期)2014-01-21 02:35:04
Linux僵死進程的產生與避免
男女平等進程中出現的新矛盾和新問題
主站蜘蛛池模板: 精品一区二区三区视频免费观看| 国产欧美日韩另类精彩视频| 亚洲va欧美ⅴa国产va影院| 免费全部高H视频无码无遮掩| 大香伊人久久| 免费国产无遮挡又黄又爽| 国产在线自乱拍播放| 久久久久国产精品嫩草影院| 久久熟女AV| 国产幂在线无码精品| 激情无码字幕综合| 久久久久88色偷偷| 欧美人与性动交a欧美精品| 中文无码精品A∨在线观看不卡 | 国产精品女熟高潮视频| 久久亚洲国产最新网站| 国产三区二区| 无码综合天天久久综合网| 久久夜色撩人精品国产| 激情無極限的亚洲一区免费| 久久久久久久97| 天天综合色天天综合网| 国产成人永久免费视频| 成人年鲁鲁在线观看视频| 欧美日韩国产在线观看一区二区三区 | 91精品国产91久无码网站| jizz在线观看| 亚洲欧美激情小说另类| 久久一本精品久久久ー99| 特级欧美视频aaaaaa| 一区二区三区成人| 91破解版在线亚洲| 亚洲国产成人在线| 国产欧美日韩综合在线第一| 91亚洲精选| 免费国产高清精品一区在线| 日韩中文无码av超清| 国产91特黄特色A级毛片| 国产午夜精品一区二区三| 中字无码精油按摩中出视频| 免费毛片a| 国产色爱av资源综合区| 亚洲欧美在线综合一区二区三区| 国产农村1级毛片| 日韩大片免费观看视频播放| 亚洲欧洲日本在线| 亚洲精品国产首次亮相| 国产午夜无码专区喷水| 丰满少妇αⅴ无码区| a毛片在线播放| 亚洲成人精品久久| 精品一区二区三区水蜜桃| 波多野结衣中文字幕一区| av无码一区二区三区在线| 99久久精品免费看国产免费软件| 久久国产亚洲欧美日韩精品| 喷潮白浆直流在线播放| 欧美国产在线一区| 国产亚洲视频在线观看| 国产xx在线观看| 777国产精品永久免费观看| 老司机午夜精品网站在线观看| 毛片网站在线播放| 日韩中文精品亚洲第三区| 亚洲无码高清免费视频亚洲| 国产91精品调教在线播放| 成人小视频在线观看免费| 91精品视频网站| 中文字幕久久亚洲一区| 伊人精品成人久久综合| 91亚洲免费视频| 在线观看国产小视频| 多人乱p欧美在线观看| 97久久超碰极品视觉盛宴| 韩国v欧美v亚洲v日本v| 欧美第二区| 夜夜操国产| 久久精品国产国语对白| 一级毛片在线播放| 夜夜操国产| 色综合中文字幕| 久久国产免费观看|