System V & Posix
精华
小牛编辑
152浏览
2023-03-14
下表列出了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() ,命令(ipcs ,ipcrm )来执行状态/控制操作。 |
共享内存对象可以使用系统调用(如fstat(),fchmod() |
System V共享内存段的大小在创建时是固定的(通过shmget() ) |
可以使用ftruncate() 来调整底层对象的大小,然后使用munmap() 和mmap() (或Linux专用的mremap() )重新创建映射 |