System V & Posix
下表列出了 System V IPC 和 POSIX IPC 之間的區別。
| SYSTEM V | POSIX |
|---|---|
| AT & T 在 1983 年引入了三種新的 IPC 設施,即訊息佇列、共享記憶體和訊號量。 | IEEE 制定的可移植作業系統介面標準,用於定義應用程式程式設計介面 (API)。POSIX 涵蓋了所有三種形式的 IPC |
| SYSTEM V IPC 涵蓋所有 IPC 機制,例如管道、命名管道、訊息佇列、訊號、訊號量和共享記憶體。它還涵蓋套接字和 Unix 域套接字。 | 幾乎所有基本概念都與 System 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 物件 |
| 不適用 | POSIX 訊息佇列可以使用 select()、poll() 和 epoll API 進行監控 |
| 提供 msgctl() 呼叫 | 提供函式(mq_getattr() 和 mq_setattr())用於訪問或設定屬性 11. IPC - System V & POSIX |
| 不適用 | 多執行緒安全。涵蓋執行緒同步函式,例如互斥鎖、條件變數、讀寫鎖等。 |
| 不適用 | 為訊息佇列提供了一些通知功能(例如 mq_notify())。 |
| 需要使用系統呼叫,例如 shmctl(),以及命令(ipcs、ipcrm)來執行狀態/控制操作。 | 可以使用系統呼叫(例如 fstat()、fchmod())檢查和操作共享記憶體物件。 |
| System V 共享記憶體段的大小在建立時(透過 shmget())固定。 | 我們可以使用 ftruncate() 調整底層物件的大小,然後使用 munmap() 和 mmap()(或 Linux 特定的 mremap())重新建立對映。 |
廣告