|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
概述
# I* G$ d5 ?3 |; ]$ ^6 M4 @- H- D( S' o
可以说,共享内存是一种最为高效的进程间通信方式,因为进程可以直接读写内存,不需要任何数据的复制。为了在多个进程间交换信息,内核专门留出了一块内存区,这段内存区可以由需要访问的进程将其映射到自己的私有地址空间。因此,进程就可以直接读写这一段内存区而不需要进行数据的复制,从而大大提高了效率。当然,由于多个进程共享一段内存,因此也需要依靠某种同步机制,如互斥锁和信号量等。共享内存的原理图如下图1所示
! @, V# d8 e* }- d+ H2 s8 x5 K) m5 m9 F c; K
共享内存使用步骤7 d/ V8 O) z3 `
& N) z, N$ h& [% L, T4 _9 w
① 创建共享内存。也就是从内存中获得一段共享内存区域,这里用到的函数是shmget();# X3 G0 L( a( Q) L% h0 K. R& v
6 [6 Y# {% ?- Z Z5 l
② 映射共享内存。也就是把这段创建的共享内存映射到具体的进程空间中,这里使用的函数是shmat()。到这一步就可以使用这段共享内存了,也就是可以使用不带缓冲的I/O读写命令对其进行操作。* I, s( q, d2 M) m: y$ S
. |9 a0 h/ u0 \1 i' V s" M% w5 x ③ 撤销映射。使用完共享内存就需要撤销,用到的函数是shmdt()。
8 b9 ?4 T* e; M, \0 T4 {; `' E& @1 s7 z
函数说明
( U" C' ^) X+ F8 Z( z' w: }- }1 B4 T1 {0 w( y3 f' S+ T
7 |6 U5 ]. p+ p/ L. d6 x& Y3 Q, I9 d0 F% e" B7 I! x
7 }" u, E5 {& U2 p( _1 t |
|