与消息队列和信号量集一样,内核为存在于其地址空间中的每个共享内存段维护一个特殊的内部数据结构。 此结构体的类型为shmid_ds,并在以下文件中定义linux/shm.h如下所示
/* One shmid data structure for each shared memory segment in the system. */
struct shmid_ds {
struct ipc_perm shm_perm; /* operation perms */
int shm_segsz; /* size of segment (bytes) */
time_t shm_atime; /* last attach time */
time_t shm_dtime; /* last detach time */
time_t shm_ctime; /* last change time */
unsigned short shm_cpid; /* pid of creator */
unsigned short shm_lpid; /* pid of last operator */
short shm_nattch; /* no. of current attaches */
/* the following are private */
unsigned short shm_npages; /* size of segment (pages) */
unsigned long *shm_pages; /* array of ptrs to frames -> SHMMAX */
struct vm_area_struct *attaches; /* descriptors for attaches */
};
这是ipc_perm结构体的实例,该结构体在以下文件中为我们定义linux/ipc.h。 这保存了该段的权限信息,包括访问权限以及有关段的创建者的信息(uid 等)。
段的大小(以字节为单位)。
最后一个进程连接到该段的时间。
最后一个进程分离该段的时间。
上次对此结构体进行更改的时间(模式更改等)。
创建进程的 PID。
最后一个对该段进行操作的进程的 PID。
当前连接到该段的进程数。