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())重新创建映射。 |
广告