priocntl(1) priocntl(1)
NAME
priocntl - Zeitscheibenverteilung und Prioritäten einstellen (priority
control)
SYNTAX
priocntl -l Format 1
priocntl -d [-i typ] [liste] Format 2
priocntl -s [-c klasse] [option ...] [-i typ] [liste] Format 3
priocntl -e [-c klasse] [option ...] kommando [argumente] Format 4
BESCHREIBUNG
Mit priocntl können Sie
- Parameter für die Zeitscheibenverteilung (also die Zuweisung von
Rechenzeit) der angegebenen Prozesse anzeigen oder einstellen,
- Informationen über die augenblickliche Konfiguration des Scheduler
anzeigen. Der Scheduler ist der Prozeß, der die Zeitscheibenvertei-
lung für alle Prozesse regelt.
- ein Kommando mit bestimmten Parametern für die Zeitscheibenvertei-
lung ausführen.
Es gibt verschiedene Klassen von Prozessen mit jeweils unterschiedli-
chen Zielen und Strategien zur Zeitscheibenverteilung, wobei jeder
Prozeß genau einer Klasse angehört. Zur Zeit werden die drei Klassen
Echtzeit (Realtime), Time-Sharing und Fixed-Priority unterstützt. Die
Eigenschaften dieser Klassen sowie die jeweils zulässigen Optionen
werden in den Abschnitten Die Klasse "Echtzeit" (Realtime), Die Klasse
"Time-Sharing" und Die Klasse "Fixed-Priority" erläutert. Vorausge-
setzt, Sie haben ausreichende Berechtigung, können Sie mit priocntl
die Klasse eines laufenden Prozesses sowie andere Parameter zur Zeit-
scheibenverteilung ändern.
Vorsicht: Einem ablauffähigen Prozeß der Klasse Echtzeit wird vor
allen anderen Prozessen Rechenzeit zugeteilt. Unsachgemäßer
Einsatz von Echtzeit-Prozessen kann das Laufzeitverhalten
des Systems daher dramatisch verschlechtern!
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
priocntl(1) priocntl(1)
Format 1: Informationen über alle Klassen ausgeben
priocntl -l
-l (l - list) Es werden alle augenblicklich im System konfigurierten
Klassen sowie Informationen über die einzelnen Klassen ausgege-
ben. Format und Bedeutung dieser Informationen werden unten bei
den jeweiligen Klassen erläutert.
Format 2: Klasse und Parameter für Prozesse ausgeben
priocntl -d [-i typ] [liste]
-d (d - display) Es werden die Klasse und klassenabhängige Parameter
zur Zeitscheibenverteilung für die angegebenen Prozesse ange-
zeigt.
-i typ
(i - identifier) Mit -i typ und einer eventuell angegebenen liste
können ein oder mehrere Prozesse spezifiziert werden, auf die
priocntl angewandt werden soll. Die Interpretation der liste
hängt vom angegebenen typ ab. Im folgenden sind die zulässigen
Werte für typ sowie die zugehörige Interpretation der liste ange-
geben:
-i pid liste ist eine Liste von Prozeßnummern. priocntl wird
auf alle Prozesse angewandt, deren Prozeßnummer in der
Liste steht.
-i ppid liste ist eine Liste von Vaterprozeßnummern. priocntl
wird auf alle Prozesse angewandt, deren Vaterprozeßnum-
mer in der Liste steht.
-i pgid liste ist eine Liste von Prozeßgruppennummern. priocntl
wird auf alle Prozesse angewandt, die zu einer Prozeß-
gruppe in der Liste gehören.
-i sid liste ist eine Liste von Sitzungsnummern. priocntl wird
auf alle Prozesse angewandt, die zu einer der Sitzungen
in der Liste gehören.
-i class liste ist der Name einer einzelnen Klasse. Sie können
entweder RT für die Klasse Echtzeit, TS für die Klasse
Time-Sharing oder FP für die Klasse Fixed-Priority
angeben. priocntl wird auf alle Prozesse der angegebe-
nen Klasse angewandt.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
priocntl(1) priocntl(1)
-i uid liste ist eine Liste von Benutzernummern. priocntl wird
auf alle Prozesse angewandt, deren effektive Benutzer-
nummer in der Liste steht.
-i gid liste ist eine Liste von Gruppennummern. priocntl wird
auf alle Prozesse angewandt, deren effektive Gruppen-
nummer in der Liste steht.
-i all priocntl wird auf alle existierenden Prozesse ange-
wandt. In diesem Fall wird liste ignoriert. Die Liste
der Prozesse kann jedoch eingeschränkt werden, wenn Sie
nicht über ausreichende Berechtigung verfügen.
-i typ nicht angegeben:
Als Identifikationstyp wird pid verwendet.
liste
liste spezifiziert die Prozesse, auf die priocntl angewandt wer-
den soll. Die Bedeutung der Listenelemente ist bei der Option -i
beschrieben. Wenn eine liste angegeben wird, muß sie am Ende der
Kommandozeile stehen. Die einzelnen Listenelemente müssen durch
Leerzeichen oder Tabulatorzeichen voneinander getrennt werden.
liste nicht angegeben:
Wurde bei der Option -i für das Argument typ der Wert pid, ppid,
pgid, sid, class, uid oder gid angegeben, so wird jeweils die
eigene Prozeßnummer, Vaterprozeßnummer, Prozeßgruppennummer, Sit-
zungsnummer, Klasse, Benutzernummer oder Gruppennummer des Kom-
mandos priocntl verwendet.
Format 3: Klasse und Parameter für Prozesse einstellen
priocntl -s [-c klasse] [option ...] [-i typ] [liste]
-s (s - set) Die Klasse und klassenspezifische Parameter werden für
die angegebenen Prozesse auf die in der Kommandozeile angegebenen
Werte eingestellt.
-c klasse
(c - class) klasse gibt an, welche Klasse für die Zeitscheiben-
verteilung eingestellt werden soll. Zulässige Werte für klasse
sind RT für Echtzeit, TS für Time-Sharing und FP für Fixed-
Priority.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
priocntl(1) priocntl(1)
-c klasse nicht angegeben:
typ und liste müssen Prozesse bezeichnen, die alle zur selben
Klasse gehören. Andernfalls beendet sich priocntl mit einer Feh-
lermeldung.
option
Hier geben Sie klassenspezifische Optionen an. Mögliche Optionen
für die einzelnen Klassen werden in den Abschnitten Die Klasse
"Echtzeit" (Realtime), Die Klasse "Time-Sharing" und Die Klasse
"Fixed-Priority" beschrieben.
Keine Optionen angegeben:
Die klassenabhängigen Parameter werden auf die Standardwerte für
die bei -c klasse angegebene Klasse gesetzt. Falls die Option -c
klasse auch nicht angegeben wurde, werden die Standardwerte für
die augenblickliche Klasse des Prozesses eingestellt.
-i typ
Mit dieser Option können die Prozesse spezifiziert werden, deren
Parameter eingestellt werden sollen. Die möglichen Werte sind
unter Format 2 beschrieben.
liste
Zusammen mit -i typ spezifiziert liste die Prozesse, deren Para-
meter eingestellt werden sollen. Einzelheiten sind unter Format 2
beschrieben.
Damit Sie für einen bestimmten Prozeß die Parameter für die Zeitschei-
benverteilung mit priocntl ändern können, 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 ein Prozeß diese Klasse erhalten soll oder
spezielle Parameter für diese Klasse eingestellt werden sollen.
Wenn mit -i typ und liste eine Liste von Prozessen angegeben wurde,
behandelt priocntl die Prozesse in einer implementierungsabhängigen
Reihenfolge. Falls bei einem oder mehreren der angegebenen Prozessen
ein Fehler auftritt, fährt priocntl je nach Art des Fehlers mit den
anderen Prozessen in der Liste fort oder beendet sich. Wenn der Fehler
auf mangelnde Berechtigung zurückzuführen ist, gibt priocntl eine Feh-
lermeldung aus und behandelt dann die anderen Prozesse in der Liste.
Die angegebenen Parameter werden dann für alle Prozesse eingestellt,
für die Sie ausreichende Berechtigung haben. Wenn der Fehler eine
andere Ursache hat, werden die anderen Prozesse in der Liste nicht
mehr behandelt. priocntl gibt in diesem Fall eine Fehlermeldung aus
und beendet sich dann sofort.
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
priocntl(1) priocntl(1)
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). Ein
Prozeß kann niemals nachträglich die Klasse sys erhalten. Außerdem
werden Prozesse der Klasse sys ignoriert, wenn sie mit -i typ und
liste angegeben werden.
Beispiel:
Für typ wurde der Wert uid angegeben und liste besteht nur aus
dem Wert 0. Dann werden die Prozesse mit der Benutzernummer 0
spezifiziert. Hiervon ausgenommen sind allerdings die Prozesse
der Klasse sys und (falls die Parameter mit der Option -s geän-
dert werden sollen) der Prozeß init.
Der Prozeß init mit der Prozeßnummer 1 stellt einen Sonderfall dar.
Wenn Sie mit priocntl die Klasse oder andere Parameter für die Zeit-
scheibenverteilung ändern wollen, müssen Sie für typ den Wert pid
angeben und liste darf nur den Wert 1 enthalten. Sie können dem Prozeß
init zwar jede beliebige Klasse zuweisen, die auf dem System konfigu-
riert ist, die Klasse Time-Sharing ist jedoch fast immer angemessen.
Andere Klassen können sich sehr nachteilig auswirken.
Format 4: Ein Kommando mit bestimmten Parametern ausführen
priocntl -e [-c klasse] [option ...] kommando [argumente]
-e (e - execute) Das kommando wird in der angegebenen Klasse mit den
angegebenen Optionen für die Zeitscheibenverteilung ausgeführt.
-c klasse
klasse gibt an, welche Klasse das auszuführende Kommando erhalten
soll. Zulässige Werte für klasse sind RT für Echtzeit, TS für
Time-Sharing und FP für Fixed-Priority.
-c klasse nicht angegeben:
Das Kommando wird mit Ihrer augenblicklichen Klasse ausgeführt.
option
Hier geben Sie klassenspezifische Optionen an. Mögliche Optionen
für die einzelnen Klassen werden in den Abschnitten Die Klasse
"Echtzeit" (Realtime), Die Klasse "Time-Sharing" und Die Klasse
"Fixed-Priority" beschrieben.
Keine Optionen angegeben:
Das Kommando wird mit den Standardwerten für die bei -c klasse
angegebene Klasse ausgeführt. Falls die Option -c klasse auch
nicht angegeben wurde, wird das Kommando mit den Standardwerten
für Ihre augenblickliche Klasse ausgeführt.
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98
priocntl(1) priocntl(1)
kommando
Das Kommando, das in der angegebenen Klasse mit den angegebenen
Parametern ausgeführt werden soll.
argumente
Argumente für das auszuführende Kommando.
Die Klasse "Echtzeit" (Realtime)
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 benötigen. Falls die Klasse Echtzeit auf dem
System konfiguriert ist, sollte sie vollständige Kontrolle über den
höchsten Bereich der Prioritäten für die Zeitscheibenverteilung haben.
Damit wird gewährleistet, daß ein ablauffähiger Prozeß der Klasse
Echtzeit vor jedem anderen Prozeß jeder anderen 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 Kommando
priocntl -l 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 ein Anwen-
dungsprogramm wollen die Priorität explizit verä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.
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) wie z. B. Durchführung eines Fest-
plattenzugriffs. Ein Prozeß kann jedoch vor Ablauf seiner Zeitscheibe
unterbrochen werden, wenn ein anderer Prozeß mit höherer Priorität
ablauffähig wird.
Seite 6 Reliant UNIX 5.44 Gedruckt 11/98
priocntl(1) priocntl(1)
Sie können die Priorität und die Länge der Zeitscheibe für einen Pro-
zeß der Klasse Echtzeit mit dem Kommando
priocntl -d[ -i typ] [liste]
anzeigen lassen. Die Länge der Zeitscheibe wird dabei in Millisekunden
ausgegeben. Die Werte werden für jeden spezifizierten Prozeß der
Klasse Echtzeit ausgegeben.
Zulässige Optionen für das Setzen von Echtzeit-Parametern (Optionen -s
und -e):
-p rtpri
Die Echtzeit-Priorität des angegebenen Prozesses bzw. der angege-
benen Prozesse wird auf rtpri gesetzt.
Option -p nicht angegeben:
Wenn der Prozeß bereits der Klasse Echtzeit angehört, bleibt die
Priorität unverändert. Wenn ein Prozeß einer anderen Klasse die
Klasse Echtzeit erhält, wird die Priorität auf den Standardwert 0
gesetzt.
-t zeitdauer
Die Länge der Zeitscheibe für den angegebenen Prozeß bzw. die
angegebenen Prozesse wird auf zeitdauer gesetzt. Wird als Zeit-
dauer 0 angegeben oder ein Wert, der über dem Maximalwert für die
Dauer von Zeitscheiben liegt, wird mit einer Fehlermeldung abge-
brochen. Der Maximalwert hängt von der Implementierung ab.
Option -t nicht angegeben:
Wenn der Prozeß bereits der Klasse Echtzeit angehört, bleibt die
Länge der Zeitscheibe unverändert. Wenn ein Prozeß einer anderen
Klasse die Klasse Echtzeit erhält, wird die Länge der Zeitscheibe
auf einen Standardwert gesetzt, der von der Priorität und der
Konfiguration des Systems abhängt [siehe rtdptbl(4)].
-r auflösung
(r - resolution) auflösung gibt an, in welcher Einheit bei der
Option -t die Länge der Zeitscheibe angegeben wird. auflösung ist
eine positive ganze Zahl zwischen 1 und 1.000.000.000 (ein-
schließlich). Der reziproke Wert von auflösung gibt die benutzte
Einheit in Sekunden an.
Beispiel:
-t 10 -r 100 gibt als Zeiteinheit 1/100 Sekunde an und die
Zeitdauer wird auf 10/100 Sekunden, also 1/10 Sekunde
gesetzt.
Seite 7 Reliant UNIX 5.44 Gedruckt 11/98
priocntl(1) priocntl(1)
Obwohl eine sehr hohe Auflösung angegeben werden kann (nämlich
eine Nanosekunde), wird die angegebene Zeitdauer immer auf das
nächste ganzzahlige Vielfache der Auflösung der Systemuhr aufge-
rundet.
Beispiel:
Die höchste Auflösung auf einem System beträgt 10 Millise-
kunden. Wird mit den Optionen -t und -r eine Zeitdauer von
34 Millisekunden angegeben, so wird bei diesem System auf 40
Millisekunden aufgerundet.
Die Option -r kann nur zusammen mit der Option -t angegeben wer-
den.
Option -r nicht angegeben:
Es wird 1 Millisekunde als Einheit für die Länge der Zeitscheiben
bei -t verwendet.
Jede Kombination der Optionen -p und -t (und eventuell -r) kann mit -s
oder -e verwendet werden.
Nur der Systemverwalter kann einem Prozeß einer anderen Klasse die
Klasse Echtzeit geben. Wenn Sie die Priorität oder die Länge der Zeit-
scheibe für einen Echtzeit-Prozeß ändern wollen, müssen Sie entweder
Systemverwalterberechtigung haben oder bereits in der Klasse Echtzeit
sein (Ihr Kommandointerpreter läuft als Echtzeit-Prozeß) und die glei-
che reale oder effektive Benutzernummer haben wie der Prozeß, dessen
Parameter geändert werden sollen.
Die Echtzeit-Priorität und die Länge der Zeitscheibe werden bei den
Systemaufrufen fork(2) und exec(2) unverändert weitergegeben.
Die Klasse "Time-Sharing"
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 beeinflußbar sein.
Einem Prozeß der Klasse Time-Sharing kann eine Time-Sharing-Priorität
(time-sharing user priority, tsupri) zugeordnet werden. Dieser Wert
liegt zwischen -x und +x, wobei der Wert von x konfiguriert werden
kann. Er kann für eine spezielle Konfiguration mit dem Kommando
priocntl -l angezeigt werden.
Seite 8 Reliant UNIX 5.44 Gedruckt 11/98
priocntl(1) priocntl(1)
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
interne Priorität dieses Prozesses bei der Zeitscheibenverteilung
erhöht oder vermindert. Es ist jedoch nicht gewährleistet, daß ein
Prozeß der Klasse Time-Sharing mit einem höheren tsupri-Wert vor einem
Prozeß mit niedrigerem tsupri-Wert Rechenzeit erhält. Der Wert tsupri
ist nämlich nur eine Komponente bei der Bestimmung der internen Prio-
rität für die Verteilung der Zeitscheiben. Das System kann die interne
Priorität eines Time-Sharing-Prozesses dynamisch anpassen, wobei
andere Faktoren eine Rolle spielen (z. B. bisherige CPU-Ausnutzung).
Zusätzlich zu den systemspezifischen Grenzwerten für die Benutzer-
Priorität, die mit priocntl -l angezeigt werden können, gibt es für
jeden Prozeß einen Grenzwert für die Benutzer-Priorität, die dieser
Prozeß erhalten kann (time-sharing user priority limit, tsuprilim).
Sie können die Benutzer-Priorität und den Grenzwert für die Benutzer-
Priorität für einen Prozeß der Klasse Time-Sharing mit dem Kommando
priocntl -d [-i typ] [liste]
anzeigen lassen. Die Werte werden für jeden spezifizierten Prozeß der
Klasse Time-Sharing ausgegeben.
Zulässige Optionen für das Setzen von Time-Sharing-Parametern (Optio-
nen -s und -e):
-m tsuprilim
Darf nur gemeinsam mit -e oder -s gesetzt werden. Der Grenzwert
für die Benutzer-Priorität wird für den angegebenen Prozeß bzw.
die angegebenen Prozesse auf den Wert tsuprilim gesetzt.
Jeder Prozeß der Klasse Time-Sharing kann den Grenzwert für die
Benutzer-Priorität für sich selbst und für jeden anderen Prozeß
mit der selben Benutzernummer vermindern. Der Grenzwert darf
jedoch nur von einem Prozeß mit Systemverwalterberechtigung
erhöht werden. Wenn ein Prozeß einer anderen Klasse die Klasse
Time-Sharing erhält, darf ebenfalls nur der Systemverwalter einen
Grenzwert einstellen, der größer als Null ist.
Option -m nicht angegeben:
Wenn der Prozess der Klasse Time-Sharing angehört, bleibt der
Grenzwert unverändert. Wenn ein Prozeß einer anderen Klasse die
Klasse Time-Sharing erhält, wird der Grenzwert auf den Standard-
wert 0 gesetzt.
Seite 9 Reliant UNIX 5.44 Gedruckt 11/98
priocntl(1) priocntl(1)
-p tsupri
Darf nur gemeinsam mit -e oder -s gesetzt werden. Die Benutzer-
Priorität des angegebenen Prozesses bzw. der angegebenen Prozesse
wird auf den Wert tsupri gesetzt.
Jeder Prozeß der Klasse Time-Sharing kann seine eigene Benutzer-
Priorität oder die eines anderen Prozesses mit der selben Benut-
zernummer auf einen Wert einstellen, der kleiner oder gleich dem
Grenzwert für diesen Prozeß ist. Wenn Sie einen größeren Wert
einstellen wollen oder den Grenzwert unter die aktuelle Benut-
zer-Priorität senken, wird als Benutzer-Priorität der Grenzwert
eingestellt.
Option -p nicht angegeben:
Wenn der Prozeß der Klasse Time-Sharing angehört, bleibt die
Benutzer-Priorität normalerweise unverändert. Wenn ein Prozeß
einer anderen Klasse die Klasse Time-Sharing erhält, wird die
Benutzer-Priorität auf den eingestellten Grenzwert für die
Benutzer-Priorität gesetzt.
Ausnahme:
Die Option -p wurde nicht angegeben und mit -m wurde ein Grenz-
wert eingestellt, der unter der augenblicklichen Benutzer-Priori-
tät tsupri liegt. In diesem Fall wird die Benutzer-Priorität auf
den eingestellten Grenzwert gesetzt.
Jede Kombination der Optionen -m und -p kann mit -s oder -e verwendet
werden.
Die Benutzer-Priorität und der Grenzwert für die Benutzer-Priorität
werden bei den Systemaufrufen fork(2) und exec(2) unverändert weiter-
gegeben.
Die Klasse "Fixed-Priority"
In der Klasse Fixed-Priority erfolgt die Verteilung der Zeitscheiben
nach festen Prioritäten und unter der Maßgabe, daß ein Prozeß einen
anderen von der Zentraleinheit (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.
Einem Prozeß der Klasse Fixed-Priority kann eine Fixed-Priority-Prio-
rität (fppri) zugeordnet werden. Dieser Wert liegt zwischen 0 und x,
wobei der Wert von x konfiguriert werden kann. Er kann für eine spe-
zielle Konfiguration mit dem Kommando priocntl -l angezeigt werden.
Seite 10 Reliant UNIX 5.44 Gedruckt 11/98
priocntl(1) priocntl(1)
Wie der Name Fixed-Priority bereits sagt, erfolgt die Verteilung von
Zeitscheiben nach festen Prioritäten. Die Priorität eines Fixed-
Priority-Prozesses wird niemals verändert, es sei denn, ein Benutzer
oder eine Anwendung wollen die Priorität explizit ändern.
Für einen Prozeß der Klasse Fixed-Priority ist der Wert fppri prak-
tisch gleich der internen Priorität für die Zuteilung von Rechenzeit
an diesen Prozeß. Dieser Wert bestimmt die Priorität eines Fixed-
Priority-Prozesses im Verhältnis zu anderen Prozessen dieser Klasse.
Ein höherer Wert von fppri steht für eine höhere Priorität.
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.
Sie können die Priorität und die Länge der Zeitscheibe für einen Pro-
zeß der Klasse Fixed-Priority mit dem Kommando
priocntl -d [-i typ] [liste]
anzeigen lassen. Die Länge der Zeitscheibe wird dabei in Millisekunden
ausgegeben. Die Werte werden für jeden, über typ und liste angegebenen
Prozeß der Klasse Fixed-Priority ausgegeben.
Zulässige Optionen für das Setzen von Fixed-Priority-Parametern:
-p fppri
Die Fixed-Priority-Priorität des angegebenen Prozesses bzw. der
angegebenen Prozesse wird auf fppri gesetzt.
-t zeitdauer [-r auflösung]
Die Länge der Zeitscheibe für den angegebenen Prozeß bzw. die
angegebenen Prozesse wird auf zeitdauer gesetzt. Wahlweise können
Sie auch eine Auflösung wie unten beschrieben angeben.
Mit priocntl -s oder priocntl -e für die Klasse Fixed-Priority kann
jede Kombination der Optionen -p und -t angegeben werden. Wird eine
Option nicht angegeben, und gehört der Prozeß bereits der Klasse
Fixed-Priority an, bleibt der zugehörige Parameter unverändert. Wird
eine Option nicht angegeben, und erhält ein Prozeß einer anderen
Klasse die Klasse Fixed-Priority, wird der zugehörige Parameter auf
einen Standardwert gesetzt. Der Standardwert für rtpri ist 0. Der
Standardwert für die Zeitdauer hängt von der Priorität (fppri) und der
Konfiguration des Systems ab [siehe fpdptbl(4)].
Seite 11 Reliant UNIX 5.44 Gedruckt 11/98
priocntl(1) priocntl(1)
Wird die Option -t zeitdauer verwendet, können Sie wahlweise eine Auf-
lösung mit der Option -r auflösung angeben. (Ohne Angabe der Auflösung
wird als Einheit Millisekunden angenommen.) Wird auflösung angegeben,
muß es sich um eine positive ganze Zahl zwischen 1 und 1.000.000.000
einschließlich handeln. Der reziproke Wert von auflösung gibt die
benutzte Einheit in Sekunden an. Bei Angabe von -t 10 -r 100 würde die
Auflösung beispielsweise auf 1/100 Sekunde und die Zeitdauer auf
10/100 Sekunden (ein Zehntel einer Sekunde) gesetzt. Obwohl eine sehr
hohe Auflösung angegeben werden kann (nämlich eine Nanosekunde), wird
die angegebene Zeitdauer immer auf das nächste ganzzahlige Vielfache
der Auflösung der Systemuhr aufgerundet. Wird als Zeitdauer 0 angege-
ben oder ein Wert, der über dem Maximalwert für die Dauer von Zeit-
scheiben liegt, wird mit einer Fehlermeldung abgebrochen. Der Maximal-
wert hängt von der Implementierung ab.
Um eine unendliche Zeitscheibe einzustellen, kann anstelle eines Wer-
tes für zeitdauer der String INFINITE angegeben werden. Falls zeit-
dauer den Wert DEFAULT besitzt, wird der Zeitscheibenwert der Parame-
tertabelle des Fixed-Priority-Schedulers [siehe fpdptbl(4)] einge-
setzt.
Nur ein Benutzer mit Systemverwalterberechtigung kann mit priocntl
einem Prozeß einer anderen Klasse die Klasse Fixed-Priority geben.
Wenn Sie die Priorität oder die Länge der Zeitscheibe für einen
Fixed-Priority-Prozeß ändern wollen, müssen Sie entweder Systemverwal-
terberechtigung haben oder bereits in der Klasse Fixed-Priority sein
(Ihr Kommandointerpreter läuft als Fixed-Priority-Prozeß) und die
gleiche reale oder effektive Benutzernummer haben wie der Prozeß, des-
sen Parameter geändert werden sollen.
Die Fixed-Priority-Priorität und die Länge der Zeitscheibe werden bei
den Systemaufrufen fork(2) und exec(2) unverändert weitergegeben.
PROZESSOR-AFFINITÄ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äts-Mechanismus kann vom Systemverwalter prozeßweise
aktiviert und deaktiviert werden [siehe mpcntl(1M), mpcntl(3X)]. Der
Affinitäts-Mechanismus ist für die Time-Sharing- und Fixed-Priority-
Klasse standardmäßig auf on, für die Echtzeit-Klasse auf off gestellt.
Seite 12 Reliant UNIX 5.44 Gedruckt 11/98
priocntl(1) priocntl(1)
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ß).
FEHLERMELDUNGEN
Process(es) not found
Keiner der angegebenen Prozesse existiert in den unterstützten
Scheduler-Klassen.
Specified processes from different classes
Die Option -s zum Einstellen von Parametern wurde angegeben, die
Option -c klasse wurde nicht angegeben, und die spezifizierten
Prozesse gehören verschiedenen Klassen an.
Invalid option or argument
Eine Option oder ein Argument für eine Option ist unbekannt oder
ungültig.
Permissions error encountered on pid x
Sie haben keine Berechtigung, die Einstellungen für den Prozeß
mit der Prozeßnummer x zu ändern.
BEISPIELE
Beispiel 1
Durch die folgende Eingabe erhalten die Prozesse mit den angegebenen
Prozeßnummern die Klasse Echtzeit, sofern sie noch nicht zu dieser
Klasse gehören. Ihre Echtzeit-Priorität wird auf den Standardwert 0
gesetzt. Die Echtzeit-Parameter anderer Echtzeit-Prozesse bleiben
unverändert. Die Länge der Zeitscheibe wird für alle angegebenen Pro-
zesse auf 1/10 Sekunde gestellt (eine Einheit bei einer Auflösung von
1/10 Sekunde).
$ priocntl -s -c RT -t 1 -r 10 -i pid 1234 2345 3456
Beispiel 2
Die folgende Aufrufzeile startet das angegebene Kommando als Echt-
zeit-Prozeß mit einer Echtzeit-Priorität von 15 und einer Zeitscheibe
von 20 Millisekunden.
$ priocntl -e -c RT -p 15 -t 20 kommando
Seite 13 Reliant UNIX 5.44 Gedruckt 11/98
priocntl(1) priocntl(1)
Beispiel 3
Mit folgendem Kommando erhalten alle Prozesse mit der Benutzernummer
17 die Klasse Time-Sharing, sofern sie noch nicht zu dieser Klasse
gehören. Der Grenzwert für die Benutzer-Priorität und die Benutzer-
Priorität werden auf den Standardwert 0 gesetzt. Die Time-Sharing-
Parameter von Prozessen, die bereits der Klasse Time-Sharing angehö-
ren, bleiben unverändert.
$ priocntl -s -c TS -i uid 17
Beispiel 4
Die folgende Aufrufzeile startet das angegebene Kommando in der Klasse
Time-Sharing mit dem Grenzwert 0 für die Benutzer-Priorität und der
Benutzer-Priorität -15.
$ priocntl -e -c TS -m 0 -p -15 kommando argumente
Beispiel 5
priocntl setzt die Klasse aller durch typ und liste angegebenen Pro-
zesse, die nicht der Klasse Fixed-Priority angehören, auf Fixed-
Priority und setzt die Fixed-Priority-Priorität auf den Standardwert
0. Die Echtzeit-Prioritäten aller derzeit der Echtzeit-Klasse angehö-
rigen Prozesse bleiben unverändert. Die Länge der Zeitscheibe wird für
alle angegebenen Prozesse auf 1/10 Sekunde gesetzt:
priocntl -s -c FP -t 1 -r 10 -i typ liste
Beispiel 6
priocntl führt das kommando in der Fixed-Priority-Klasse mit einer
Priorität von 15 und einer Zeitscheibe von 20 Millisekunden aus:
priocntl -e -c FP -p 15 -t 20 kommando
SIEHE AUCH
nice(1), ps(1), priocntl(2), fpdptbl(4), rtdptbl(4), tsdptbl(4).
Seite 14 Reliant UNIX 5.44 Gedruckt 11/98