| Axel Rogat |
| Betriebssysteme und betriebssystemnahes Programmieren |
|   |
9.1: FIFOs
| Kapitel 9 |
9.3: Message Queues 
|
|   |
|   | 9.2 IPC-Mechanismen |   |
|   |
Es gibt wenig sinnvolle Synchronisations-Mechanismen, die in POSIX definiert
sind (außer dem Record Locking, s.u.). System V definiert allerdings
gleich drei davon, die sich im Lauf der Zeit über fast alle UNIX-Versionen
(auch Linux) verbreitet haben:
Bemerkungen:
Das funktioniert allerdings nur, wenn systemweit die Verwendung der
Schlüssel festgelegt ist, so daß es nicht zu Überschneidungen
kommen kann. Deshalb geht man meist einen anderen Weg:
Der Server-Prozeß legt (mit IPC_PRIVATE) das IPC-Objekt an und legt
dessen ID in einer vorbestimmten Datei ab ("Lockfile"), aus der sie sich
die Server-Prozesse wiederum abholen. So werden wir meist arbeiten.
Alle beteiligten Prozesse müssen sich dennoch auf eine existierende Datei
einigen, beispielsweise:
Gelöscht werden IPC-Objekte mit einem speziellen
_ctl-Aufruf (nur vom Besitzer).
------ Semaphore Arrays --------
semid owner perms nsems status
3 root 0 1
------ Shared Memory Segments --------
shmid owner perms bytes nattch status
0 nobody 600 46084 6 dest
Das Kommando ipcrm löscht ein IPC-Objekt, die Berechtigung dazu
vorausgesetzt. Es wird die Art des Objekts (sem, msg oder
shm) und die ID angegeben:
Es wird jeweils ein Satz von Operationen zur Verfügung gestellt, der aber
immer eine Funktion _get (Erfragen/Anlegen eines IPC-Objekts)
und eine Funktion _ctl (IPC-Kontrolle) enthält, beispielsweise
Ein IPC-Objekt (aller drei Typen) wird durch einen Schlüssel vom Typ
key_t (aus sys/ipc.h) identifiziert. Die
_get-Funktionen verhalten sich dabei alle wie folgt:
Ansonsten, falls das Bit IPC_CREAT in flg gesetzt ist,
wird ein neues Objekt kreiert und dessen ID zurückgegeben.
Sonst wird mit Fehlerstatus abgebrochen.
UNIX
key_t ftok(char *pathname, char proj);
errechnet aus dem Pfadnamen pathname und dem Projektnamen
proj einen Schlüssel vom Typ key_t. Es gehen dabei
Gerätenummer des beteiligten Dateisystems und I-Number der Datei ein.
Die Einzigartigkeit des Schlüssels im ganzen System ist nicht
garantiert, aber relativ wahrscheinlich.
|   |
9.1: FIFOs
| Startseite |
9.3: Message Queues 
|
|   |