System V & Posix


下表列出了System V IPC和POSIX IPC之間的區別。

SYSTEM V POSIX
AT&T(1983)介紹了IPC設施的三種新形式,即訊息佇列,共用記憶體和號誌。 由IEEE指定的便攜式作業系統介面標準來定義應用程式程式設計介面(API)。 POSIX涵蓋了所有三種形式的IPC
SYSTEM V IPC涵蓋了所有的IPC機制,即管道,命名管道,訊息佇列,信號,號誌和共用記憶體。 它還涵蓋通訊端和Unix域通訊端。 幾乎所有的基本概念都與系統V相同。它僅與介面有所不同。
共用記憶體介面呼叫shmget()shmat()shmdt()shmctl() 共用記憶體介面呼叫shm_open()mmap()shm_unlink()
訊息佇列介面呼叫msgget()msgsnd()msgrcv()msgctl() 訊息佇列介面呼叫mq_open()mq_send()mq_receive()mq_unlink()
號誌介面呼叫semget()semop()semctl() 號誌介面呼叫命名號誌sem_open()sem_close()sem_unlink()sem_post()sem_wait()sem_trywait()sem_timedwait()sem_getvalue()未命名或基於記憶體的號誌sem_init()sem_post()sem_wait ()sem_getvalue()sem_destroy()
使用鍵和識別符號來標識IPC物件。 使用名稱和檔案描述符來標識IPC物件
NA 可以使用select()poll()和epoll API來監視POSIX訊息佇列
提供msgctl()呼叫 提供函式(mq_getattr()mq_setattr())來存取或設定屬性
NA 多執行緒安全。 包含執行緒同步函式,如互斥鎖,條件變數,讀寫鎖等
NA 為訊息佇列提供少量通知功能(如mq_notify())
需要系統呼叫如shmctl(),命令(ipcsipcrm)來執行狀態/控制操作。 共用記憶體物件可以使用系統呼叫(如fstat(),fchmod()
System V共用記憶體段的大小在建立時是固定的(通過shmget()) 可以使用ftruncate()來調整底層物件的大小,然後使用munmap()mmap()(或Linux專用的mremap())重新建立對映