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