Tak jak w przypadku kolejek wiadomości jądro utrzymuje specjalną strukturę dla każdego zestawu semaforów, istnieje ona wewnątrz obszaru adresowego jądra. Struktura ta jest typu semid_ds, który zdefiniowany jest w linux/sem.h:
/* jedna struktura semid dla każdego zestawu semaforów w systemie */
struct semid_ds {
struct ipc_perm sem_perm; /* restrykcje .. zobacz ipc.h */
time_t sem_otime; /* czas ostatniej operacji semop */
time_t sem_ctime; /* czas ostatniej zmiany */
struct sem *sem_base; /* wkaźnik do pierwszego semaforu w tablicy */
struct wait_queue *eventn;
struct wait_queue *eventz;
struct sem_undo *undo; /* odwołaj żądania dla tej tablicy */
ushort sem_nsems; /* liczba semaforów w tablicy */
};
Tak jak w przypadku kolejek wiadomości, operacje na tej strukturze przeprowadzane są przez specjalne wywołanie systemowe i tylko przez nie, nie powinieneś zabawiać się :) z tą strukturą w inny sposób. Opis niektórych pól:
Jest to struktura typu ipc_perm, który jest zdefiniowany w linux/ipc.h. Przechowuje prawa dostępu, oraz informacje o twórcy i właścicielu zestawu.
Czas ostaniej operacji semop() ( więcej o tym za chwilkę )
Czas ostatniej zmiany struktury ( np.: zmiana praw, itp. )
Wskaźnik do pierwszego semaforu w tablicy ( zobacz następną strukturę )
Liczba żądań odwołania (undo) dla tej tablicy ( więcej za chwilę )
Liczba semaforów w zestawie ( tablicy ).