Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

priocntl(1)

dispadmin(1M)

idbuild(1M)

priocntl(2)

mpcntl(3X)

rt_dptbl(4)                                                     rt_dptbl(4)

NAME
     rtdptbl - Parametertabelle für Echtzeit-Scheduler

BESCHREIBUNG
     Der Prozeß-Scheduler ist der Teil des Systemkerns, der die Aufteilung
     der CPU unter den Prozessen steuert. Es wird zwischen verschiedenen
     Scheduling-Klassen unterschieden, wobei jede Klasse eine Scheduling-
     Strategie definiert, die die Zuteilung der Zeitscheiben für die CPU an
     die Prozesse innerhalb dieser Klasse steuert. Jeder Scheduling-Klasse
     sind verschiedene Prioritäts-Warteschlangen zugeordnet, auf die von
     den ablaufbereiten Prozessen Verweise hergestellt werden. Diese
     Prioritäts-Warteschlangen werden durch die Systemkonfiguration auf
     eine Reihe von globalen Scheduling-Prioritäten abgebildet, die den
     Prozessen innerhalb der Klasse zugeteilt sind. (Der Scheduler wählt
     zur Ausführung in jedem Fall den Prozeß mit der höchsten globalen
     Scheduling-Priorität, der auf einer bestimmten CPU ablaufen darf
     (siehe PROZESSOR-AFFINITÄT UND BINDUNGS-BETRACHTUNGEN, unten). Die
     jeder Klasse zugeordneten Prioritäts-Warteschlangen werden von der
     betreffenden Klasse als unmittelbar aufeinanderfolgende Gruppen von
     Prioritätsstufen betrachtet; die Prioritätsstufen sind von 0 (niedrig-
     ste Priorität) bis n (höchste Priorität) durchnumeriert, wobei n
     abhängig von der Konfiguration ist. Die globalen Scheduling-
     Prioritäten, auf die die Warteschlangen für eine bestimmte Klasse
     abgebildet werden, müssen nicht unbedingt bei Null beginnen und durch-
     gängig numeriert sein (dies hängt von der jeweiligen Konfiguration
     ab).

     In der Echtzeit-Klasse gibt es eine kern-interne Tabelle, in der für
     jede Prioritätsstufe ein Eintrag mit den Prioritäten dieser Stufe ent-
     halten ist. Diese Tabelle wird als Parametertabelle des Echtzeit-
     Schedulers (rtdptbl) bezeichnet. Die Tabelle rtdptbl besteht aus
     einem Array von Parameter-Strukturen (struct rtdpent), wobei jeder
     der n Prioritätsstufen eine Parameter-Struktur zugeordnet ist. Die
     Eigenschaften einer bestimmten Prioritätsstufe i werden durch die ite
     Parameter-Struktur in diesem Array (rtdptbl[i]) definiert.

     Eine Parameter-Struktur besteht aus den nachfolgend aufgeführten Ele-
     menten. Diese Elemente werden auch in der Include-Datei
     /usr/include/sys/rt.h beschrieben.

     rtglobpri     Die globale Scheduling-Priorität, die dieser Priori-
                    tätsstufe zugeordnet ist. Die Zuordnung zwischen den
                    Echtzeit-Prioritätsstufen und den globalen Scheduling-
                    Prioritäten wird beim Laden des Systems durch die
                    Systemkonfiguration festgelegt. Die Werte von
                    rtglobpri können nicht mit dispadmin(1M) geändert wer-
                    den.








Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

rt_dptbl(4)                                                     rt_dptbl(4)

     rtquantum     Die Zeitdauer in CPU-Takten (HZ), die den Prozessen auf
                    dieser Stufe zugeordnet ist. Der Wert für die Zeitdauer
                    stellt lediglich einen Standard- bzw. Anfangswert für
                    die Prozesse auf einer bestimmten Stufe dar (die einem
                    Echtzeit-Prozeß zugeteilte Zeitdauer kann durch den
                    Benutzer mit dem Kommando priocntl oder mit dem Syste-
                    maufruf priocntl geändert werden).

     Der Systemverwalter kann das Verhalten des Echtzeit-Teils des Schedu-
     lers durch eine Neukonfiguration von rtdptbl ändern. Hierzu gibt es
     zwei Möglichkeiten, die nachfolgend beschrieben werden.

KONFIGURATION BEIM BINDEN DES SYSTEMKERNS
     Die Tabelle rtdptbl kann beim Binden des Systemkerns neu konfiguriert
     werden, indem die gewünschten Werte in der Datei
     /etc/conf/pack.d/rt/space.c angegeben und dann das System mit der
     automatischen Konfigurationsprozedur neu konfiguriert wird [siehe
     idbuild(1M)]. Dies stellt die einzige Möglichkeit zum Ändern der
     Anzahl der Echtzeit-Prioritätsstufen bzw. der globalen, von der
     Echtzeit-Klasse benutzten Scheduling-Prioritäten dar.

DIE DISPADMIN-KONFIGURATIONSDATEI
     Die rtquantum-Werte in der Tabelle rtdptbl können auf einem laufen-
     den System mit dem Kommando dispadmin(1M) überprüft und geändert wer-
     den. Wenn dispadmin für die Echtzeit-Klasse aufgerufen wird, kann der
     Systemverwalter die aktuelle rtdptbl-Konfiguration aus der kern-
     internen Tabelle laden oder die kern-interne Tabelle mit Werten aus
     einer Konfigurationsdatei überschreiben. Die Konfigurationsdatei, die
     als Eingabe für dispadmin benutzt wird, muß das unten beschriebene
     Format haben.

     Leerzeilen werden ignoriert. Alle Zeichen zur Rechten eines Nummern-
     Zeichens (#) werden als Kommentar betrachtet. In der ersten Zeile, bei
     der es sich weder um eine Leer- noch um eine Kommentarzeile handelt,
     muß die Auflösung enthalten sein. Die Auflösung gibt die Einheit an,
     in der die für die Zeitdauer angegebenen Werte interpretiert werden
     sollen. Die Auflösung wird im Format

          RES=res

     angegeben. res ist dabei eine positive Ganzzahl im Bereich 1 bis
     1000000000 einschließlich; als Einheit wird dann der Kehrwert von res
     in Sekunden benutzt. So steht beispielsweise RES=1000 für die Zeitein-
     heit Millisekunden. Es kann mit sehr hohen Auflösungen (Nanosekunden)
     gearbeitet werden; allerdings werden die für die Zeitdauer angegebenen
     Werte auf das nächste ganzzahlige Vielfache der Auflösung der Syste-
     muhr aufgerundet.







Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

rt_dptbl(4)                                                     rt_dptbl(4)

     In den übrigen Zeilen der Datei werden die rtquantum-Werte für jede
     der Echtzeit-Prioritätsstufen angegeben. In der ersten Zeile steht die
     Zeitdauer für die Echtzeitstufe 0, in der zweiten Zeile die Zeitdauer
     für die Echtzeitstufe 1 usw. Für jede konfigurierte Echtzeit-
     Prioritätsstufe muß exakt eine Zeile enthalten sein. Jeder
     rtquantum-Eintrag muß entweder eine positive Ganzzahl zur Angabe der
     gewünschten Zeitdauer (in der durch res angegebenen Auflösung) oder
     das Symbol RTTQINF enthalten, durch das dieser Stufe eine unendlich
     lange Zeitdauer zugeordnet wird.

BEISPIEL
     Das folgende Beispiel zeigt einen Auszug aus einer dispadmin-
     Konfigurationsdatei. In jeder Zeile, in der eine Zeitdauer angegeben
     wird, gibt es einen Kommentar zur Angabe der zugehörigen Prioritäts-
     stufe. Die Stufennummern geben die Prioritäten innerhalb der
     Echtzeit-Klasse an; die Zuordnung dieser Echtzeit-Prioritäten zu den
     entsprechenden globalen Scheduling-Prioritäten wird anhand der Konfi-
     gurationsdatei rt/space.c festgelegt. Die Stufennummern werden ledig-
     lich zur einfacheren Lesbarkeit der Datei angegeben und werden wie
     jeder Kommentar von dispadmin ignoriert. dispadmin geht davon aus, daß
     die Zeilen innerhalb der Datei in aufsteigender Folge ihrer Priori-
     tätsstufen (von Null bis zur konfigurations-spezifischen maximalen
     Echtzeit-Priorität) angeordnet sind. Die Stufennummern in den Kommen-
     taren sollten diese Reihenfolge im Normalfall ebenfalls einhalten;
     eine andere Reihenfolge hat allerdings keinerlei Auswirkungen auf die
     Funktionsweise von dispadmin.

     # Konfiguration des Echtzeit-Schedulers
     RES=1000

     # ZEITDAUER                     PRIORITÄTS-
     # (rtquantum)                      STUFE
           1000                    #        0
           1000                    #        1
           1000                    #        2
           1000                    #        3
           1000                    #        4
           1000                    #        5
           1000                    #        6
           1000                    #        7
           1000                    #        8
           1000                    #        9
            800                    #       10
            800                    #       11
              .                    .        .
              .                    .        .
              .                    .        .
            100                    #       58
            100                    #       59





Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

rt_dptbl(4)                                                     rt_dptbl(4)

PROZESSOR-AFFINITÄT UND BINDUNGS-BETRACHTUNGEN
     Um die Trefferquoten eines Multiprozessor-Systems im Cache-Speicher zu
     erhöhen, sollte ein Prozeß im Normalfall auf einem bestimmten Prozes-
     sor ablaufen. Diese Affinität zu einem bestimmten Prozessor kann die
     erforderliche Speicherbandbreite des Prozesses (und für das System als
     Ganzes) verringern. Wenn ein Prozeß nicht erst "vor kurzem" abgelaufen
     ist, befinden sich für jeden der Prozessoren mit hoher Wahrscheinlich-
     keit nur noch wenige Daten im Cache-Speicher - und dadurch sollte er
     seine Affinität für einen bestimmten Prozessor verlieren.

     Dieser Affinitäts-Mechanismus kann vom Systemverwalter prozeßweise
     aktiviert und deaktiviert werden [siehe mpcntl(1M), mpcntl(3X)]. Da
     Echtzeit-Funktionen zeitkritisch sind, ist der Affinitäts-Mechanismus
     standardmäßig auf off gestellt - dadurch wird die Echtzeit-Funktion
     auf dem ersten verfügbaren Prozessor ablaufen (vorausgesetzt, es gibt
     keinen Prozeß mit einer höheren Priorität).

     Ein Prozeß kann auch an zwei oder mehr Prozessoren gebunden werden.
     Dies bewirkt, daß der Prozeß ausschließlich auf einem Prozessor aus
     dieser Gruppe abläuft. Wenn es einen aktuell verfügbaren Prozessor
     gibt, an den der Prozeß jedoch nicht gebunden ist, wartet der Prozeß
     so lange, bis auf einem Prozessor aus seiner Gruppe kein Prozeß mit
     höherer Priorität mehr läuft.

     Die Bindung an einen bestimmten Prozessor bzw. eine bestimmte
     Prozessor-Gruppe kann vom Prozeß [siehe mpcntl(3X)] oder vorübergehend
     vom Systemkern hergestellt werden (im letzteren Fall muß der System-
     kern gerade einen Treiber-Code ausführen, der auf einer bestimmten CPU
     ablaufen muß).

DATEIEN
     /usr/include/sys/rt.h

     /etc/conf/pack.d/rt/space.c

SIEHE AUCH
     priocntl(1), dispadmin(1M), idbuild(1M), priocntl(2), mpcntl(3X).

















Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

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