Linux進程間的6種通信方式


進程間的通信方式:

 

1.管道(pipe)及有名管道(named pipe):

       管道可用於具有親緣關系進程間的通信,有名管道除了具有管道所具有的功能外,它還允許無親緣關系進程間的通信。

2.信號(signal):

      信號是在軟件層次上對中斷機制的一種模擬,它是比較復雜的通信方式,用於通知進程有某事件發生,一個進程收到一個信號與處理器收到一個中斷請求效果上可以說是一致得。 

3.消息隊列(message queue):

     消息隊列是消息的鏈接表,它克服了上兩種通信方式中信號量有限的缺點,具有寫權限得進程可以按照一定得規則向消息隊列中添加新信息;對消息隊列有讀權限得進程則可以從消息隊列中讀取信息。

消息緩沖通信技術是由Hansen首先提出的,其基本思想是:根據”生產者-消費者”原理,利用內存中公用消息緩沖區實現進程之間的信息交換.
     內存中開辟了若干消息緩沖區,用以存放消息.每當一個進程向另一個進程發送消息時,便申請一個消息緩沖區,並把已准備好的消息送到緩沖區,然后把該消息緩沖區插入到接收進程的消息隊列中,最后通知接收進程.接收進程收到發送里程發來的通知后,從本進程的消息隊列中摘下一消息緩沖區,取出所需的信息,然后把消息緩沖區不定期給系統.系統負責管理公用消息緩沖區以及消息的傳遞.
      一個進程可以給若干個進程發送消息,反之,一個進程可以接收不同進程發來的消息.顯然,進程中關於消息隊列的操作是臨界區.當發送進程正往接收進程的消息隊列中添加一條消息時,接收進程不能同時從該消息隊列中到出消息:反之也一樣.

消息緩沖區通信機制包含以下列內容:

    (1) 消息緩沖區,這是一個由以下幾項組成的數據結構:
         1、 消息長度
         2、 消息正文
         3、 發送者
         4、 消息隊列指針
 (2)消息隊列首指針m-q,一般保存在PCB中。
     ( 1) 互斥信號量m-mutex,初值為1,用於互斥訪問消息隊列,在PCB中設置。
      (2) 同步信號量m-syn,初值為0,用於消息計數,在PCB中設置。
      (3) 發送消息原語send
      (4) 接收消息原語receive(a) 

4.共享內存(shared memory):

        可以說這是最有用的進程間通信方式。它使得多個進程可以訪問同一塊內存空間,不同進程可以及時看到對方進程中對共享內存中數據得更新。這種方式需要依靠某種同步操作,如互斥鎖和信號量等。

這種通信模式需要解決兩個問題:第一個問題是怎樣提供共享內存;第二個是公共內存的互斥關系則是程序開發人員的責任。

5.信號量(semaphore):

       主要作為進程之間及同一種進程的不同線程之間得同步和互斥手段。

 6.套接字(socket);

       這是一種更為一般得進程間通信機制,它可用於網絡中不同機器之間的進程間通信,應用非常廣泛。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM