IPC进程间通信主题之共享内存

来源:互联网 发布:城西银泰有mac专柜吗 编辑:程序博客网 时间:2024/05/21 08:44

一.什么是共享内存
共享内存:使得多个进程可以访问同⼀一块内存空间,是最快的可⽤用IPC形式。是针对其他通信机制运⾏行效率较低⽽而设计的。
共享内存是所有进程间通信中效率最快的,它的生命周期是随内核,并且它本身并有提供同步与互斥,往往与其它通信机制,如信号量结合使⽤用, 来达到进程间的同步及互斥。
它的工作原理可以用下图来解释:
这里写图片描述
两个不同的进程通过页表映射将其中的内容存储到一块相同的物理内存中,这一块内存就是共享内存。

查找系统中的共享内存:ipcs -s删除系统中的某个共享内存:ipcrm -m shmid

二.关于共享内存的测试用例及代码
为了模拟共享内存,我们设计了一个测试用例来测试。下面先介绍一下几个必要的函数。
1 shmget函数
这里写图片描述
这里写图片描述
2 shmctl函数,控制共享内存
这里写图片描述
3.shmat(),shmdt(),共享内存操作函数
这里写图片描述
其中shmat函数的参数意义如下:
① shm_id:由shmget函数返回的共享内存标识。
② shm_addr:指定共享内存连接到当前进程中的地址位置,通常为空,表示让系统来选择共享内存的地址。
③ shm_flg:是一组标志位,通常为0。

测试用例需要定义的一些函数如图:
这里写图片描述
这里写图片描述

下面看一下测试代码:

server.c的代码如图:
这里写图片描述

client.c的代码如图:
这里写图片描述

接下来让我们先运行server:
这里写图片描述

此时在屏幕上并没有输出什么,再当我们运行client的时候:
这里写图片描述

server和client中都在一直打印A到Z的过程,这就是共享内存所实现的。

原创粉丝点击