|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
概述
" o( k7 r4 {2 y
! {" e2 L+ b1 R& p1 K 可以说,共享内存是一种最为高效的进程间通信方式,因为进程可以直接读写内存,不需要任何数据的复制。为了在多个进程间交换信息,内核专门留出了一块内存区,这段内存区可以由需要访问的进程将其映射到自己的私有地址空间。因此,进程就可以直接读写这一段内存区而不需要进行数据的复制,从而大大提高了效率。当然,由于多个进程共享一段内存,因此也需要依靠某种同步机制,如互斥锁和信号量等。共享内存的原理图如下图1所示
& |& R% M8 W3 }% d: u+ T/ E. K4 u+ U- C7 N
共享内存使用步骤. j# L8 e$ O5 j8 P" V: \- _6 A
3 b' ~& L. M. r7 I
① 创建共享内存。也就是从内存中获得一段共享内存区域,这里用到的函数是shmget();
0 q0 ]. l' D0 Y# s$ @9 D
, n# z9 Z- N- l8 ] U/ h ② 映射共享内存。也就是把这段创建的共享内存映射到具体的进程空间中,这里使用的函数是shmat()。到这一步就可以使用这段共享内存了,也就是可以使用不带缓冲的I/O读写命令对其进行操作。* {$ p! r& X4 i$ h& G/ f7 p) {
, Q* `' Q: y( m) q- \ ③ 撤销映射。使用完共享内存就需要撤销,用到的函数是shmdt()。( {) F O; @9 }; n8 C# x4 t* G
6 u* K4 Z. t9 Q- _/ |) X函数说明
9 J3 X. G% r( x; t
+ e8 v) |& b C3 }% m$ c0 M, a5 z6 R6 E- A9 o% ?
G: I. V, q& \* `* A- p& j8 K# `. a3 t' s
|
|