|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
概述0 G9 X# j) ?9 S5 L K4 N
4 ]# f+ r/ ~0 E; l8 o1 s
可以说,共享内存是一种最为高效的进程间通信方式,因为进程可以直接读写内存,不需要任何数据的复制。为了在多个进程间交换信息,内核专门留出了一块内存区,这段内存区可以由需要访问的进程将其映射到自己的私有地址空间。因此,进程就可以直接读写这一段内存区而不需要进行数据的复制,从而大大提高了效率。当然,由于多个进程共享一段内存,因此也需要依靠某种同步机制,如互斥锁和信号量等。共享内存的原理图如下图1所示
+ N) K6 Y) Z$ B' ^ ~/ Z0 J, M: m6 r
共享内存使用步骤; u. A6 V' K9 Q: n
) o$ p( O) n9 A" q J p ① 创建共享内存。也就是从内存中获得一段共享内存区域,这里用到的函数是shmget();
% ]8 W- d9 X) T8 N2 G
' e h. y$ q+ K: }2 _7 H2 ^& j ② 映射共享内存。也就是把这段创建的共享内存映射到具体的进程空间中,这里使用的函数是shmat()。到这一步就可以使用这段共享内存了,也就是可以使用不带缓冲的I/O读写命令对其进行操作。
: q% p: X5 b/ Z2 j
2 A7 }4 X# j; }6 y0 H ③ 撤销映射。使用完共享内存就需要撤销,用到的函数是shmdt()。: l( ~: g3 g. N1 L8 R
: v# k5 M$ O- a. b函数说明
% ]- Z, |5 d. j T& r. T( o, \& g) o0 b
! {2 a# ]& y1 w, l/ K8 O( X; t6 p: t1 K; g
+ W, E. j! ?3 P$ f$ _& H |
|