本文内容说明:
*共享内存的概念
*通过共享内存来达到进程间通信。
共享内存:
在Linux中,每个进程都有自己的P C B 和地址空间,并且都有一个对应的页表,负责将进程的地址和物理地址进行映射,通过MMU来管理。创建一段共享存储区(临界资源),被映射到不同进程的地址空间内,从而实现了高效率的资源共享。
共享内存的优点及缺点:
优点:
共享内存在所有用于进程间通信的IPC资源中实现进程间通信的速度是 最快的,因为它少了两次资源的拷贝。
缺点:
操作系统对共享内存并没有提供同步与互斥机制,所以需要用户来实现同步与互斥机制,我们知道,信号量就可以实现。
如何使用共享内存:
进程间通信的本质是使不同的进程可以看到同一份资源,这份资源称之为临界资源,那么这里的共享内存即是这份临界资源。
所以,首先应该创建一段共享存储区。然后使其要访问这个共享存储区的每一个进程都要将该共享存储区连接至每个进程的地址空间。
当通信完成后,所有的进程需要对其去关联,通俗点讲,也就是说将这些进程和这块共享存储区的连接断开,并由创建共享存储区的进程释放该共享存储区。
注意:建议用户申请的共享存储块的大小最好是系统页面大小的整数倍。因为,如果用户申请的共享存储段的大小不是页面大小的整数倍的话,那么系统会采用向上对齐至页面大小的整数倍,但是用户可以使用的还是自定义的存储段。在Linux系统下,页面大小默认为4kb。
指令:
1.查看系统中的共享存储段:
ipcs -m
2.删除系统中的共享存储段:
ipcrm -m shmid