Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ priocntl(2) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

priocntl(1)

dispadmin(1M)

exec(2)

fork(2)

nice(2)

priocntlset(2)

mpcntl(3X)

types(5)

priocntl(2)                                                     priocntl(2)

NAME
     priocntl - Zeitscheibenverteilung von Prozessen verwalten

SYNTAX
     #include <sys/types.h>
     #include <sys/priocntl.h>
     #include <sys/procset.h>
     #include <sys/rtpriocntl.h>
     #include <sys/tspriocntl.h>
     #include <sys/fppriocntl.h>

     long priocntl(idtypet idtype, idt id, int cmd, ... /* arg */);

BESCHREIBUNG
     priocntl() erlaubt die Steuerung der Zeitscheibenverteilung (also der
     Zuweisung von Rechenzeit) aktiver Prozesse.

     Es gibt verschiedene Klassen von Prozessen mit jeweils unterschiedli-
     chen Zielen und Strategien zur Zeitscheibenverteilung, wobei jeder
     Prozeß genau einer Klasse angehört. Die drei gegenwärtig unterstützten
     Klassen sind die Echtzeit-Klasse, die Time-Sharing-Klasse und die
     Fixed-Priority-Klasse. Die Eigenschaften dieser Klassen werden unter
     den entsprechend benannten Abschnitten behandelt. Das Klassenattribut
     eines Prozesses wird bei den Systemaufrufen fork(2) oder exec(2)
     unverändert weitergegeben. Vorausgesetzt, Sie haben ausreichende
     Berechtigung, können Sie mit priocntl() die Klasse eines laufenden
     Prozesses oder mehrere Prozesse sowie andere Parameter zur Zeitschei-
     benverteilung ändern.

     In der voreingestellten Konfiguration hat ein ablauffähiger Echtzeit-
     Prozeß Vorrang vor jedem anderen Prozeß. Aus diesem Grund kann die
     falsche Verwendung von Echtzeit-Prozessen einen ausgesprochen negati-
     ven Einfluß auf die Systemleistung haben.

     priocntl() erlaubt die Angabe eines einzelnen Prozesses oder mehrere
     Prozesse, auf die der Systemaufruf angewendet werden soll. Der System-
     aufruf priocntlset(2) bietet dieselben Funktionen wie priocntl(2),
     stellt jedoch eine allgemeinere Schnittstelle zur Angabe von Prozeß-
     gruppen dar, auf die der Systemaufruf angewendet werden soll.
















Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

priocntl(2)                                                     priocntl(2)

     Bei priocntl() werden die Argumente idtype und id zur Angabe der Pro-
     zesse verwendet. Die Interpretation von id hängt vom Wert idtype ab.
     Die möglichen Werte für idtype und entsprechende Interpretationsmög-
     lichkeiten von id sind:

     PPID   id ist eine Prozeßnummer, welche einen einzelnen Prozeß angibt,
             auf den der priocntl()-Systemaufruf angewendet werden soll.

     PPPID  id ist die Prozeßnummer eines Vaterprozesses. Der priocntl()-
             Systemaufruf wird auf alle Prozesse angewendet, die über eine
             entsprechende Vaterprozeßnummer verfügen.

     PPGID  id ist eine Prozeßgruppennummer. Der priocntl()-Systemaufruf
             wird auf alle Prozesse der angegebenen Prozeßgruppe angewen-
             det.

     PSID   id ist eine Sitzungsnummer. Der priocntl()-Systemaufruf wird
             auf alle Prozesse der angegebenen Sitzung angewendet.

     PCID   id ist eine Klassennummer (zurückgegeben von priocntl
             PCGETCID, wie weiter unten erläutert). Der priocntl()-System-
             aufruf wird auf alle Prozesse der entsprechenden Klasse ange-
             wendet.

     PUID   id ist eine Benutzernummer. Der priocntl()-Systemaufruf wird
             auf alle Prozesse mit dieser effektiven Benutzernummer ange-
             wendet.

     PGID   id ist eine Gruppennummer. Der priocntl()-Systemaufruf wird
             auf alle Prozesse mit dieser effektiven Gruppennummer angewen-
             det.

     PALL   Der priocntl()-Systemaufruf wird auf alle existierenden Pro-
             zesse angewendet. Der Wert von id wird ignoriert. Die weiter
             unten beschriebenen Zugriffsbeschränkungen bleiben dabei gül-
             tig.

     Der Wert PMYID für id kann in Verbindung mit idtype verwendet werden,
     um die Prozeßnummer, die Vaterprozeßnummer, die Prozeßgruppennummer,
     die Sitzungsnummer, die Klassennummer, die Benutzernummer oder die
     Gruppennummer des aufrufenden Prozesses anzugeben.

     Damit Sie für einen bestimmten Prozeß die Parameter für die Zeitschei-
     benverteilung mit priocntl() ändern können (mit dem Kommando
     PCSETPARMS, wie weiter unten beschrieben), muß Ihre reale oder effek-
     tive Benutzernummer gleich der realen oder effektiven Benutzernummer
     dieses Prozesses sein, es sei denn, Sie haben als effektive Benutzer-
     nummer die des Systemverwalters. Dies sind die Mindestvoraussetzungen,
     die für alle Klassen gelten. Für einzelne Klassen können zusätzliche
     Beschränkungen gelten, wenn Prozesse auf diese Klasse eingestellt wer-
     den, und/oder wenn klassenabhängige Prozeßparameter gesetzt werden.



Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

priocntl(2)                                                     priocntl(2)

     Für die Zeitscheibenverteilung bei der Ausführung gewisser Systempro-
     zesse gibt es die besondere Klasse sys (der swapper-Prozeß zur Ein-
     und Auslagerung auf Platte gehört zum Beispiel dieser Klasse an). Es
     ist nicht möglich, die Klasse eines Prozesses auf sys zu setzen.
     Außerdem werden alle Prozesse der sys-Klasse, die sich in einer ange-
     gebenen Gruppe von Prozessen befinden, von priocntl() ignoriert. Wird
     beispielsweise PUID für idtype angegeben und enthält id den Wert
     Null, so werden alle Prozesse mit der Benutzernummer Null angegeben,
     außer Prozesse der Klasse sys und (wenn die Parameter mit PCSETPARMS
     verändert werden) der Prozeß init.

     Der Prozeß init ist dabei ein Sonderfall. Will ein priocntl()-Aufruf
     die Klasse oder andere Parameter für die Zeitscheibenverteilung des
     Prozesses init ändern (Prozeßnummer 1), so muß es sich dabei um den
     einzigen Prozeß handeln, der durch idtype und id angegeben wird. Der
     init-Prozeß kann jeder Klasse zugewiesen werden, die im System konfi-
     guriert ist, meistens ist jedoch die Time-Sharing-Klasse angemessen.

     Der Datentyp und der Wert von arg hängen vom Typ des Kommandos cmd ab.

     Die folgende Struktur wird von den Kommandos PCGETCID und
     PCGETCLINFO verwendet:

        typedef struct {
           idt  pccid;                 /* Klassennummer */
           char  pcclname[PCCLNMSZ];   /* Klassenname */
           long  pcclinfo[PCCLINFOSZ]; /* Klasseninformationen */
        } pcinfot;

     pccid ist eine Klassennummer, die von priocntl PCGETCID zurückgege-
     ben wird. pcclname ist ein Puffer der Länge PCCLNMSZ (definiert in
     sys/priocntl.h), in dem sich der Klassenname befindet (RT für die
     Echtzeit-Klasse, TS für die Time-Sharing-Klasse oder FP für die
     Fixed-Priority-Klasse).

     pcclinfo ist ein Puffer der Länge PCCLINFOSZ (definiert in
     sys/priocntl.h), in dem Informationen über die Attribute einer
     bestimmten Klasse abgelegt werden. Das Format dieser Daten ist klas-
     senabhängig und wird unter dem entsprechenden Abschnitt weiter unten
     beschrieben.

     Die folgende Struktur wird von den Kommandos PCSETPARMS und
     PCGETPARMS verwendet:











Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

priocntl(2)                                                     priocntl(2)

        typedef struct {
           idt  pccid;                   /* Prozeßklasse */
           long  pcclparms[PCCLPARMSZ];  /* Klassenabhängige Parameter */
        } pcparmst;

     pccid ist eine Klassennummer (zurückgegeben von priocntl PCGETCID).
     Die spezielle Klassennummer-ID PCCLNULL kann auch pccid zugewiesen
     werden, wenn das Kommando PCGETPARMS so verwendet wird, wie es weiter
     unten beschrieben wird.

     Der Puffer pcclparms dient zur Aufnahme klassenabhängiger Verwal-
     tungsparameter. Das Format dieses Parameters für die jeweilige Klasse
     wird unter dem entsprechenden Abschnitt weiter unten erklärt.
     PCCLPARMSZ ist die Länge des Puffers pcclparms und wird in
     sys/priocntl.h definiert.

   Kommandos

     PCGETCID
          Ruft die Klassennummer und Klassenattribute für eine bestimmte
          Klasse mit gegebenem Klassennamen ab. Die Argumente idtype und id
          werden ignoriert. Wenn arg ungleich NULL ist, wird angenommen,
          daß auf eine Struktur des Typs pcinfot verwiesen wird. Der Puf-
          fer pcclname enthält den Namen der Klasse, deren Attribute gele-
          sen werden.

          Bei erfolgreicher Ausführung wird die Klassennummer in pccid
          zurückgegeben, die Klassenattribute werden im Puffer pcclinfo
          zurückgeliefert, und der priocntl()-Aufruf liefert die Gesamtan-
          zahl der im System konfigurierten Klassen zurück (einschließlich
          der Klasse sys). Wenn die Klasse aus pcclname ungültig ist oder
          momentan nicht konfiguriert ist, liefert der priocntl()-Aufruf -1
          zurück und setzt errno auf EINVAL. Das Format der zurückgeliefer-
          ten Attributdaten für eine gegebene Klasse ist in
          sys/rtpriocntl.h, sys/tspriocntl.h oder sys/fppriocntl.h defi-
          niert und wird unter dem entsprechenden Abschnitt weiter unten
          beschrieben.

          Wenn arg ein Null-Zeiger ist, werden keine Attributdaten zurück-
          gegeben; der priocntl()-Aufruf liefert dann lediglich die Anzahl
          der konfigurierten Klassen zurück.

     PCGETCLINFO
          Ruft den Klassennamen und die Klassenattribute für eine gegebene
          Klassennummer ab. Die Argumente idtype und id werden ignoriert.
          Wenn arg ungleich Null ist, wird angenommen, daß auf eine Struk-
          tur des Typs pcinfot verwiesen wird. pccid ist die Klassennum-
          mer derjenigen Klasse, deren Attribute gelesen werden sollen.






Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

priocntl(2)                                                     priocntl(2)

          Bei erfolgreicher Ausführung wird der Klassenname im Puffer
          pcclname und die Klassenattribute im Puffer pcclinfo zurückge-
          geben; der priocntl()-Aufruf liefert die Gesamtanzahl der im
          System konfigurierten Klassen zurück (einschließlich der Klasse
          sys). Das Format der zurückgelieferten Attributdaten wird in den
          Include-Dateien sys/rtpriocntl.h, sys/tspriocntl.h oder
          sys/fppriocntl.h definiert und ist unter den entsprechenden
          Abschnitten weiter unten beschrieben.

          Wenn arg ein Null-Zeiger ist, werden keine Attributdaten zurück-
          gegeben; der priocntl()-Aufruf liefert dann lediglich die Anzahl
          der konfigurierten Klassen zurück.

     PCSETPARMS
          Setzt die Klasse und die klassenabhängigen Verwaltungsparameter
          des angegebenen Prozesses bzw. der angegebenen Prozesse. arg
          zeigt auf eine Struktur vom Typ pcparmst. pccid gibt die Klasse
          an, deren Parameter geändert werden sollen; der Puffer pcclparms
          enthält die klassenabhängigen Parameter, die gesetzt werden sol-
          len. Das Format der klassenabhängigen Parameter wird in den
          Include-Dateien sys/rtpriocntl.h, sys/tspriocntl.h oder
          sys/fppriocntl.h definiert und wird unter den entsprechenden
          Abschnitten weiter unten erklärt.

          Wenn Parameter für eine Gruppe von Prozessen angegeben werden,
          behandelt priocntl() die Prozesse in einer implementierungsabhän-
          gigen Reihenfolge. Wenn priocntl() einen Fehler bei einem oder
          mehreren der Zielprozesse erkennt, wird die Operation abhängig
          von der Art des Fehler weitergeführt oder abgebrochen. Ist der
          Fehler auf Berechtigungen (EPERM) zurückzuführen, so wird die
          Operation mit den weiteren Prozessen der Prozeßgruppe ausgeführt,
          wobei die Parameter für alle Zielprozesse entsprechend geändert
          werden, für die der aufrufende Prozeß entsprechende Berechtigung
          besitzt. priocntl() liefert dann -1 zurück und setzt errno auf
          EPERM; dies zeigt an, daß die Operation für einen oder mehrere
          der Zielprozesse fehlgeschlagen ist. Wenn priocntl() einen Fehler
          erkennt, der nicht auf Berechtigungen basiert, wird dieser Fehler
          sofort zurückgeliefert und die Operation wird abgebrochen.

     PCGETPARMS
          Ruft die Klasse und/oder die klassenabhängigen Parameter für die
          Zeitscheibenverteilung eines Prozesses ab. arg zeigt auf eine
          Struktur vom Typ pcparmst.

          Wenn pccid eine konfigurierte Klasse angibt und von den Werten
          idtype und id der procset-Struktur ein Prozeß dieser Klasse ange-
          geben wird, dann werden die Parameter für die Zeitscheibenvertei-
          lung des Prozesses in dem Puffer pcclparms zurückgegeben. Wenn
          der angegebene Prozeß nicht existiert oder nicht zu der angegebe-
          nen Klasse gehört, liefert der priocntl()-Aufruf -1 zurück und
          setzt errno auf ESRCH.



Seite 5                      Reliant UNIX 5.44               Gedruckt 11/98

priocntl(2)                                                     priocntl(2)

          Gibt pccid eine konfigurierte Klasse und eine Prozeßmenge an, so
          werden die Parameter für die Zeitscheibenverteilung eines Prozes-
          ses, der zu der angegebenen Gruppe von Prozessen und Klasse
          gehört, in pcclparms zurückgegeben, und priocntl() liefert die
          Prozeßnummer des ausgewählten Prozesses zurück. Die Kriterien bei
          der Auswahl eines Prozesses für diesen Fall ist klassenabhängig.
          Wenn keiner der angegebenen Prozesse existiert oder keiner der
          Prozesse zu der angegebenen Klasse gehört, liefert priocntl() -1
          zurück und setzt errno auf ESRCH.

          Wenn pccid gleich PCCLNULL ist und ein einziger Prozeß angege-
          ben wird, so wird die Klasse dieses Prozesses in pccid und wer-
          den seine Parameter in pcclparms zurückgegeben.

     PCADMIN
          Dieses Kommando bietet die Funktionalität für die Implementierung
          des Kommandos dispadmin(1M). Es ist nicht zum allgemeinen
          Gebrauch durch andere Anwendungen gedacht.

ECHTZEIT-KLASSE
     In der Klasse Echtzeit erfolgt die Verteilung der Zeitscheiben für die
     Zentraleinheit (CPU) nach festen Prioritäten und unter der Maßgabe,
     daß ein Prozeß einen anderen von der CPU "verdrängen" kann (preemptive
     scheduling). Dies ist für solche Prozesse sinnvoll, die kurze und vor-
     hersehbare Antwortzeiten sowie die vollständige Steuerung der Priori-
     täten durch den Benutzer bzw. die Anwendung benötigen. Falls die
     Klasse Echtzeit auf dem System konfiguriert ist, sollte sie vollstän-
     dige Kontrolle über den höchsten Bereich der Prioritäten für die Zeit-
     scheibenverteilung haben. Damit wird gewährleistet, daß ein ablauffä-
     higer Prozeß der Klasse Echtzeit vor jedem anderen Prozeß jeder ande-
     ren Klasse Rechenzeit erhält.

     Einem Prozeß der Klasse Echtzeit kann eine Echtzeit-Priorität (real-
     time priority, rtpri) zugeordnet werden. Dieser Wert liegt zwischen 0
     und einem Maximalwert x, wobei der Wert von x konfiguriert werden
     kann. Er kann für eine spezielle Konfiguration mit dem priocntl-
     Kommando PCGETCID oder PCGETCLINFO angezeigt werden.

     Die Verteilung der Zeitscheiben für Prozesse der Klasse Echtzeit
     erfolgt nach festen Prioritäten. Die Priorität eines Echtzeit-Prozes-
     ses wird niemals verändert, es sei denn, der Benutzer oder eine Anwen-
     dung wollen den Wert rtpri des Prozesses ausdrücklich ändern.

     Für einen Prozeß der Klasse Echtzeit ist der Wert rtpri praktisch
     gleich der internen Priorität für die Zuteilung von Rechenzeit an die-
     sen Prozeß. Dieser Wert bestimmt die Priorität eines Echtzeit-Prozes-
     ses im Verhältnis zu anderen Prozessen dieser Klasse. Ein höherer Wert
     von rtpri steht für eine höhere Priorität. Da die Klasse Echtzeit den
     höchsten Bereich der Prioritäten für die Zuteilung von Rechenzeit
     steuert, ist gewährleistet, daß ein ablauffähiger Prozeß mit dem höch-
     sten Wert von rtpri vor jedem anderen Prozeß im System Rechenzeit
     erhält.


Seite 6                      Reliant UNIX 5.44               Gedruckt 11/98

priocntl(2)                                                     priocntl(2)

     Zusätzlich zur Steuerung der Prioritäten können Sie mit priocntl() die
     Länge der Zeitscheiben beeinflussen, die einem Prozeß der Klasse Echt-
     zeit zugeteilt werden. Die Länge der Zeitscheibe gibt an, wie lange
     ein Prozeß höchstens Rechenzeit erhält, vorausgesetzt, er wartet nicht
     auf ein externes Ereignis (sleep). Ein Prozeß kann jedoch vor Ablauf
     seiner Zeitscheibe unterbrochen werden, wenn ein anderer Prozeß mit
     höherer Priorität ablauffähig wird.

     Der Prozeßverwalter des Systems hält die ablauffähigen Echtzeit-Pro-
     zesse in einer Gruppe von Verwaltungsschlangen. Es gibt eine eigene
     Schlange für jede konfigurierte Echtzeit-Priorität, und alle Echt-
     zeit-Prozesse mit einem gegebenen rtpri-Wert werden zusammen in der
     entsprechenden Schlange gehalten. Die Prozesse einer gegebenen
     Schlange werden in einer FIFO-Reihe angeordnet (dies bedeutet, daß der
     Prozeß am Anfang der Schlange am längsten auf Bedienung gewartet hat
     und von der CPU als nächstes bedient wird).

     Echtzeit-Prozesse, die nach sleep wieder aktiv werden, Prozesse aus
     einer anderen Klasse, die in die Echtzeit-Klasse gelangen, Prozesse,
     die die volle Länge ihrer Zeitscheibe verbraucht haben, und ablauffä-
     hige Prozesse, deren Priorität durch priocntl() neu gesetzt wird, wer-
     den an das Ende der entsprechenden Prioritätsschlange geschrieben.

     Ein Prozeß, der durch einen Prozeß mit höherer Priorität vorzeitig
     angehalten wird, bleibt am Anfang der Schlange (unabhängig davon, wie-
     viel Zeit in seiner Zeitscheibe noch verbleibt) und läuft vor jedem
     anderen Prozeß gleicher Priorität ab. Wird ein fork(2)-Systemaufruf
     von einem Echtzeit-Prozeß ausgeführt, läuft der Vaterprozeß weiter,
     während der Sohnprozeß (der den rtpri-Wert des Vaterprozesses über-
     nimmt) an das Ende der Schlange gesetzt wird.

     Die folgende Struktur (definiert in sys/rtpriocntl.h) definiert das
     Format der Attributdaten für die Echtzeit-Klasse:

       typedef struct {
          short rtmaxpri;      /* Maximale Echtzeit-Priorität */
       } rtinfot;

     Die priocntl-Kommandos PCGETCID und PCGETCLINFO liefern die Attri-
     bute der Echtzeit-Klasse im Puffer pcclinfo mit diesem Format zurück.

     rtmaxpri gibt den konfigurierten Maximalwert rtpri für die Echt-
     zeit-Klasse zurück (wenn rtmaxpri gleich x ist, reichen die gültigen
     Echtzeit-Prioritäten von 0 bis x).










Seite 7                      Reliant UNIX 5.44               Gedruckt 11/98

priocntl(2)                                                     priocntl(2)

     Die folgende Struktur (definiert in sys/rtpriocntl.h) definiert das
     Format zur Angabe von Parametern der Zeitscheibenverteilung für Pro-
     zesse der Echtzeit-Klasse:

        typedef struct {
           short rtpri;     /* Echtzeit-Priorität */
           ulong rttqsecs;  /* Sekunden in der Zeitscheibe */
           long  rttqnsecs; /* Nanosekunden in der Zeitscheibe */
        } rtparmst;

     Bei Verwendung der priocntl-Kommandos PCSETPARMS oder PCGETPARMS
     werden die Daten im Puffer pcclparms in diesem Format zurückgegeben,
     falls pccid die Echtzeit-Klasse angibt.

     Die oben erwähnten Kommandos können verwendet werden, um die Echt-
     zeit-Priorität auf den entsprechenden Wert zu setzen oder den aktuel-
     len rtpri-Wert zu lesen. Das Einstellen des rtpri-Wertes für einen
     momentan ablaufenden oder ablauffähigen (nicht im sleep-Zustand
     befindlichen) Prozeß verursacht, daß der Prozeß an das Ende der
     Schlange für die entsprechende Priorität gesetzt wird. Der Prozeß wird
     an das Ende der entsprechenden Schlange gesetzt, unabhängig davon, ob
     die gesetzte Priorität vom vorherigen rtpri-Wert des Prozesses
     abweicht. Zu beachten ist, daß ein ablaufender Prozeß die CPU freige-
     ben und sich an das Ende der Schlange gleicher Priorität setzen kann,
     indem sein vorheriger rtpri-Wert aktualisiert wird. Um die Länge der
     Zeitscheibe eines Prozesses zu ändern, ohne daß die Priorität oder die
     Position des Prozesses in der Schlange geändert wird, sollte das Feld
     rtpri auf den Wert RTNOCHANGE (definiert in sys/rtpriocntl.h)
     gesetzt werden. Wird beim Ändern der Klasse eines Prozesses in die
     Echtzeit-Klasse RTNOCHANGE angegeben, wird die Echtzeit-Priorität auf
     Null gesetzt.

     Beim priocntl-Kommando PCGETPARMS werden die Parameter für die Zeit-
     scheibenverteilung des Echtzeit-Prozesses mit dem höchsten rtpri-Wert
     zurückgegeben, wenn pccid die Echtzeit-Klasse angibt und mehr als ein
     Echtzeit-Prozeß angegeben wird; die Prozeßnummer des Prozesses wird
     von priocntl() zurückgegeben. Gibt es mehr als einen Prozeß mit der
     höchsten Priorität, so ist die zurückgegebene Prozeßnummer implemen-
     tierungsabhängig.

     Die Felder rttqsecs und rttqnsecs werden verwendet, um die Länge der
     Zeitscheibe für einen Prozeß oder eine Prozeßgruppe zu setzen oder
     abzurufen. rttqsecs ist die Anzahl der Sekunden und rttqnsecs die
     Anzahl der zuzüglichen Nanosekunden in der Zeitscheibe. Wird rttqsecs
     zum Beispiel auf den Wert 2 und rttqnsecs auf den Wert 500.000.000
     (dezimal) gesetzt, so wäre die Zeitscheibe zweieinhalb Sekunden lang.
     Der Wert 1.000.000.000 oder höher für rttqnsecs erzeugt einen Fehler;
     dabei wird errno auf EINVAL gesetzt. Obwohl die Auflösung des Feldes
     tqnsecs sehr hoch ist, wird die angegebene Zeitscheibe vom System auf
     das nächste ganzzahlige Vielfache der Auflösung der Systemuhr gerun-
     det. Beispielsweise beträgt die höchste, momentan verfügbare Auflösung
     der Anlage 3B2 10 Millisekunden (1 "Zeittakt"). Die Einstellung von


Seite 8                      Reliant UNIX 5.44               Gedruckt 11/98

priocntl(2)                                                     priocntl(2)

     rttqsecs gleich 0 und rttqnsecs gleich 34.000.000 würde eine Zeit-
     scheibe von 34 Millisekunden angeben, die auf vier Zeittakte (40 Mil-
     lisekunden) aufgerundet wird. Der Maximalwert für die Zeitscheibe ist
     implementierungsabhängig und entspricht LONGMAX Zeittakten (definiert
     in limits.h). Die Angabe einer Zeitscheibe, die größer als dieser
     Maximalwert ist, hat einen Fehler zur Folge; dabei wird errno auf
     ERANGE gesetzt (obwohl auch unendliche Zeitscheiben durch einen beson-
     deren Wert angefordert werden können; siehe Beschreibung weiter
     unten). Bei einer Zeitscheibe von Null (wenn sowohl rttqsecs als auch
     rttqnsecs auf 0 gesetzt werden), wird ein Fehler zurückgegeben und
     errno enthält EINVAL.

     Das Feld rttqnsecs kann auf einen der folgenden Sonderwerte gesetzt
     werden (definiert in sys/rtpriocntl.h), bei denen der Wert von
     rttqsecs ignoriert wird:

     RTTQINF
          Stellt eine unendliches Zeitscheibe ein.

     RTTQDEF
          Setzt die Zeitscheibe auf den voreingestellten Wert für diese
          Priorität [siehe rtdptbl(4)].

     RTNOCHANGE
          Die Zeitscheibe wird nicht gesetzt. Dieser Wert ist nützlich,
          wenn die Echtzeit-Priorität eines Prozesses geändert werden, die
          Zeitscheibe aber unverändert bleiben soll. Die Angabe dieses Wer-
          tes beim Ändern eines Prozesses in einen Echtzeit-Prozeß ent-
          spricht der Angabe von RTTQDEF.

     Um einem Prozeß einer anderen Klasse die Klasse Echtzeit zu geben, muß
     der aufrufende Prozeß über Systemverwalterrechte verfügen. Um die
     Priorität oder die Länge der Zeitscheibe eines Echtzeit-Prozesses zu
     ändern, muß der Prozeß, der priocntl() aufruft, über Systemverwalter-
     rechte verfügen oder muß selbst ein Echtzeit-Prozeß sein, dessen reale
     oder effektive Benutzernummer der realen oder effektiven Benutzernum-
     mer des Zielprozesses entspricht.

     Die Echtzeit-Priorität und die Länge der Zeitscheibe werden bei den
     Systemaufrufen fork(2) und exec(2) unverändert weitergegeben.

TIME-SHARING-KLASSE
     Die Strategie für die Verteilung der Zeitscheiben in der Klasse Time-
     Sharing ist auf eine gleichmäßige und effektive Zuteilung der CPU-
     Rechenzeit für Prozesse mit unterschiedlicher CPU-Ausnutzung ausge-
     legt. Die Ziele dieser Strategie sind gute Antwortzeiten bei interak-
     tiven Prozessen und guter Durchsatz bei rechenintensiven Anwendungen.
     Die Verteilung der Zeitscheiben soll zu einem gewissen Maß vom Benut-
     zer bzw. der Anwendung beeinflußbar sein.





Seite 9                      Reliant UNIX 5.44               Gedruckt 11/98

priocntl(2)                                                     priocntl(2)

     Die Time-Sharing-Klasse verfügt über einen Bereich von Time-Sharing-
     Benutzerprioritäten (siehe tsupri weiter unten), welche den Prozessen
     dieser Klasse zugewiesen werden können. Der Wert 0 für tsupri ist als
     Basispriorität für die Time-Sharing-Klasse voreingestellt. Benutzer-
     prioritäten reichen von -x bis +x, wobei der Wert x konfigurierbar ist
     und für eine bestimmte Installation über das priocntl-Kommando
     PCGETCID oder PCGETCLINFO abgerufen werden kann.

     Mit der vom Benutzer einstellbaren Time-Sharing-Priorität kann die
     Zuteilung von Rechenzeit an Prozesse der Klasse Time-Sharing zu einem
     gewissen Maß beeinflußt werden. Wird der Wert tsupri für einen Prozeß
     der Klasse Time-Sharing erhöht oder vermindert, so wird auch die Prio-
     rität dieses Prozesses bei der Zeitscheibenverteilung erhöht oder ver-
     mindert. Es ist jedoch nicht gewährleistet, daß ein Prozeß mit einem
     höheren tsupri-Wert vor einem Prozeß mit einem niedrigeren tsupri-
     Wert ausgeführt wird. Dies liegt daran, daß der tsupri-Wert nur ein
     Faktor zur Bestimmung der Priorität eines Time-Sharing-Prozesses ist.
     Das System kann die interne Priorität eines Time-Sharing-Prozesses
     aufgrund von anderen Faktoren, wie zum Beispiel die bisherige CPU-
     Ausnutzung, dynamisch ändern.

     Neben den systemweit geltenden Grenzwerten für die Benutzerpriorität
     (die von Kommandos PCGETCID und PCGETCLINFO zurückgegeben werden),
     gibt es für jeden Prozeß einen Grenzwert für die Benutzerpriorität,
     der den maximalen tsupri-Wert angibt, der für diesen Prozeß gesetzt
     werden kann (siehe tsuprilim weiter unten). Der Standardwert für
     tsuprilim ist Null.

     Die folgende Struktur (definiert in sys/tspriocntl.h) definiert das
     Format für die Attribute der Time-Sharing-Klasse:

     typedef struct {
        short tsmaxupri; /* Grenze für den Bereich der Benutzerpriorität */
     } tsinfot;

     Die priocntl-Kommandos PCGETCID und PCGETCLINFO liefern die Attri-
     bute für Prozesse der Time-Sharing-Klasse im Puffer pcclinfo in die-
     sem Format zurück.

     tsmaxupri gibt den konfigurierten Maximalwert für die Benutzerpriori-
     tät der Time-Sharing-Klasse zurück. Wenn tsmaxupri gleich x ist, so
     liegt der gültige Bereich sowohl für die Benutzerprioritäten als auch
     für die Grenzwerte der Benutzerpriorität zwischen -x und +x.











Seite 10                     Reliant UNIX 5.44               Gedruckt 11/98

priocntl(2)                                                     priocntl(2)

     Die folgende Struktur (definiert in sys/tspriocntl.h) definiert das
     Format zur Angabe der klassenabhängigen Parameter für einen Prozeß:

       typedef struct {
          short tsuprilim;  /* Grenze für Time-Sharing-Benutzerpriorität */
          short tsupri;     /* Time-Sharing-Benutzerpriorität */
          short tsflags;    /* (siehe unten) */
       } tsparmst;

       /* tsparmst.tsflags-Werte */
       #define TSFIXEDPRI 1

     Bei Verwendung des priocntl-Kommandos PCSETPARMS oder PCGETPARMS
     werden die Daten im Puffer pcclparms in diesem Format zurückgegeben,
     wenn pccid die Time-Sharing-Klasse angibt.

     Das priocntl-Kommando PCGETPARMS liefert die Parameter zur Zeitschei-
     benverteilung für den Time-Sharing-Prozeß mit dem höchsten tsupri-
     Wert sowie die Prozeßnummer des Prozesses zurück, sofern pccid die
     Time-Sharing-Klasse angibt und mehr als ein Time-Sharing-Prozeß ange-
     geben ist. Gibt es mehrere Prozesse mit gleichen Benutzerprioritäten,
     so ist der Rückgabewert implementierungsabhängig.

     Jeder Time-Sharing-Prozeß kann seinen eigenen tsuprilim-Wert (oder
     den eines anderen Prozesses mit derselben Benutzernummer) verkleinern.
     Nur ein Time-Sharing-Prozeß mit Systemverwalterrechten kann tsuprilim
     erhöhen. Wird die Klasse eines Prozesses von einer anderen Klasse auf
     die Time-Sharing-Klasse geändert, so sind Systemverwalterrechte erfor-
     derlich, um tsuprilim auf einen Wert größer als Null zu setzen. Ver-
     sucht ein Prozeß, der nicht über Systemverwalterrechte verfügt,
     tsuprilim zu erhöhen oder tsuprilim größer Null zu setzen, wird -1
     zurückgegeben und errno auf EPERM gesetzt.

     Jeder Time-Sharing-Prozeß kann seinen eigenen tsupri-Wert (oder den
     eines anderen Prozesses mit derselben Benutzernummer) auf einen Wert
     kleiner oder gleich dem Wert tsuprilim des Prozesses setzen. Wird
     versucht, für tsupri einen Wert über tsuprilim anzugeben (und/oder
     für tsuprilim einen Wert unter tsupri anzugeben), so wird tsupri
     gleich tsuprilim gesetzt.

     Die Struktur tsparmst hat ferner einen tsflags-Wert, der von einem
     Prozeß mit Systemverwalterrechten gesetzt werden kann. Ist für das
     Flag das Flag-Bit TSFIXEDPRI angegeben, setzt die Time-Sharing-Klasse
     die Priorität des Prozesses nicht herab, wenn die gesamte Zeitscheibe
     aufgebraucht ist. Diese Funktion ist vor allem für Prozesse wie
     Systemdämonen und Datanbankserver sinnvoll. Die Funktion wurde durch
     die Klasse Fixed-Priority ersetzt. Sie wird nur noch aus Kompatibili-
     tätsgründen beibehalten und in einem späteren Release entfernt.






Seite 11                     Reliant UNIX 5.44               Gedruckt 11/98

priocntl(2)                                                     priocntl(2)

     Jedes der Felder tsuprilim, tsupri oder tsflags kann auf den Son-
     derwert TSNOCHANGE gesetzt werden (definiert in sys/tspriocntl.h), um
     einen der Werte anzugeben, ohne daß sich dieser auch auf andere Werte
     auswirkt. Die Angabe von TSNOCHANGE für die Benutzerpriorität tsupri
     beim Einstellen des Grenzwertes tsuprilim auf einen Wert unter der
     aktuellen Benutzerpriorität verursacht, daß die Benutzerpriorität
     tsupri auf den eingestellten Grenzwert für die Benutzerpriorität
     tsuprilim gesetzt wird. Die Angabe von TSNOCHANGE für einen Parame-
     ter beim Ändern der Klasse auf die Time-Sharing-Klasse (von einer
     anderen Klasse) verursacht, daß der Parameter auf einen Standardwert
     gesetzt wird. Der Standardwert für tsuprilim ist 0, und tsupri wird
     standardmäßig auf den eingestellten tsuprilim-Wert gesetzt.

     Die Time-Sharing-Benutzerpriorität und der Grenzwert für die Benutzer-
     priorität werden bei den Systemaufrufen fork(2) und exec(2) unverän-
     dert weitergegeben.

FIXED-PRIORITY-KLASSE
     In der Klasse Fixed-Priority erfolgt die Verteilung der Zeitscheiben
     für die Zentraleinheit (CPU) ganz ähnlich wie bei der Echtzeit-Klasse
     nach festen Prioritäten und unter der Maßgabe, daß ein Prozeß einen
     anderen von der CPU "verdrängen" kann (preemptive scheduling). Dies
     ist für solche Prozesse sinnvoll, die kurze und vorhersehbare Antwort-
     zeiten sowie die vollständige Steuerung der Prioritäten durch den
     Benutzer bzw. die Anwendung benötigen. Allerdings hat die Fixed-
     Priority-Klasse Prioritäten, die nur geringfügig über die der Time-
     Sharing-Klasse hinausgehen. Hierdurch kann ein Prozeß die CPU (Zen-
     traleinheit) in hohem Maße ausnutzen, ohne die Ausführung des System-
     kerns zu verhindern.

     Einem Prozeß der Klasse Fixed-Priority kann eine Fixed-Priority-
     Priorität (fpumdpri) zugeordnet werden. Dieser Wert liegt zwischen 0
     und einem Maximalwert x, wobei der Wert von x konfiguriert werden
     kann. Er kann für eine spezielle Konfiguration mit dem priocntl-
     Kommando PCGETCID oder PCGETCLINFO abgerufen werden.

     Die Verteilung der Zeitscheiben für Prozesse der Klasse Fixed-Priority
     erfolgt nach festen Prioritäten. Die Priorität eines Fixed-Priority-
     Prozesses wird niemals verändert, es sei denn, die Ausführung des Pro-
     zesses wird im Systemkern unterbrochen (sleep), oder der Wert
     fpumdpri wird vom Benutzer oder von der Anwendung explizit geändert.

     Für Prozesse der Klasse Fixed-Priority ist der Wert fpumdpri äquiva-
     lent mit der Priorität der Zeitscheibenverteilung des Prozesses. Die-
     ser Wert bestimmt die Priorität eines Fixed-Priority-Prozesses im Ver-
     hältnis zu anderen Prozessen dieser Klasse. Höhere fpumdpri-Werte
     stellen höhere Prioritäten dar.







Seite 12                     Reliant UNIX 5.44               Gedruckt 11/98

priocntl(2)                                                     priocntl(2)

     Zusätzlich zur Steuerung der Prioritäten können Sie mit priocntl() die
     Länge der Zeitscheiben beeinflussen, die einem Prozeß der Klasse
     Fixed-Priority zugeteilt werden. Der Wert für die Zeitscheibe gibt an,
     wie lange ein Prozeß höchstens Rechenzeit erhält, vorausgesetzt, er
     wird nicht beendet, oder er wartet nicht auf ein externes Ereignis
     (sleep). Ein Prozeß kann jedoch vor Ablauf seiner Zeitscheibe unter-
     brochen werden, wenn ein anderer Prozeß mit höherer Priorität ablauf-
     fähig wird.

     Der Prozeßverwalter des Systems hält die ablauffähigen Fixed-
     Priority-Prozesse in einer Gruppe von Verwaltungsschlangen. Es gibt
     eine eigene Schlange für jede konfigurierte Fixed-Priority-Priorität,
     und alle Fixed-Priority-Prozesse mit einem gegebenen fpumdpri-Wert
     werden zusammen in der entsprechenden Schlange gehalten. Die Prozesse
     einer gegebenen Schlange werden in einer FIFO-Reihe angeordnet (dies
     bedeutet, daß der Prozeß am Anfang der Schlange am längsten auf Bedie-
     nung gewartet hat und von der CPU als nächstes bedient wird).

     Fixed-Priority-Prozesse, die nach sleep wieder aktiv werden, Prozesse
     aus einer anderen Klasse, die in die Fixed-Priority-Klasse wechseln,
     Prozesse, die die volle Länge ihrer Zeitscheibe verbraucht haben, und
     ablauffähige Prozesse, deren Priorität durch priocntl() neu gesetzt
     wird, werden an das Ende der entsprechenden Prioritätsschlange
     gestellt.

     Wird ein Prozeß von einem Prozeß mit höherer Priorität unterbrochen,
     wird der Prozeß entsprechend der noch verbleibenden Zeit in der Zeit-
     scheibe in die Schlange eingereiht. Nach einem fork(2)-Systemaufruf
     durch einen Fixed-Priority-Prozeß überläßt der Vaterprozeß die CPU dem
     Sohnprozeß und wird an das Ende der Warteschlange für die Zeitschei-
     benverteilung gestellt.

     Die folgende Struktur (definiert in sys/fppriocntl.h) definiert das
     Format der Attributdaten für die Fixed-Priority-Klasse:

       typedef struct {
          short  fpmaxumdpri;   /* konfigurierter Maximalwert für den
                                    Bereich der Benutzerpriorität */
       } fpinfot;

     Die priocntl-Kommandos PCGETCID und PCGETCLINFO geben die Attribute
     der Fixed-Priority-Klasse im Puffer pcclinfo mit diesem Format
     zurück.

     fpmaxumdpri gibt den konfigurierten Maximalwert fpumdpri für die
     Fixed-Priority-Klasse zurück (wenn rtmaxumdpri gleich x ist, reichen
     die gültigen Fixed-Priority-Prioritäten von 0 bis x).

     Die folgende Struktur (definiert in sys/fppriocntl.h) definiert das
     Format zur Angabe von Parametern der Zeitscheibenverteilung für einen
     Prozeß der Fixed-Priority-Klasse:



Seite 13                     Reliant UNIX 5.44               Gedruckt 11/98

priocntl(2)                                                     priocntl(2)

       typedef struct {
          short fppri;     /* Echtzeit-Priorität */
          ulong fptqsecs;  /* Sekunden in der Zeitscheibe */
          long  fptqnsecs; /* Nanosekunden in der Zeitscheibe */
       } fpparmst;

     Bei Verwendung der priocntl-Kommandos PCSETPARMS oder PCGETPARMS
     werden die Daten im Puffer pcclparms in diesem Format zurückgegeben,
     falls pccid die Fixed-Priority-Klasse angibt.

     Die oben erwähnten Kommandos können verwendet werden, um die Fixed-
     Priority-Priorität auf den entsprechenden Wert zu setzen oder den
     aktuellen fppri-Wert zu lesen. Das Einstellen des fppri-Wertes für
     einen momentan ablaufenden oder ablauffähigen (nicht im sleep-Zustand
     befindlichen) Prozeß verursacht, daß der Prozeß an das Ende der War-
     teschlange für die entsprechende Priorität gesetzt wird. Der Prozeß
     wird an das Ende der entsprechenden Warteschlange gesetzt, unabhängig
     davon, ob die gesetzte Priorität vom vorherigen fppri-Wert des Pro-
     zesses abweicht.

     Ein ablaufender Prozeß kann die CPU freigeben und sich an das Ende der
     Warteschlange gleicher Priorität setzen, indem sein vorheriger
     fppri-Wert aktualisiert wird.

     Beim priocntl-Kommando PCGETPARMS werden die Parameter zur Zeitschei-
     benverteilung für den Fixed-Priority-Prozeß mit dem höchsten
     fpumdpri-Wert aus den angegebenen Prozessen zurückgegeben, wenn
     pccid die Fixed-Priority-Klasse angibt und mehr als ein Fixed-
     Priority-Prozeß angegeben wird; die Prozeßnummer des Prozesses wird
     vom priocntl()-Aufruf zurückgegeben. Gibt es mehr als einen Prozeß mit
     der höchsten Priorität, so ist die zurückgegebene Prozeßnummer imple-
     metierungsabhängig.

     Die Felder fptqsecs und fptqnsecs werden verwendet, um die Länge der
     Zeitscheibe für einen Prozeß oder eine Prozeßgruppe zu setzen oder
     abzurufen. fptqsecs ist die Anzahl der Sekunden und fptqnsecs die
     Anzahl der zuzüglichen Nanosekunden in der Zeitscheibe. Wird fptqsecs
     zum Beispiel auf den Wert 2 und fptqnsecs auf den Wert 500.000.000
     (dezimal) gesetzt, so wäre die Zeitscheibe zweieinhalb Sekunden lang.
     Der Wert 1.000.000.000 oder höher für fptqnsecs erzeugt einen Fehler;
     dabei wird errno auf EINVAL gesetzt. Obwohl die Auflösung des Feldes
     tqnsecs sehr hoch ist, wird die angegebene Zeitscheibe vom System auf
     das nächste ganzzahlige Vielfache der Auflösung der Systemuhr gerun-
     det. Beispielsweise beträgt die höchste, momentan verfügbare Auflösung
     der Anlage 3B2 10 Millisekunden (1 "Zeittakt"). Die Einstellung von
     fptqsecs gleich 0 und fptqnsecs gleich 34.000.000 würde eine Zeit-
     scheibe von 34 Millisekunden angeben, die auf vier Zeittakte (40 Mil-
     lisekunden) aufgerundet wird. Der Maximalwert für die Zeitscheibe ist
     implementierungsabhängig und entspricht LONGMAX Zeittakten (definiert
     in limits.h). Die Angabe einer Zeitscheibe, die größer als dieser
     Maximalwert ist, hat einen Fehler zur Folge; dabei wird errno auf
     ERANGE gesetzt (obwohl auch unendliche Zeitscheiben durch einen


Seite 14                     Reliant UNIX 5.44               Gedruckt 11/98

priocntl(2)                                                     priocntl(2)

     besonderen Wert angefordert werden können; siehe Beschreibung weiter
     unten). Bei einer Zeitscheibe von Null (wenn sowohl fptqsecs als auch
     fptqnsecs auf 0 gesetzt werden), wird ein Fehler zurückgegeben und
     errno enthält EINVAL.

     Das Feld fptqnsecs kann auf einen der folgenden Sonderwerte gesetzt
     werden (definiert in sys/rtpriocntl.h), bei denen der Wert von
     fptqsecs ignoriert wird:

     FPTQINF
          Stellt eine unendliches Zeitscheibe ein.

     FPTQDEF
          Setzt die Zeitscheibe auf den voreingestellten Wert für diese
          Priorität [siehe fpdptbl(4)].

     FPNOCHANGE
          Die Zeitscheibe wird nicht gesetzt. Dieser Wert ist nützlich,
          wenn die Echtzeit-Priorität eines Prozesses geändert werden, die
          Zeitscheibe aber unverändert bleiben soll. Die Angabe dieses Wer-
          tes beim Ändern eines Prozesses in einen Echtzeit-Prozeß ent-
          spricht der Angabe von FPTQDEF.

     Um die Klasse eines Prozesses von einer anderen Klasse in Fixed-
     Priority zu ändern, muß der Prozeß, der priocntl() aufruft, über
     Systemverwalterrechte verfügen. Um die Priorität für einen Fixed-
     Priority-Prozeß zu ändern, muß der Prozeß, der priocntl() aufruft,
     über Systemverwalterrechte verfügen oder muß selbst ein Fixed-
     Priority-Prozeß sein, dessen reale oder effektive Benutzernummer der
     realen oder effektiven Benutzernummer des Zielprozesses entspricht.

     Die Fixed-Priority-Priorität wird bei den Systemaufrufen fork(2) und
     exec(2) unverändert weitergegeben.

PROZESSORAFFINITÄT UND BINDUNGSBETRACHTUNGEN
     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ätsmechanismus kann vom Systemverwalter prozeßweise
     aktiviert und deaktiviert werden [siehe mpcntl(3X)]. Der Affinitätsme-
     chanismus ist für die Time-Sharing- und Fixed-Priority-Klasse stan-
     dardmäßig auf on, für die Echtzeit-Klasse auf off gestellt.






Seite 15                     Reliant UNIX 5.44               Gedruckt 11/98

priocntl(2)                                                     priocntl(2)

     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 Prozes-
     sorgruppe kann vom Prozeß [siehe mpcntl(3X)] oder vorübergehend vom
     Systemkern hergestellt werden (im letzteren Fall muß der Systemkern
     gerade einen Treiber-Code ausführen, der auf einer bestimmten CPU
     ablaufen muß).

RÜCKGABEWERT
     Falls nichts anderes gesagt wurde, gibt priocntl() bei erfolgreicher
     Ausführung den Wert 0 zurück. Bei Fehlern liefert priocntl() -1 zurück
     und setzt errno, um den Fehler anzuzeigen.

FEHLER
     Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
     Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
     errno(5).

     priocntl() schlägt fehl, wenn mindestens eine der folgenden Bedingun-
     gen erfüllt ist:

     EPERM     Der aufrufende Prozeß verfügt nicht über die erforderlichen
               Rechte.

     EINVAL    Das Argument cmd ist ungültig, eine ungültige oder nicht
               konfigurierte Klasse wurde angegeben, oder einer der angege-
               benen Parameter war ungültig.

     EDOM      Die Länge der angeforderten Zeitscheibe befand sich außer-
               halb des zulässigen Bereichs.

     ESRCH     Keiner der angegebenen Prozesse existiert.

     EFAULT    Alle Datenbereiche oder Teile der Datenbereiche, auf die die
               Datenzeiger verweisen, befinden sich außerhalb des Adreßbe-
               reichs des Prozesses.

     ENOMEM    Das Ändern der Klasse eines Prozesses schlug fehl, weil zu
               wenig Speicher verfügbar war.

     EAGAIN    Das Ändern der Klasse eines Prozesses schlug fehl, weil
               unzureichende Ressourcen (außer Hauptspeicher) verfügbar
               waren (beispielsweise klassenspezifische Datenstrukturen im
               Systemkern).





Seite 16                     Reliant UNIX 5.44               Gedruckt 11/98

priocntl(2)                                                     priocntl(2)

SIEHE AUCH
     priocntl(1), dispadmin(1M), exec(2), fork(2), nice(2), priocntlset(2),
     mpcntl(3X), fpdptbl(4), rtdptbl(4), tsdptbl(4), types(5).



















































Seite 17                     Reliant UNIX 5.44               Gedruckt 11/98

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