ipc

Autres langues

Langue: pl

Autres versions - même langue

Version: 1993-11-01 (openSuse - 09/10/07)

Autres sections - même nom

Section: 5 (Format de fichier)

NAZWA

ipc - mechanizmy komunikacji miêdzy procesami w Systemie V

SK£ADNIA


# include <sys/types.h>

# include <sys/ipc.h>

# include <sys/msg.h>

# include <sys/sem.h>

# include <sys/shm.h>

 

OPIS

Nieniejsza dokumentacja stara siê opisaæ implementacjê w systemie Linux mechanizmów komunikacji miêdzy procesami Systemu V: kolejek komunikatów, semaforów oraz segmentów pamiêci wspólnej. Dalej w tek¶cie s³owo zasób oznacza egzemplarz/realizacjê jednego z tych mechanizmów.

Prawa dostêpu do zasobów

W przypadku ka¿dego zasobu system korzysta z ogólnej struktury typu struct ipc_perm, w której przechowuje informacje niezbêdne do okre¶lenia uprawnieñ do wykonania operacji. Struktura ipc_perm zdefiniowana w systemowym pliku nag³ówkowym <sys/ipc.h> sk³ada siê z nastêpuj±cych pól:

       ushort cuid;     /* id u¿ytkownika tworz±cego */

       ushort cgid;     /* id grupy tworz±cego */

       ushort uid;      /* id w³a¶ciciela */

       ushort gid;      /* id grupy w³a¶ciciela */

       ushort mode;     /* uprawnieenia do odczytu/zapisu */

Pole mode struktury ipc_perm w swoich najni¿szych 9-ciu bitach przechowuje informacje o prawach dostêpu do zasobu dla procesu wywo³uj±cego funkcjê systemow± metod ipc. Uprawnienia s± interpretowane w sposób nastêpuj±cy:


        0400    Prawo do odczytu przez u¿ytkownika.

        0200    Prawo do zapisu przez u¿ytkownika.



        0040    Prawo do odczytu przez grupê.

        0020    Prawo do zapisu przez grupê.



        0004    Prawo do odczytu przez innych.

        0002    Prawo do zapisu przez innych.

Bity 0100, 0010 i 0001 (bity praw do uruchamiania) nie s± przez system wykorzystywane. Co wiêcej, w przypadku zestawu semaforów "zapisz" efektywnie oznacza "zmieñ".

W tym samym systemowym pliku nag³ówkowym zawarta jest definicja sta³ych symbolicznych:

IPC_CREAT
Utworzenie pozycji, gdy klucz nie istnieje.
IPC_EXCL
B³±d, gdy klucz istnieje.
IPC_NOWAIT
B³±d, gdy ¿±danie musi czekaæ.
IPC_PRIVATE
Klucz prywatny.
IPC_RMID
Usuniêcie zasobu.
IPC_SET
Ustawienie opcji zasobu.
IPC_STAT
Odczytanie opcji zasobu.

Proszê zauwa¿yæ, ¿e IPC_PRIVATE jest typu key_t podczas gdy pozosta³e sta³e s± polami znacznikowymi które mog± byæ sumowane bitowo (OR) do jednej zmiennej typu int.

Kolejki komunikaktów

Kolejka komunikatów jest w sposób jednoznaczny identyfikowana przez dodatni± liczbê ca³kowit± (jej msqid) oraz posiada skojarzon± strukturê typu struct msquid_ds, która jest zdefiniowana w pliku <sys/msg.h>, a sk³ada siê z nastêpuj±cych pól:

       struct ipc_perm msg_perm;
       ushort msg_qnum;         /* liczba komunikatów w kolejce */

       ushort msg_qbytes;       /* maks. liczba bajtów w kolejce */

       ushort msg_lspid;        /* PID ostatnio wywo³uj±cego msgsnd */

       ushort msg_lrpid;        /* PID ostatnio wywo³uj±cego msgrcv */

       time_t msg_stime;        /* czas ostatniego msgsnd */

       time_t msg_rtime;        /* czas ostatniego msgrcv */

       time_t msg_ctime;        /* czas ostatniej zmiany */

msg_perm
Struktura ipc_perm, która okre¶la prawa dostêpu do kolejki komunikatów.
msg_qnum
Liczba komunikatów znajduj±cych siê aktualnie w kolejce.
msg_qbytes
Maksymalna liczba bajtów tekstu komunikatu na jak± pozwala kolejka.
msg_lspid
Identyfikator procesu, który ostatni wykona³ funkcjê systemow± msgsnd.
msg_lrpid
identyfikator procesu, który ostatni wykona³ funkcjê systemow± msgrcv.
msg_stime
Czas ostatniego wykonania funkcji systemowej msgsnd.
msg_rtime
Czas ostatniego wykonania funkcji systemowej msgcv.
msg_ctime
Czas ostatniego wywo³ania funkcji systemowej, w wyniku którego zmienione zosta³o pole struktury msqid_ds.

Zestawy semaforów.

Semafor jest jednoznacznie identyfikowany przez dodatni± liczbê ca³kowit± (jego semid) i jest skojarzony ze struktur± typu struct semid_ds, zdefiniowan± w pliku <sys/sem.h>, która sk³ada siê z nastêpuj±cych pól:

       struct ipc_perm sem_perm;
       time_t sem_otime;        /* czas ostatniej operacji */

       time_t sem_ctime;        /* czas ostatniej zmiany */

       ushort sem_nsems;        /* liczba semaforów w zestawie */

sem_perm
Struktura ipc_perm, która okre¶la prawa dostêpu do zestawu semaforów.
sem_otime
Czas ostatniego wywo³ania funkcji systemowej semop.
sem_ctime
Czas ostatniego wywo³ania funkcji systemowej semctl, która zmieni³a element przedstawionej powy¿ej struktury lub jeden z semaforów nale¿±cych do zestawu.
sem_nsems
Liczba semaforów w zestawie. Ka¿dy semafor zestawu jest identyfikowany przez dodatni± liczbê ca³kowit± z zakresu od 0 do sem_nsems-1.

Semofor jest struktur± typu struct sem, która sk³ada siê z nastêpuj±cych pól:

       ushort semval;   /* warto¶æ semafora */

       short sempid;    /* PID procesu ostatniej operacji */

       ushort semncnt; /* liczba oczekuj±cych na zwiêkszenie semval */

       ushort semzcnt; /* liczba oczekuj±cych na semval = 0 */

semval
Warto¶æ semafora: nieujemna liczba ca³kowita.
sempid
Identyfikator ostatniego procesu, który wykona³ operacjê na tym semaforze.
semncnt
Liczba wstrzymanych procesów oczekuj±cych na zwiêkszenie warto¶ci zmiennej semval.
semznt
Liczba wstrzymanych procesów oczekuj±cych a¿ zmienna semval przyjmie warto¶æ zero.

Segmenty pamiêci wspólnej

Segment pamiêci wspólnej jest jednoznacznie identyfikowany przez dodatni± liczbê ca³kowit± (jego shmid) i jest skojarzony ze struktur± typu struct shmid_ds, zdefiniowan± w <sys/shm.h>, która sk³ada siê z nastêpuj±cych pól:

       struct ipc_perm shm_perm;
       int shm_segsz;   /* rozmiar segmentu */

       ushort shm_cpid;         /* PID procesu, który utworzy³ segment */

       ushort shm_lpid;         /* PID ostatnio operuj±cego na segmencie */

       short shm_nattch;        /* liczba aktualnych przy³±czeñ */

       time_t shm_atime;        /* czas ostatniego przy³±czenia*/

       time_t shm_dtime;        /* czas ostatniego od³±czenia*/

       time_t shm_ctime;        /* czas ostatniej zmiany */

shm_perm
Struktura ipc_perm, która okre¶la prawa dostêpu do segmentu pamiêci wspólnej.
shm_segsz
Rozmiar segmentu pamiêci wspólnej w bajtach.
shm_cpid
Identyfikator procesu, który utworzy³ ten segment pamiêci wspólnej.
shm_lpid
Identyfikator procesu, który ostatni wykona³ funkcjê systemow± shmat lub shmdt.
shm_nattch
Liczba aktualnych, aktywnych przy³±czeñ do tego segmentu pamiêci wspólnej.
shm_atime
Czas ostatniego wykonania funkcji systemowej shmat.
shm_dtime
Czas ostatniego wykonania funkcji systemowej shmdt.
shm_ctime
Czas ostatniego wykonania funkcji systemowej shmctl, w wyniku którego zmienione zosta³o shmid_ds.

ZOBACZ TAK¯E

ftok(3), msgctl(2), msgget(2), msgrcv(2), msgsnd(2), semctl(2), semget(2), semop(2), shmat(2), shmctl(2), shmget(2), shmdt(2)