共享内存是最快的一种IPC
使得A进程和B进程都能通过虚拟地址映射到同一块物理空间上。
区域既属于A进程又属于B进程。两个进程共享同一块空间。两个指针访问同一块内存,不需要切换内核态,不需要经过操作系统。
1、 共享内存一旦使得进程映射到此共享内存区域,不需要用户态切换成内核态。
2、 共享内存相比较于其他通信方式,会少两次数据的拷贝。
共享内存实现:<sys/shm.h>
(1) 创建或者获取
int shmget((key_t)key,int sharedsize,int flag);
失败返回-1
(2) 将进程中虚拟地址映射到共享内存区域
void* shmat(int shmid,void* addr,int flag);
失败返回NULL
(3) 断开连接
int shmdt(void* addr);
(4) 删除内核对象
int shmctl(int shmid,int cmd,struct shmid_ds* buf);
成功返回0,失败返回-1
实现:A进程接收用户输入,B进程将用户输入全部转为小写。
进程间通信的总结:
将进程间通信分为两类:第一类信号&信号量,不发数据只是通知,第二类,管道、消息队列用于发送数据。
有名管道:通过管道文件来完成多进程间通信,一般用于两个进程间通信
无名管道:借助于fork打开的同一个文件描述符,只能用于父子两个进程之间。
消息队列:发送带有类型的数据,可以真正实现多进程。
共享内存:使得两个进程间共享同一块物理内存,实现数据传递,但是必须使用信号量控制进程同步。共享内存是最快的一种IPC
信号量:完成进程同步控制,用于多进程访问同一临界资源。
信号:完成进程间消息通知。
9582

被折叠的 条评论
为什么被折叠?



