Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ spinlock(3X) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

mpcntl(3X)

spinlock(3X)                                                   spinlock(3X)

NAME
     spinlock, initspin, spinunlock, cspinlock, yield - Benutzersynchroni-
     sation

SYNTAX
     cc [option ...] datei ... -lmproc

     #include <ulocks.h>

     void initspin(spinlockt *lck, long spincnt);

     void spinlock(spinlockt *lck);

     void spinunlock(spinlockt *lck);

     int cspinlock(spinlockt *lck);

     void yield();

BESCHREIBUNG
     Die einfachste Synchronisationsmethode für eine Multiprozessor-Umge-
     bung ist die sogenannte "spinlock"-Methode, die auch anderen Synchro-
     nisationsmethoden zugrundeliegt. Diese Methode ist abhängig von einer
     unteilbaren Lesen-Modifizieren-Schreiben-Operation, die vom System zur
     Verfügung gestellt wird. Die Methode wird auf unterschiedlichen CPU-
     Architekturen unterschiedlich implementiert; unterschiedliche System-
     architekturen unterstützen sie auch auf unterschiedliche Art und
     Weise. Normalerweise werden diese systemnahen Operationen in Maschi-
     nensprache codiert. Es werden einige Grundmethoden zur Verfügung
     gestellt, um nicht auf die einzelnen Implementationsformen auf den
     unterschiedlichen Rechnern eingehen zu müssen.

     Eine Anwendung erfolgt in der Regel durch kooperierende Prozesse, die
     bestimmte Adreßbereiche (wie gemeinsame Speicherbereiche) gemeinsam
     nutzen. Hierdurch wird der Zugriff auf gemeinsame Ressourcen und
     Datenstrukturen gesteuert. Die Ziel-Datenstruktur sieht folgendermaßen
     aus:

      typedef struct spinlock {
          volatile int   sllock;
          long           slscount;
      } spinlockt;

     initspin() initialisiert eine Zielsperre, die von diesen Methoden ver-
     wendet wird. initspin() hat zwei Argumente: lck ist ein Zeiger auf die
     Ziel-Datenstruktur spinlockt, spincnt ist die Anzahl der Wartezyklen,
     die auf ein gesperrtes Ziel angewandt werden, bevor der aufrufende
     Prozeß die CPU freigibt. Der Wert -1 für spincnt bedeutet eine unend-
     liche Anzahl an Wartezyklen (der Prozeß gibt die CPU nicht freiwillig
     frei).





Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

spinlock(3X)                                                   spinlock(3X)

     spinlock() versucht, die durch lck angegebene Sperre zu erzielen. Ent-
     weder diese Funktion wird eine bestimmte Anzahl an Wartezyklen ausfüh-
     ren (festgelegt durch den Initialisierungsparameter spincnt), bevor
     die CPU schließlich freigegeben wird, oder sie wird unendlich oft wie-
     derholt (wenn spincnt den Wert -1 hat), bis die Sperre erzielt worden
     ist. Das Betriebssystem kann die zur Verfügung stehende Zeit aller-
     dings jederzeit beenden.

     spinunlock() gibt die Sperre, die durch lck angegeben ist, frei.
     spinunlock() bewirkt das Gegenteil von spinlock().

     Die bedingte spinlock-Operation cspinlock() versucht, die angegebene
     Sperre lck zu erzielen, und gibt den Status der Sperre zurück. Wenn
     die Sperre bereits besteht, werden keine Wartezyklen ausgeführt, und
     es wird ein Fehler gemeldet (Rückgabewert ungleich Null). Wenn die
     Sperre erzielt werden kann, wird Null zurückgegeben.

     yield() ermöglicht die Freigabe der CPU ohne Blockieren (implementiert
     mit der Option mpcntlyield von mpcntl()). Diese Funktion kehrt sofort
     zurück, wenn der aufrufende Prozeß eine ausreichend hohe Priorität
     hat, so daß die Ausführung fortgesetzt werden kann.

SIEHE AUCH
     mpcntl(3X).






























Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026