Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ sema(4) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

idinstall(1M)

mdevice(4)

sdevice(4)

sema(4)                                                             sema(4)

NAME
     sema - Format einer multi-threaded Systemkern-Konfigurationsdatei

SYNTAX
     sema

BESCHREIBUNG
     Die Datei sema ist im Verzeichnis /etc/conf/cf.d enthalten und ent-
     steht durch die Verkettung von Einzeldateien im Verzeichnis
     /etc/conf/sema.d. Sie enthält für jeden Gerätetreiber und jedes konfi-
     gurierbare Software-Modul innerhalb des aufzubauenden Systems eine
     einzeilige Definition mit multi-threaded Attributen. "Multi-threaded"
     bedeutet, daß zwei oder mehr CPUs gleichzeitig Maschinenbefehle aus-
     führen können, die im Befehlsvorrat des Gerätetreibers oder Moduls
     enthalten sind. Wenn in der Datei sema weder ein Treiber noch ein
     Modul definiert ist, werden automatisch die nachfolgend aufgeführten
     Standard-Attribute benutzt. Diese Standard-Attribute sind hersteller-
     spezifisch; sie können also in den verschiedenen Implementierungen
     unterschiedlich definiert sein.

     Wenn das nicht definierte Modul bzw. Gerät mit dem STREAMS-Mechanismus
     arbeitet, so geht das System davon aus, daß das Gerät bzw. das Modul
     nicht multi-threaded ist; das Betriebssystem belegt dann einen
     treiber- bzw. modul-spezifischen Kompatabilitäts-Semaphoren, bevor es
     Maschinenbefehle aus dem Befehlsvorrat des Treibers bzw. Moduls aus-
     führt.

     Wenn das nicht definierte Modul bzw. Gerät nicht mit dem STREAMS-
     Mechanismus arbeitet, geht das System von einem multi-threaded Treiber
     bzw. Modul aus.

     Derzeit wird sema nur für STREAMS-Treiber und -Module ausgewertet.
     Bisher müssen Treiber und Module, die nicht mit dem STREAMS-Mechanis-
     mus arbeiten, als multi-threaded Treiber bzw. Module codiert werden,
     da das Betriebssystem nicht garantieren kann, daß die Maschinenbefehle
     eines Treibers bzw. Moduls nicht parallel auf mehreren CPUs ausgeführt
     werden. Außerdem müssen auch STREAMS-Treiber und Module mit Inter-
     rupt-Handlern für Geräte multi-threaded sein, da es keine Möglichkeit
     gibt, das Betriebssystem so zu konfigurieren, daß es Interrupt-Befehle
     an eine bestimmte CPU schickt, oder daß es vor dem Aufrufen des Inter-
     rupt-Handlers des Treibers bzw. Moduls einen Kompabilitäts-Semaphoren
     belegt.

     Jede Zeile in sema ist eine Erweiterung der Master-Datei aus einem
     Driver Software Package (DSP), wie es entweder mit dem Basissystem
     ausgeliefert oder später mit idinstall installiert wurde.

     Jede Zeile enthält mehrere durch Zwischenraumzeichen voneinander
     getrennte Felder; die Felder sind nachfolgend beschrieben. In jedem
     Feld muß entweder ein Wert oder ein Bindestrich (-) stehen.





Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

sema(4)                                                             sema(4)

     1. Device name: In diesem Feld ist der maximal achtstellige interne
        Name des Geräts bzw. Moduls enthalten. Beim ersten Zeichen des
        Namens muß es sich um einen Buchstaben handeln; die übrigen Zeichen
        können Buchstaben, Ziffern oder Unterstriche sein. In diesem Feld
        darf kein Bindestrich enthalten (-) sein.

     2. Compatibility semaphore name: Die Zeichenfolge in diesem Feld gibt
        den Namen des Kompatibilitäts-Semaphoren an, der vom Systemkern vor
        dem Aufrufen des Gerätetreibers bzw. Moduls belegt wird. Ein Sema-
        phoren-Name kann mehreren Semaphoren-Dateien zugeordnet sein;
        dadurch kann ein und derselbe Semaphor durch mehrere Treiber mit
        gemeinsamen Datenstrukturen genutzt werden. Wenn in diesem Feld ein
        Bindestrich (-) enthalten ist und kein Konflikt mit dem vierten
        Feld besteht, ist kein Kompatibilitäts-Semaphor erforderlich. Das
        vierte Feld wird ausschließlich von Gerätetreibern und Modulen
        benutzt, die mit dem STREAMS-Mechanismus arbeiten; selbst wenn in
        diesem Feld lediglich ein Bindestrich enthalten ist, ist die Angabe
        eines Kompatibilitäts-Semaphoren erforderlich (d. h. PLCOMPAT). In
        diesem Fall kann ein Bindestrich bedeuten, daß als Name standardmä-
        ßig der Inhalt des ersten Felds (also der interne Gerätename)
        benutzt wird.

     3. Logical CPU number: Die in diesem Feld enthaltenen Dezimalziffern
        geben die logische CPU an, an die das Gerät bzw. Modul gebunden
        ist. Den logischen CPUs sind Nummern im Bereich 0 bis NCPU - 1
        zugeordnet. Die Konstante NCPU ist in /usr/include/sys/param.h ent-
        halten. Ein Bindestrich (-) in diesem Feld bedeutet, daß das Gerät
        bzw. Modul nicht an eine CPU gebunden ist. Wenn die logische CPU
        beim Aufrufen des Gerätetreibers bzw. Moduls nicht online ist, wird
        die CPU-Nummer auf die Nummer einer CPU abgebildet, die aktuell
        online ist. Wenn in diesem Feld kein Bindestrich (-) enthalten ist,
        muß im zweiten Feld (der Name des Kompatibilitäts-Semaphoren) ein
        Bindestrich (-) enthalten sein; es ist nicht möglich, daß ein Trei-
        ber oder Modul sowohl an eine bestimmte CPU gebunden ist als auch
        einen Kompatibilitäts-Semaphoren hat.

     4. Degree of parallelism: In diesem Feld muß ein Bindestrich (-) ent-
        halten sein, wenn der Treiber bzw. das Moduls nicht mit dem
        STREAMS-Mechanismus arbeitet. Andernfalls enthält dieses Feld eine
        Folge von Zeichen, die für den Grad an Parallelität steht, mit dem
        ein STREAMS-Treiber oder Modul ausgeführt wird. Es wird zwischen
        fünf verschiedenen Standard-Parallelitätsgraden unterschieden:

        PLCOMPAT
             (Stufe 1 bzw. Kompatibilitäts-Modus) Mit diesem Parallelitäts-
             grad wird ein single-threaded STREAMS-Treiber bzw. Modul ange-
             geben, der/das entweder an eine logische CPU gebunden ist oder
             mit einem belegten Kompatibilitäts-Semaphor aufgerufen wird.
             Ob ein single-threaded Treiber bzw. Modul mit der CPU-Bindung
             oder einem Kompatibilitäts-Semaphoren arbeitet, hängt davon
             ab, ob Feld 3 einen Bindestrich (-) enthält. Wenn weder Feld 2
             noch Feld 3 einen Wert enthält, so wird dem Treiber bzw. Modul


Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

sema(4)                                                             sema(4)

             ein Kompatibilitäts-Semaphor zugeordnet (Standard).

             Wenn der Treiber bzw. das Modul durch den Kompatibilitäts-
             Semaphoren das Attribut single-threaded erhält, werden - mit
             Ausnahme der Interrupt-Handler - sämtliche Einsprungspunkte
             miteinander synchronisiert, einschließlich der put-Prozeduren,
             Service-Prozeduren, Initialisierungs-, start-, open-, close-,
             timeout-, bufcall-Routinen und der erweiterten Routinen zur
             Freigabe von Nachrichten. Da der Kompatibilitäts-Semaphor
             nicht wiedereintrittsfähig ist, ist es auch keiner der Ein-
             sprungspunkte.

             Wenn die CPU-Bindung benutzt wird, um den Treiber bzw. das
             Modul single-threaded zu machen, werden sämtliche Einsprungs-
             punkte (mit Ausnahme der Interrupt-Handler) durchlaufen und an
             eine bestimmte CPU gebunden. Somit wird durch die Treiber-
             bzw. Modul-Umgebung (ohne Interrupts) exakt die Umgebung eines
             Ein-Prozessor-Systems simuliert, so daß das Setzen der Priori-
             tätsebenen über die spl-Funktionen (set priority level) bzw.
             die Interrupt-Prioritätsebenen die Aufgabe des Treibers bzw.
             Moduls bleiben.

             Die CPU-Bindung hat gegenüber einem Kompatibilitäts-Semaphoren
             eine Reihe von Vor- und Nachteilen. Ein Semaphor ermöglicht
             einem Treiber bzw. Modul den "fließenden" Übergang zu einem
             beliebigen verfügbaren Prozessor im System; somit bewirkt die-
             ser Ansatz automatisch eine gleichmäßige Auslastung der Pro-
             zessoren. In bezug auf die gleichmäßige Auslastung der Prozes-
             soren ist die CPU-Bindung im Nachteil; sie hat jedoch den Vor-
             teil, daß der Prozeß immer auf einer bestimmten CPU abläuft
             und die Cache-Zugriffe auf den Hauptspeicher pro CPU nicht so
             häufig ungültig gemacht werden, wie wenn das Modul zur ersten
             verfügbaren CPU springen würde. Somit ist es in der Regel
             nicht empfehlenswert, ein einhängbares STREAMS-Modul an eine
             CPU zu binden, da es nicht auf einem STREAMS-Treiber einge-
             hängt werden kann, der an eine andere CPU gebunden ist.

        PLCOORDALL
             (Stufe 2) Auf dieser Stufe werden die Einsprungspunkte der
             vier Prozeduren (der Service-Prozedur auf der Leseseite, der
             put-Prozedur auf der Leseseite, der Service-Prozedur auf der
             Schreibseite, sowie der put-Prozedur auf der Schreibseite)
             miteinander synchronisiert. Es kann nur jeweils eine der vier
             Prozeduren ausgeführt werden; keine der Prozeduren ist wiede-
             reintrittsfähig. Es findet keine Synchronisation bzw. Seriali-
             sation mit timeout-, bufcall-Routinen, erweiterten Routinen
             zur Freigabe von Nachrichten oder Interrupt-Handlern statt.







Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

sema(4)                                                             sema(4)

        PLCOORDSRVPAIR
             (Stufe 3) Auf dieser Stufe werden die Einsprungspunkte für die
             beiden Service-Prozeduren (die Service-Prozedur auf der Lese-
             und Schreibseite) miteinander synchronisiert. Es kann nur
             jeweils eine der beiden Service-Prozeduren ausgeführt werden,
             und keine der beiden Service-Prozeduren ist wiedereintrittsfä-
             hig. Die put- und read-Prozeduren können parallel zueinander
             und zu einer der Service-Prozeduren ablaufen. Die read- und
             put-Prozeduren sind ebenfalls wiedereintrittsfähig. Es findet
             keine Synchronisation oder Serialisation mit timeout- und
             bufcall-Routinen, erweiterten Routinen zur Nachrichtenfreigabe
             oder Interrupt-Handlern statt.

        PLCOORDSRVS
             (Stufe 4) Auf dieser Stufe ist gewährleistet, daß keine der
             Service-Prozeduren wiedereintrittsfähig ist. Anders als auf
             der Stufe PLCOORDSRVPAIR können die Service-Prozeduren auf
             der Lese- und Schreibseite parallel ablaufen. Die read- und
             put-Prozeduren können parallel zueinander und zu den Service-
             Prozeduren ablaufen. Die read- und put-Prozeduren sind eben-
             falls wiedereintrittsfähig. Es findet keine Synchronisation
             oder Serialisation mit timeout- und bufcall-Routinen, erwei-
             terten Routinen zur Freigabe von Nachrichten oder Interrupt-
             Handlern statt.

        PLNOCOORD
             (Stufe 5) Auf dieser Stufe können die Einsprungspunkte aller
             vier Prozeduren (der Service-Prozedur auf der Leseseite, der
             put-Prozedur auf der Lese- und Schreibseite, der Service-
             Prozedur auf der Schreibseite sowie der put-Prozedur auf der
             Schreibseite) parallel zueinander durchlaufen werden. Außerdem
             sind alle vier Prozeduren wiedereintrittsfähig. Es findet
             keine Synchronisation oder Serialisation mit timeout- und
             bufcall-Routinen, erweiterten Routinen zur Nachrichtenfreigabe
             oder Interrupt-Handlern statt.

     Der gewünschte Grad an Parallelität kann in Form einer hexadezimalen
     Konstanten angegeben werden. Die Konstante muß aus den Zeichen 0x
     bestehen, gefolgt von vier hexadezimalen Ziffern. Jede Ziffer gibt
     eine Koordinations-Maske für eine bestimmte Prozedur an. Die erste
     Ziffer gibt die Maske für die put-Prozedur auf der Schreibseite an.
     Die zweite Ziffer gibt die Maske für die Service-Prozedur auf der
     Schreibseite an. Die dritte Ziffer gibt die Maske für die put-Prozedur
     auf der Leseseite an. Die vierte Ziffer gibt die Maske für die
     Service-Prozedur auf der Leseseite an. Jede aus hexadezimalen Ziffern
     bestehende Maske gibt an, zu welcher der der vier Prozeduren die
     betreffende Prozedur nicht parallel ablaufen kann. Wenn das höchstwer-
     tige Bit der Ziffern-Maske gesetzt ist, kann die Prozedur nicht paral-
     lel zur put-Prozedur auf der Schreibseite ablaufen. Wenn das zweite
     Bit gesetzt ist, kann die Prozedur nicht parallel zur Service-Prozedur
     auf der Schreibseite ablaufen. Wenn das dritte Bit gesetzt ist, kann
     die Prozedur nicht parallel zur put-Prozedur auf der Leseseite


Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

sema(4)                                                             sema(4)

     ablaufen. Wenn das vierte Bit gesetzt ist, kann die Prozedur nicht
     parallel zur Service-Prozedur auf der Leseseite ablaufen. Wenn die
     dritte Hex-Ziffer beispielsweise den Wert "c", also den Binärwert
     "1100", hat, so kann die put-Prozedur auf der Leseseite nicht parallel
     zu den put- und Service-Prozduren auf der Schreibseite ablaufen. Wenn
     die put-Prozedur auf der Leseseite jedoch wiedereintrittsfähig ist,
     kann sie parallel zur Service-Prozdur auf der Leseseite ablaufen.
     Beachten Sie, daß die Ziffern-Masken für die put and Service-Prozdur
     auf der Schreibseite in diesem Beispiel so gesetzt sind, daß diese
     Prozeduren nicht gemeinsam mit der put-Prozedur auf der Leseseite
     ablaufen können. Weiterhin ist hier zu beachten, daß

          PLCOORDALL und 0xffff gleichbedeutend sind, ebenso wie
          PLCOORDSRVPAIR und 0x0505,
          PLCOORDSRVS und 0x0401 sowie
          PLNOCOORD und 0x0000.

     Beim normalen Grad an Parallelität findet keine Synchronisation oder
     Serialisierung mit timeout- und bufcall-Routinen, erweiterten Routinen
     zur Freigabe von Nachrichten oder Interrupt-Handlern statt.

     Wenn es sich beim STREAMS-Treiber um einen Multiplexer handelt, können
     für die obere und untere Hälfte unterschiedliche Parallelitätsgrade
     angegeben werden. Dazu wird der Parallelitätsgrad für die obere Hälfte
     angegeben, gefolgt von einem Schrägstrich (/) und dem Parallelitäts-
     grad für die untere Hälfte. Sowohl für die obere als auch für die
     untere Hälfte können entweder die Standardwerte beibehalten oder
     benutzer-spezifische Werte definiert werden. Wenn es sich bei einem
     der Parallelitätsgrade jedoch um PLCOMPAT handelt, muß der Paralleli-
     tätsgrad in der anderen Hälfte ebenfalls diesen Wert haben.

BEISPIELE
          drv  -       -       PLCOMPAT

     Der Treiber drv ist single-threaded; dies wird vom Betriebssystem über
     einen Kompatibilitäts-Semaphoren realisiert (Standardname: drv).

          drvb -       5       PLCOMPAT

     Der Treiber drvb ist single-threaded; dies wird vom Betriebssystem mit
     Hilfe einer Bindung an die logische CPU 5 erreicht.

          drvc drvc    -       PLCOMPAT
          drvd drvc    -       PLCOMPAT

     Die Treiber drvc und drvd sind beide single-threaded; dies wird vom
     Betriebssystem mit Hilfe eines Kompatibilitäts-Semaphors namens drvc
     erreicht. Da jedoch beide Treiber denselben Semaphoren benutzen, kön-
     nen die beiden Treiber nicht gleichzeitig aktiv sein.





Seite 5                      Reliant UNIX 5.44               Gedruckt 11/98

sema(4)                                                             sema(4)

          drvx -       -       PLCOORDSRVS

     drvx ist ein multi-threaded STREAMS-Treiber. Es kann immer nur jeweils
     eine Service-Prozedur auf einer bestimmten Warteschlange ablaufen.

          mux  -       -       PLCOORDALL/0x0240

     Der STREAMS-Treiber mux ist ein multi-threaded Multiplexer. Die obere
     Hälfte koordiniert alle vier Prozeduren miteinander. Die untere Hälfte
     stellt sicher, daß die Service-Prozdur auf der Schreibseite nicht par-
     allel zur put-Prozedur auf der Leseseite abläuft und umgekehrt.

SIEHE AUCH
     idinstall(1M), mdevice(4), sdevice(4).








































Seite 6                      Reliant UNIX 5.44               Gedruckt 11/98

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