|
共享内存就是分配一块能被其他进程访问的内存。它允许两个并无关联的进程访问同一块逻辑内存区。两个进程利用共享内存传送数据是一种比较有效的方法之一。其实,在不同的进程间所共享的内存区往往指向的是同一块物理内存区域。
每个共享内存段在内核中维护着一个内部结构 shmid_ds (和消息队列、信号量一样),该数据结构定义在头文件 linux/shm.h中:
/* Obsolete, used only for backwards compatibility and libc5 compiles */
struct shmid_ds {
struct ipc_perm shm_perm; /* operation perms */
int shm_segsz; /* size of segment (bytes) */
__kernel_time_t shm_atime; /* last attach time */
__kernel_time_t shm_dtime; /* last detach time */
__kernel_time_t shm_ctime; /* last change time */
__kernel_ipc_pid_t shm_cpid; /* pid of creator */
__kernel_ipc_pid_t shm_lpid; /* pid of last operator */
unsigned short shm_nattch; /* no. of current attaches */
unsigned short shm_unused; /* compatibility */
void *shm_unused2; /* ditto - used by DIPC */
void *shm_unused3; /* unused */
}; 代码中主要字段含义如下:
shm_perm : 操作许可,里面包含共享内存的用户 ID 、组 ID 等信息。 shm_segsz : 共享内存段的大小,以字节为单位。 shm_atime : 最后一个进程访问共享内存的时间。 shm_dtime : 最后一个进程离开共享内存的时间。 shm_ctime : 最后一次修改共享内存的时间。 shm_cpid : 创建共享内存的进程 ID 。 shm_lpid : 最后操作共享内存的进程 ID 。 shm_nattch : 当前使用该共享内存段的进程数量。
|
|