IPC-引言

進程間通信就是不同進程之間進行信息傳播和信息交換。但是,我們知道進程的進程空間是相互獨立的,一般是不能互相訪問的,唯一的例外是共享內存區。另外,系統空間是“公共場所”,各進程均可以訪問,所以內核也可以提供這樣的條件。此外,還有雙方都可以訪問的外設。

進程間通信(Interprocess communication),簡稱IPC,是一組編程接口,讓程序員能夠協調不同的進程,使之能在一個操作系統裏同時運行,並相互傳遞、交換信息。這使得一個程序能夠在同一時間裏處理許多用戶的要求。因爲即使只有一個用戶發出要求,也可能導致一個操作系統中多個進程的運行,進程之間必須互相通話。IPC接口就提供了這種可能性。每個IPC方法均有它自己的優點和侷限性,一般,對於單個程序而言使用所有的IPC方法是不常見的。
  IPC方法包括管道(PIPE)、消息排隊、旗語、共用內存以及套接字(Socket)。
爲什麼要IPC?

  • 數據傳輸:一個進程需要將它的數據發送給另一個進程,發送的數據量在一個字節到幾兆字節之間。
  • 共享數據:多個進程想要操作共享數據,一個進程對共享數據的修改,別的進程應該立刻看到。
  • 通知事件:一個進程需要向另一個或一組進程發送消息,通知它(它們)發生了某種事件(如進程終止時要通知父進程)
  • 資源共享:進多個進程之間共享同樣的資源。爲了作到這一點,需要內核提供鎖和同步機制。
  • 進程控制:有些進程希望完全控制另一個進程的執行(如Debug進程),此時控制進程希望能夠攔截另一個進程的所有陷入和異常,並能夠及時知道它的狀態改變。

進程通過與內核及其它進程之間的互相通信來協調它們的行爲。Linux支持多種進程間通信(IPC)機制,信號和管道是其中的兩種。除此之外,Linux還支持System V 的IPC機制(用首次出現的Unix版本命名)。

IPC方法包括管道(PIPE)、消息排隊、旗語、共用內存以及套接字(Socket)。
Linux下進程間通信方法概論:

  • 管道
    1)匿名管道(Pipe):可用於具有血緣關係的進程之間進行通信。
    2)命名管道(FIFO):除了具有血緣關係的進程之間通信,還支持無血緣關係進程通信。
  • 信號(Signal):信號是在軟件層次上對中斷機制的一種模擬,它是比較複雜的通信方式,用於通知進程有某事件發生,一個進程收到一個信號與處理器收到一箇中斷請求效果上可以說是一樣的。
  • 消息隊列:是消息的鏈接表,儲存在內核中,由消息隊列標識符標識。提供了進程間發送數據塊的方法。
  • 共享內存:使得多個進程可以訪問同⼀塊內存空間,是最快的可⽤IPC形式。是針對其他通信機制運⾏效率較低⽽設計的。往往與其它通信機制,如信號量結合使⽤,來達到進程間的同步及互斥。
  • 信號量(semaphore):主要作爲進程間以及同⼀進程不同線程之間的同步⼿段。
  • 套接口(Socket):更爲⼀般的進程間通信機制,可⽤於不同機器之間的進程間通
    信。起初是由Unix系統的BSD分⽀開發出來的,但現在⼀般可以移植到其它類Unix系統上: Linux和System V的變種都⽀持套接字
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章