A Systemrufe für die Prozeßsteuerung (elementar, POSIX)
Schnittstelle zum Kern und damit auch zur Prozeßsteuerung sind die
sogenannten Kapitel (2) Systemrufe. Diese variieren von System zu
System in ihrer Namensgebung, ihren Aufrufkonventionen und ihrer
Semantik. Für die Betrachtungen der Arbeit sollte von einem wohl
definierten System ausgegangen werden. Hier wurde POSIX gewählt, auch
wenn in der Implementation aus praktischen Erwägungen ein anderes
System gewählt wurde. Für POSIX steht umfangreiches Material zur
Verfügung, das entsprechende Betrachtungen ermöglicht. Außerdem ist
bei den verschiedenen Systemen eindeutig ein Trend hin zu POSIX zu
erkennen. Die dem Autor zugänglichen Quellen erweckten den Eindruck,
daß während der Implementierung einer Funktion bei Zweifeln an der
Semantik POSIX eine der ersten Quellen war, die zu Rate gezogen
wurde. Erst wenn hier nichts zu dem gerade bearbeiteten Problem zu
finden war, wurden andere Quellen zu Rate gezogen oder eigene
Entscheidungen gefällt. A.1 Prozeßspezifische Systemcalls
- Process Creation and Execution
- Process Creation (fork())
- Execute a File (execve())
- Process Termination
- Wait for Process Termination (wait(), waitpid())
- Terminate a Process (exit(), _exit(), abort())
- Signals
- Timer Operations
- Schedule Alarm (alarm())
- Suspend Process Execution (pause())
- Delay Process Execution (sleep())
A.2 Prozeßumgebung
- Process Identification
- Get Process and Parent Process IDs (getpid(), getppid())
- User Identification
- Get Real User, Effective User, Real Group,
and Effective Group IDs (getuid(), geteuid(),
getgid(), getegid())
- Set User and Group IDs (setuid(), setgid())
- Get Supplementary Group IDs (getgroups())
- Get User Name (getlogin())
- Process Groups
- Get Process Group ID (getpgrp())
- Create Session and Set Process Group ID (setsid())
- Set Process Group ID for Job Control (setpgid())
- System Identification
- get System Name (uname())
- Time
- Get System Time (time())
- Get Process Time (times())
- Environment Variables
- Environment Access (getenv())
- Terminal Identification
- Generate Terminal Pathname (ctermid())
- Determine Terminal Device Name (ttyname())
- Configurable System Variables
- Get Configurable System Variables
B Glossar
- aktuelles Verzeichnis
- Einem Prozeß zugeordnetes Attribut, das
zur Auflösung von Namen herangezogen wird, die nicht mit `/' beginnen.
- API
- Die Schnittstelle, über die ein System nach außen hin Dienste
bereitstellt, wird Application Programming Interface (API)
genannt.
- BSS
- Der Teil eines Programms, der uninitialisierte Daten enthält,
wird BSS, ,,block started by symbol'', genannt. Dieser Teil wird in Unix
beim Laden des Programms mit Null initialisiert.
- Capability
- Ein Capability ist ein Objekt, das einem Server von
einem Klienten präsentiert wird, um Zugriff auf ein Objekt zu
erhalten.
- Datenraum
- Ein Datenraum ist ein Objekt, das in den virtuellen
Adreßraum einer Task gemappt werden kann.
- effective GID
- Attribut eines Prozesses, das zur Vergabe von
Rechten genutzt wird. Kann sich bei Ausführung von setgid() oder
exec() ändern.
- effective UID
- Attribut eines Prozesses, das zur Vergabe von
Rechten genutzt wird. Kann sich bei Ausführung von setuid() oder
exec() ändern.
- IBCS2
- Intel Binary Compatibility Standard 2, ein Standard,
der durch die Festlegung von Aufrufkonventionen für
Betriebssystemdienste die Ausführung von ein und dem selben Programm
auf verschiedenen Plattformen ermöglicht.
- Klient
- Als Klient wird im Client/Server-Modell ein Prozeß
bezeichnet, der von einem anderen Prozeß über IPC einen Dienst
anfordert. Die Prozesse sind unabhängig voneinander. Die einzige
Beziehung, die zwischen beiden besteht, ist die
Interprozeßkommunikation.
- Major Number
- Identifiziert einen Gerätetreiber im Unixkern.
- Minor Number
- Identifiziert ein Subgerät eines Gerätetreibers.
- pid
- Prozeß ID, dient der eindeutigen Identifikation eines
Prozesses.
- Prozeß
- Ein Adreßraum und ein einzelner Kontrollfluß werden in
Unix als Prozeß bezeichnet. Jeder Prozeß hat eine pid, UID, GID,
effective UID, effective GID u.a.m. Prozesse werden unter UNIX mittels
fork() erzeugt.
- Prozeßgruppe
- Eine Menge von Prozessen, die zusammen Signale
erhalten können. Ein neuer Prozeß wird der Prozeßgruppe seines Vaters
zugeordnet.
- real GID
- real group ID, die wirkliche Gruppen-Id eines
Unix-Prozesses. Dieses Attribut wird beim login() gesetzt und
bleibt bei einem nicht priveligierten Nutzer konstant. Es wird zur
Vergabe von Rechten benutzt.
- real UID, real GID
- real user ID, real group ID, die echten Id's
eines Nutzers. Jedem Nutzer ist genau eine UID/GID zugeordnet.
Die UID/GID wird beim login aus der einer Dateiausgelesen und dem
Prozeß zugeordnet. Sie bleiben bei einem nicht
priveligierten Nutzer konstant.
- saved UID, saved GID
- Attribute eines Prozesses, die zur Vergabe
von Rechten genutzt werden. Sie werden bei Ausführung von exec()
und setuid() auf den aktuellen Wert der effective UID/GID
gesetzt. Diese ID's gestatten eine flexible Handhabung der
setuid-Semantik durch einfaches Austauschen von saved UID/GID und
effective UID/GID.
- Signal
- Ein Mechanismus, durch den ein Prozeß im Falle eines
Systemereignisses benachrichtigt oder beeinflußt wird.
- Sohn-Prozeß (UNIX)
- Führt ein Prozeß eine fork()-Operation
aus, ist der entstehende Prozeß ein direkter Nachfolger dieses
Prozesses und wird als Sohn-Task bezeichnet.
- Steuerterminal
- Ein Terminal, das einer Session zugeordnet ist,
wird als Steuerterminal bezeichnet. Jede Session hat maximal ein
Terminal und ein Steuerterminal ist genau einer Session
zugeordnet. Von einem Steuerterminal aus können einem Prozeß Signale
gesendet werden.
- special node
- Ein spezieller Verzeichniseintrag, der auf ein Gerät
verweist. Er besteht in der Regel aus einem Typ (Block-, Zeichengerät)
und einer Major und Minor Number.
- session
- Eine Menge von Prozeßgruppen, die zum Zwecke der
Job-Steuerung zu einer Einheit zusammengefaßt werden.
- SVR4
- System five Release 4, eine UNIX-Implementierung, die eine
der beiden Hauptrichtungen in der UNIX-Entwicklung repräsentiert.
- Task
- Ein Adreßraum mit mindestens einem Kontrollfluß (Thread)
wird als Task bezeichnet.
- Threads
- Leichtgewichtige Prozesse, Prozesse ohne eigenen Adreßraum
werden als Threads bezeichnet. Sie stellen in der Regel den
Kontrollfluß in einer Task dar.
- Verzeichnis
- Eine Datei, die Verzeichniseinträge enthält, wird als
Verzeichnis bezeichnet.
- Verzeichniseintrag
- Ein Verzeichniseintrag ist ein Objekt, das
einem Dateinamen eine Datei zuordnet.
- Wurzelverzeichnis
- Jedem Unix-Prozeß ist ein Wurzelverzeichnis
zugeordnet, das als Startpunkt der Namensauflösung genutzt wird, wenn
0der Prozeß einen Namen angibt, der mit `/' beginnt.
Jean Wolter
14.11.1995