怎么创建网站域名,品牌vi标志设计公司,企业手机网站建设策划,青岛网站推广招商Linux之【进程间通信#xff08;IPC#xff09;】-总结篇 管道System V共享内存System V消息队列System V信号量IPC资源的管理方式 往期文章 1.进程间通信之管道 2.进程间通信之System V共享内存
管道
进程之间具有独立性#xff0c;拥有自己的虚拟地址空间#xff0c;因… Linux之【进程间通信IPC】-总结篇 管道System V共享内存System V消息队列System V信号量IPC资源的管理方式 往期文章 1.进程间通信之管道 2.进程间通信之System V共享内存
管道
进程之间具有独立性拥有自己的虚拟地址空间因此无法通过各自的虚拟地址进行通信A的地址经过B的页表映射不一定映射在什么位置除了内核中的缓冲区之外还有文件以及网络通信的方式可以实现进程间通信管道的本质是内核中的缓冲区通过内核缓冲区实现通信命名管道的文件虽然可见于文件系统但是只是标识符并非通信介质
System V共享内存 共享内存的本质就是开辟一块物理内存让多个进程映射同一块物理内存到自己的地址空间进行访问实现数据共享的。 共享内存的操作是非进程安全的多个进程同时对共享内存读写是有可能会造成数据的交叉写入或读取造成数据混乱 共享内存的删除操作并非直接删除而是拒绝后续映射只有在当前映射链接数为0时表示没有进程访问了才会真正被删除 共享内存生命周期随内核只要不删除就一直存在于内核中除非重启系统当然这里指的是非手动操作可以手动删除
System V消息队列
消息队列是OS提供的内核级队列消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法每个数据块都被认为是有一个类型接收者进程接收的数据块可以有不同的类型值 消息队列与共享内存不同之处在于 共享内存需要关联消息队列使用
//发送
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
//接收
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg);
msqid同shmid
msgp柔性数组地址
msgsz数据大小
msgtyp标识符表示要读取写入那个类型节点
msgflag同shmflag作用来收发消息
System V信号量
参考linux【多线程】基于环形队列(RingQueue)的生产消费模型
IPC资源的管理方式
除管道外其余三种虽然内部的属性差别很大但是维护它们的数据结构的第一个成员结构是一样的都是ipc_perm类型的成员变量,都可以通过key来标识唯一性 1三种ipc资源数据结构的首地址元素相同用一个struct ipc_perm* perms[]指针数组进行管理。 2访问时只需(struct shmid_ds*)perms[0] 对指针强转就可以得到每个共享内存的属性消息队列信号量同理。 3这是C语言模拟实现的一种多态行为。以【struct ipc_perm 】为基类