next up previous contents
下一主题: 内核 sem 结构体 上一层: 内部数据结构 前一主题: 内部数据结构

内核semid_ds结构体

与消息队列类似,内核为存在于其地址空间中的每个信号量集维护一个特殊的内部数据结构。此结构的类型为semid_ds,并在linux/sem.h中定义如下


        /* One semid data structure for each set of semaphores in the system. */
        struct semid_ds {
                struct ipc_perm sem_perm;       /* permissions .. see ipc.h */
                time_t          sem_otime;      /* last semop time */
                time_t          sem_ctime;      /* last change time */
                struct sem      *sem_base;      /* ptr to first semaphore in array */
                struct wait_queue *eventn;
                struct wait_queue *eventz;
                struct sem_undo  *undo;         /* undo requests on this array */
                ushort          sem_nsems;      /* no. of semaphores in array */
        };

与消息队列类似,对此结构的操作由特殊的系统调用执行,不应直接修改。以下是更相关的字段的描述

sem_perm

这是ipc_perm结构的实例,该结构在linux/ipc.h中为我们定义。它保存信号量集的权限信息,包括访问权限以及关于集合创建者的信息(uid 等)。

sem_otime

上次semop()操作的时间(稍后详细介绍)

sem_ctime

上次对此结构进行更改的时间(模式更改等)

sem_base

指向数组中第一个信号量的指针(请参阅下一个结构)

sem_undo

此数组中 undo 请求的数量(稍后详细介绍)

sem_nsems

信号量集(数组)中信号量的数量



转换于
Fri Mar 29 14:43:04 EST 1996