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