Tak jak w przypadku kolejek wiadomości i zestawów semaforów, jądro przechowuje specjalną wewnętrzną strukturę dla każdego segmentu pamięci dzielonej. Struktura ta jest typu shmid_ds, który zdefiniowany jest w linux/shm.h:
/* jedna struktura shmid dla każdego segmentu pamięci dzielonej w systemie. */
struct shmid_ds {
struct ipc_perm shm_perm; /* prawa dostępu */
int shm_segsz; /* rozmiar segmentu ( bajty ) */
time_t shm_atime; /* czas ostatniego podłączenia */
time_t shm_dtime; /* czas ostatniego odłączenia */
time_t shm_ctime; /* czas ostatniej zmiany */
unsigned short shm_cpid; /* pid twórcy */
unsigned short shm_lpid; /* pid ostatniego operatora */
short shm_nattch; /* ilość aktualnych podłączeń */
/* następujące są prywatne: */
unsigned short shm_npages; /* rozmiar segmentu ( strony ) */
unsigned long *shm_pages; /* tablica wskaźników do ramek -> SHMMAX */
struct vm_area_struct *attaches; /* deskryptory podłączeń */
};
Operacje na tej strukturze wykonywane są przez specjalne wywołanie systemowe, nie powinieneś jej zmieniać inną metodą. Oto opis ważniejszych pól:
Jest to struktura ipc_perm, jest ona zdefiniowana w linux/ipc.h. Przechowuje ona informacje na temat praw dostępu, twórcy ( uid, itd. ).
Rozmiar segmentu ( w bajtach ).
Czas ostatniego podpięcia segmentu.
Czas ostatniego odpięcia segmentu.
Czas ostatniej zmiany tej struktury ( zmiana trybu, itp. ).
PID procesu tworzącego.
PID procesu, który jako ostatni operował na segmencie.
Liczba procesów podpiętych do segmentu.