曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 7390|回复: 0
打印 上一主题 下一主题

[基于Linux] 共享内存及相关数据结构

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2009-9-5 16:41:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
共享内存就是分配一块能被其他进程访问的内存。它允许两个并无关联的进程访问同一块逻辑内存区。两个进程利用共享内存传送数据是一种比较有效的方法之一。其实,在不同的进程间所共享的内存区往往指向的是同一块物理内存区域。

每个共享内存段在内核中维护着一个内部结构 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 : 当前使用该共享内存段的进程数量。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-19 09:50 , Processed in 0.072596 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表