1. 程式人生 > >System V 與 POSIX通訊

System V 與 POSIX通訊

轉自https://blog.csdn.net/firstlai/article/details/50705042

System V 以及POSIX 對訊號量、共享記憶體、訊息佇列等程序之間共享方式提供了自己的解決方案。因此,在學習時難免存在疑惑,到底有什麼區別,哪種方式更佳。經過網上搜索各種部落格,做出簡單的總結。

歷史

       UNIX兩大貢獻者貝爾實驗室和BSD,在程序之間通訊側重不同,前者基於核心對程序之間的通訊手段進行了改進,形成了“System V IPC”,而後者則是基於網路形成了套接字。

       而POSIX則是IEEE制定的標準

,目的是為執行在不同作業系統上的軟體提供統一的介面,實現者則是不同的作業系統核心開發人員。

效率

       在訊號量這種常用的同步互斥手段方面,POSIX在無競爭條件下是不會陷入核心的,而SYSTEM V則是無論何時都要陷入核心,因此效能稍差。

冗餘

       POSIX的sem_wait函式成功獲取訊號量後,程序如果意外終止,將無法釋放訊號量,而System V則提供了SEM_UNDO選項來解決這個問題。因此,相比而言,後者更加可靠。

應用

       可能有小部分作業系統沒有實現POSIX標準,System V更加廣泛些,但是考慮到可移植性POSIX必然是一個趨勢。在IPC,程序間的訊息傳遞和同步上,似乎POSIX用得較普遍,而在共享記憶體方面,POSIX實現尚未完善,system V仍為主流。

多執行緒與多程序

       在觀察使用程序間通訊手段後,會發現在多執行緒中使用的基本是POSIX標準提供的介面函式,而多程序則是基於System V。但是兩者難道就不能交叉使用嗎?

       多執行緒使用System V介面---不建議。執行緒相對於程序是輕量級的,例如排程的策略開銷,如果使用System V這種每次呼叫都會陷入核心的介面,會喪失執行緒的輕量優勢。所以,多執行緒之間的通訊不使用System V的介面函式。

 

       多程序使用POSIX

也是允許的

     以mutex為例 ,POSIX的mutex如果要用於多程序,需要實現如下兩點要求:(對於SEM訊號量相對簡單,因為提供了有名SEM的能夠用於多程序,它是核心持續的,詳見http://blog.csdn.net/firstlai/article/details/50706243)

 

  • mutex能為多個程序所見;
  • mutex本身不額外使用程序本地的記憶體,如堆記憶體。

 

       對於第一條是很