bs: 03 - prozesse...bs: 03 – prozesse 2 inhalt wiederholung prozesse konkret: unix-prozessmodell...

37
1 Betriebssysteme (BS) Prozesse Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund [email protected] http://ess.cs.uni-dortmund.de/~os/ http://ess.cs.tu-dortmund.de/DE/Teaching/SS2014/BS/

Upload: others

Post on 17-Jul-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

11

Betriebssysteme (BS)Prozesse

Olaf SpinczykArbeitsgruppe Eingebettete Systemsoftware

Lehrstuhl für Informatik 12TU Dortmund [email protected]://ess.cs.uni-dortmund.de/~os/

http://ess.cs.tu-dortmund.de/DE/Teaching/SS2014/BS/

Page 2: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 22

Inhalt● Wiederholung● Prozesse konkret: UNIX-Prozessmodell

● Shells und E/A● UNIX-Philosophie● Prozesserzeugung● Signale● Prozesszustände

● Leichtgewichtige Prozessmodelle● „Gewicht“ von Prozessen● Leichtgewichtige Prozesse● Federgewichtige Prozesse

● Systeme mit leichtgewichtigen Prozessen● Windows NT● Linux

Silberschatz, Kap. ...3.1-3.3: Process Concept21.4: Linux

Tanenbaum, Kap. ...2.1: Prozesse10.1-10.3: UNIX u. Linux

Silberschatz, Kap. …4: Multithreaded Progr.

Tanenbaum, Kap. …2.2: Threads

Page 3: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 33

Inhalt● Wiederholung● Prozesse konkret: UNIX-Prozessmodell

● Shells und E/A● UNIX-Philosophie● Prozesserzeugung● Signale● Prozesszustände

● Leichtgewichtige Prozessmodelle● „Gewicht“ von Prozessen● Leichtgewichtige Prozesse● Federgewichtige Prozesse

● Systeme mit leichtgewichtigen Prozessen● Windows NT● Linux

Page 4: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 44

Wiederholung: Prozesse ...● sind „Programme in Ausführung“

● Dynamisch, nicht statisch● Abwechselnde Folge von

„CPU-Stößen“ und „E/A-Stößen“

● benötigen „Betriebsmittel“ des Rechners● CPU, Speicher, E/A-Geräte

● haben einen Zustand● READY, RUNNING, BLOCKED

● werden konzeptionell als unabhängige, nebenläufige Kontrollflüsse betrachtet

● unterliegen der Kontrolle des Betriebssystems● Betriebsmittel-Zuteilung● Betriebsmittel-Entzug

RUNNING

BLOCKED READY

A

B C

Page 5: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 55

Inhalt● Wiederholung● Prozesse konkret: UNIX-Prozessmodell

● Shells und E/A● UNIX-Philosophie● Prozesserzeugung● Signale● Prozesszustände

● Leichtgewichtige Prozessmodelle● „Gewicht“ von Prozessen● Leichtgewichtige Prozesse● Federgewichtige Prozesse

● Systeme mit leichtgewichtigen Prozessen● Windows NT● Linux

Page 6: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 66

UNIX (K. Thompson, D. Ritchie, 1968)● Eine lange Geschichte …

● Ursprung: Bell Labs● Alternative zu „Multics“

● Version 1 entstand auf einer DEC PDP 7● Assembler, 8K 18 Bit Worte

● Version 3 in „C“ realisiert

Page 7: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 77

UNIX (K. Thompson, D. Ritchie, 1968)● Eine lange Geschichte ... Quelle: Wikipedia

1969

1971 to 1973

1974 to 1975

1978

1979

1980

1981

1982

1983

1984

1985

1986

1987

1988

1989

1990

1991

1992

1993

1994

1995

1996

1997

1998

1999

2000

2001 to 2004

2006 to 2010

2011

2005

1969

1971 to 1973

1974 to 1975

1978

1979

1980

1981

1982

1983

1984

1985

1986

1987

1988

1989

1990

1991

1992

1993

1994

1995

1996

1997

1998

1999

2000

2001 to 2004

2006 to 2010

2005

Open Source

Mixed/Shared Source

Closed Source

HP/UX 1.0 to 1.2

HP/UX 2.0 to 3.0

HP/UX 6 to 11

HP/UX 11i to 11i v3

OpenSolaris 2008.05 to

2009.

Solaris 2.1 to 10

System III

System V R1 to R2

System V R3

System V R4

Unixware 1.x to 2.x

Unixware 7.x

OpenServer 6.0

OpenServer 5.0.5 to 5.0.7

OpenServer 5.0 to 5.04

SCO Unix 3.2.4

SCO Xenix W386

SCO Xenix V386

SCO Xenix W286

SCO Xenix

Xenix 3.0

Xenix 1.0 to 2.3

PWB/Unix

AIX 1.0

AIX 3.x to 7.1

OpenBSD 2.3 to 5.0

OpenBSD 1.0 to 2.2

Sun OS 4

Sun OS 1.2 to 3.0

Sun OS 1 to 1.1

Unix 32v

UnixTSS 1 to 4

UnixTSS 5 to 6

UnixTSS 7

Unics

BSD 1.0 to 2.0

BSD 3.0 to 4.1

BSD 4.2

BSD 4.3

UnixTSS 8

UnixTSS (Time Sharing

System) 9 to 10

NEXTSTEP/ OPENSTEP 1.0 to 4.0

Mac OS X Server

Mac OS X 10.0 to 10.7.x

(Darwin)

Minix 1.x

Minix 2.x

Minix 3.x

Linux 2.0 to 2.6.x

Linux 0.95 to 1.2.x

Linux 0.0.1

BSD 4.3 Tahoe

BSD 4.3 Reno

BSD 4.4 to

4.4 lite2

NetBSD 0.8 to 1.0

NetBSD 1.1 to 1.2

NetBSD 1.3

NetBSD 1.3 to 5.x

FreeBSD 3.3 to 8.2

FreeBSD 3.0 to 3.2

FreeBSD 1.0 to 2.2.x

386BSD

BSD NET/2

Linux 3.x 2011

Page 8: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 88

UNIX-Prozesse ...● sind primäres Strukturierungskonzept für Aktivitäten

● Anwendungsprozesse und Systemprozesse● können leicht und schnell weitere Prozesse erzeugen

● Elternprozess → Kindprozess● bilden eine Prozess-Hierarchie:

swapper (PID 0)

init (PID 1)

getty tty0loginbash

getty tty1 getty tty2

grep Olaf file.c firefox

...

Der init-Prozess liest aus der /etc/inittab die Liste der Terminals und startet für jedes das Programm getty, das die Einwahl über das Terminal mit Hilfe von login erlaubt.

Der init-Prozess liest aus der /etc/inittab die Liste der Terminals und startet für jedes das Programm getty, das die Einwahl über das Terminal mit Hilfe von login erlaubt.

Auch die Shell nutzt Prozesse: Jedes Kommando wird als eigener Kindprozess ausgeführt.

Auch die Shell nutzt Prozesse: Jedes Kommando wird als eigener Kindprozess ausgeführt.

Jeder UNIX-Prozess hat eine eindeutige Nummer (Prozess-ID, PID). Die PID des Elternprozesses heißt PPID.

Jeder UNIX-Prozess hat eine eindeutige Nummer (Prozess-ID, PID). Die PID des Elternprozesses heißt PPID.

pagedaemon (PID 2)

Page 9: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 99

UNIX-Shells● „Schale“ (shell), die den „Kern“ (kernel) umgibt

● Textbasierte Nutzerschnittstellezum Starten von Kommandos:● Suche im Dateisystem entsprechend $PATH (z.B. /usr/bin:/bin:...)

● Jedes ausgeführte Kommando ist ein eigener Kindprozess

● Typischerweise blockiert die Shell bis das Kommando terminiert

● Man kann aber auch Kommandos stoppen und fortsetzen(„job control“) oder sie im Hintergrund ausführen ...

olaf@xantos:~> which emacs/usr/bin/emacsolaf@xantos:~> which emacs/usr/bin/emacs

Das Kommando which zeigtan, wo ein bestimmtesKommando gefunden wird.

Das Kommando which zeigtan, wo ein bestimmtesKommando gefunden wird.

Page 10: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 1010

UNIX-Shells: Job Control

[1]+ Stopped emacs foo.colaf@xantos:~> kate bar.c &[2] 19504olaf@xantos:~> jobs[1]+ Stopped emacs foo.c[2]- Running kate bar.c &olaf@xantos:~> bg %1[1]+ emacs foo.c &olaf@xantos:~> jobs[1]- Running emacs foo.c &[2]+ Running kate bar.c &

[1]+ Stopped emacs foo.colaf@xantos:~> kate bar.c &[2] 19504olaf@xantos:~> jobs[1]+ Stopped emacs foo.c[2]- Running kate bar.c &olaf@xantos:~> bg %1[1]+ emacs foo.c &olaf@xantos:~> jobs[1]- Running emacs foo.c &[2]+ Running kate bar.c &

olaf@xantos:~> emacs foo.colaf@xantos:~> emacs foo.c

Ctrl-Z

• Kommando wird gestartet• die Shell blockiert• Kommando wird gestartet• die Shell blockiert

• Kommando wird gestoppt• die Shell läuft weiter• Kommando wird gestoppt• die Shell läuft weiter

• Durch das & am Endewird kate im Hintergrundgestartet

• Durch das & am Endewird kate im Hintergrundgestartet

• jobs zeigt alle gestartetenKommandos an

• jobs zeigt alle gestartetenKommandos an

• bg schickt ein gestopptesKommando in denHintergrund

• bg schickt ein gestopptesKommando in denHintergrund

Page 11: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 1111

Standard-E/A-Kanäle von Prozessen● Normalerweise verbunden mit dem Terminal, in dem die

Shell läuft, die den Prozess gestartet hat:● Standard-Eingabe Zum Lesen von Benutzereingaben

(Tastatur)

● Standard-Ausgabe Textausgaben des Prozesses(Terminalfenster)

● Standard-Fehlerausgabe Separater Kanal für Fehlermeldungen(normalerweise auch das Terminal)

● Praktisch alle Kommandos akzeptieren auch Dateien als Ein- oder Ausgabekanäle (statt des Terminals)

● Shells bieten eine einfache Syntax, um die Standard-E/A-Kanäle umzuleiten ...

Page 12: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 1212

Standard-E/A-Kanäle umleiten

olaf@xantos:~> ls -l > d1olaf@xantos:~> grep "Sep 2007" < d1 > d2olaf@xantos:~> wc < d2 2 18 118

olaf@xantos:~> ls -l > d1olaf@xantos:~> grep "Sep 2007" < d1 > d2olaf@xantos:~> wc < d2 2 18 118

Umleitung der Standard-Ausgabein die Datei „d1“ mit >Umleitung der Standard-Ausgabein die Datei „d1“ mit >

Umleitung der Standard-Eingabeauf die Datei „d2“ mit <Umleitung der Standard-Eingabeauf die Datei „d2“ mit <

Das gleiche noch etwas kompakter ...

olaf@xantos:~> ls -l | grep "Sep 2007" | wc 2 18 118olaf@xantos:~> ls -l | grep "Sep 2007" | wc 2 18 118

Mit | (pipe) verbindet die Shell die Standard-Ausgabedes linken mit der Standard-Eingabe des rechten Prozesses.Mit | (pipe) verbindet die Shell die Standard-Ausgabedes linken mit der Standard-Eingabe des rechten Prozesses.

Page 13: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 1313

Die UNIX-Philosophie

Doug McIlroy, der Erfinder der UNIX-Pipes, fasste die Philosophie hinter UNIX einmal wie folgt zusammen:

"This is the Unix philosophy: ● Write programs that do one thing and do it well.● Write programs to work together.● Write programs to handle text streams,

because that is a universal interface."

Für gewöhnlich wird das abgekürzt:

„Do one thing, do it well.“

Für gewöhnlich wird das abgekürzt:

„Do one thing, do it well.“

Page 14: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 1414

UNIX-Prozesssteuerung: System CallsEin erster Überblick ...

● getpid (2) liefert PID des laufenden Prozesses

● getppid (2) liefert PID des Elternprozesses (PPID)

● getuid (2) liefert die Benutzerkennung deslaufenden Prozesses (UID)

● fork (2) erzeugt neuen Kindprozess

● exit (3), _exit (2) beendet den laufenden Prozess

● wait (2) wartet auf die Beendigung einesKindprozesses

● execve (2) lädt und startet ein Programm imKontext des laufenden Prozesses

Page 15: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 1515

UNIX-Prozesse im Detail: fork()

System Call: pid_t fork (void)

● Dupliziert den laufenden Prozess (Prozesserzeugung!)● Der Kindprozess erbt ...

● Adressraum (code, data, bss, stack)● Benutzerkennung● Standard-E/A-Kanäle● Prozessgruppe, Signaltabelle (dazu später mehr)● Offene Dateien, aktuelles Arbeitsverzeichnis (dazu viel später mehr)

● Nicht kopiert wird ...● Process ID (PID), Parent Process ID (PPID)● anhängige Signale, Accounting-Daten, ...

● Ein Prozess ruft fork auf,aber zwei kehren zurück

System Call: pid_t fork (void)

● Dupliziert den laufenden Prozess (Prozesserzeugung!)● Der Kindprozess erbt ...

● Adressraum (code, data, bss, stack)● Benutzerkennung● Standard-E/A-Kanäle● Prozessgruppe, Signaltabelle (dazu später mehr)● Offene Dateien, aktuelles Arbeitsverzeichnis (dazu viel später mehr)

● Nicht kopiert wird ...● Process ID (PID), Parent Process ID (PPID)● anhängige Signale, Accounting-Daten, ...

● Ein Prozess ruft fork auf,aber zwei kehren zurück

?

Page 16: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 1616

Verwendung von fork()... /* includes */int main () { int pid; printf(“Elternpr.: PID %d PPID %d\n”, getpid(), getppid()); pid = fork(); /* Prozess wird dupliziert! Beide laufen an dieser Stelle weiter. */ if (pid > 0) printf(“Im Elternprozess, Kind-PID %d\n”, pid); else if (pid == 0) printf(“Im Kindprozess, PID %d PPID %d\n”, getpid(), getppid()); else printf(“Oh, ein Fehler!\n”); /* mehr dazu in der TÜ */}

... /* includes */int main () { int pid; printf(“Elternpr.: PID %d PPID %d\n”, getpid(), getppid()); pid = fork(); /* Prozess wird dupliziert! Beide laufen an dieser Stelle weiter. */ if (pid > 0) printf(“Im Elternprozess, Kind-PID %d\n”, pid); else if (pid == 0) printf(“Im Kindprozess, PID %d PPID %d\n”, getpid(), getppid()); else printf(“Oh, ein Fehler!\n”); /* mehr dazu in der TÜ */}

olaf@xantos:~> ./forkElternpr.: PID 7553 PPID 4014Im Kindprozess, PID 7554 PPID 7553Im Elternprozess, Kind-PID 7554

olaf@xantos:~> ./forkElternpr.: PID 7553 PPID 4014Im Kindprozess, PID 7554 PPID 7553Im Elternprozess, Kind-PID 7554

Page 17: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 1717

Diskussion: Schnelle Prozesserzeugung● Das Kopieren des Adressraums kostet viel Zeit

● Insbesondere bei direkt folgendem exec..() pure Verschwendung!

● Historische Lösung: vfork● Der Elternprozess wird suspendiert, bis der Kindprozess exec..()

aufruft oder mit _exit() terminiert.● Der Kindprozess benutzt einfach Code und Daten des

Elternprozesses (kein Kopieren!).● Der Kindprozess darf keine Daten verändern.

- teilweise nicht so einfach: z.B. kein exit() aufrufen, sondern _exit()!

● Heutige Lösung: copy-on-write● Mit Hilfe der MMU teilen sich Eltern- und Kindprozess dasselbe

Code- und Datensegment. Erst wenn der Kindprozess Daten ändert, wird das Segment kopiert.

● Wenn nach dem fork() direkt ein exec..() folgt, kommt das nicht vor.● Heutzutage benutzen fork und vfork copy-on-write.

Page 18: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 1818

UNIX-Prozesse im Detail: _exit()

System Call: void _exit (int)

● Terminiert den laufenden Prozess und übergibt das Argument als „exit status“ an den Elternprozess.● Aufruf kehrt nicht zurück!

● Gibt die belegten Ressourcen des Prozesses frei.● offene Dateien, belegter Speicher, ...

● Sendet dem eigenen Elternprozess das Signal SIGCHLD.● Die Bibliotheksfunktion exit (3) räumt zusätzlich noch die

von der libc belegten Ressourcen auf● Gepufferte Ausgaben werden beispielsweise herausgeschrieben!● Normale Prozesse sollten exit (3) benutzen, nicht _exit.

System Call: void _exit (int)

● Terminiert den laufenden Prozess und übergibt das Argument als „exit status“ an den Elternprozess.● Aufruf kehrt nicht zurück!

● Gibt die belegten Ressourcen des Prozesses frei.● offene Dateien, belegter Speicher, ...

● Sendet dem eigenen Elternprozess das Signal SIGCHLD.● Die Bibliotheksfunktion exit (3) räumt zusätzlich noch die

von der libc belegten Ressourcen auf● Gepufferte Ausgaben werden beispielsweise herausgeschrieben!● Normale Prozesse sollten exit (3) benutzen, nicht _exit.

Page 19: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 1919

Diskussion: Verwaiste Prozesse(engl. „orphan processes“)

● Ein UNIX-Prozess wird zum Waisenkind,wenn sein Elternprozess terminiert.

● Was passiert mit der Prozesshierarchie?

init (PID 1)

getty tty0loginbash

firefox

exit!

init (PID 1)

firefox

init (PID 1) adoptiert alle verwaisten Prozesse.So bleibt die Prozesshierarchie intakt.init (PID 1) adoptiert alle verwaisten Prozesse.So bleibt die Prozesshierarchie intakt.

Page 20: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 2020

UNIX-Prozesse im Detail: wait()

System Call: pid_t wait (int *)

● Blockiert den aufrufenden Prozess bis ein Kindprozess terminiert. Der Rückgabewert ist dessen PID. Über das Zeigerargument erhält der Aufrufer u.a. den „exit status“.

● Wenn ein Kindprozess bereits terminiert ist, kehrt der Aufruf sofort zurück.

System Call: pid_t wait (int *)

● Blockiert den aufrufenden Prozess bis ein Kindprozess terminiert. Der Rückgabewert ist dessen PID. Über das Zeigerargument erhält der Aufrufer u.a. den „exit status“.

● Wenn ein Kindprozess bereits terminiert ist, kehrt der Aufruf sofort zurück.

Page 21: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 2121

Verwendung von wait()

... /* includes, main() { ... */pid = fork(); /* Kindprozess erzeugen */if (pid > 0) { int status; sleep(5); /* Bibliotheksfunktion: 5 Sek. schlafen */ if (wait(&status) == pid && WIFEXITED(status)) printf ("Exit Status: %d\n", WEXITSTATUS(status));}else if (pid == 0) { exit(42);}...

... /* includes, main() { ... */pid = fork(); /* Kindprozess erzeugen */if (pid > 0) { int status; sleep(5); /* Bibliotheksfunktion: 5 Sek. schlafen */ if (wait(&status) == pid && WIFEXITED(status)) printf ("Exit Status: %d\n", WEXITSTATUS(status));}else if (pid == 0) { exit(42);}...

Ein Prozess kann auch von außen„getötet“ werden, d.h. er ruft nichtexit auf. In diesem Fall würdeWIFEXITED 0 liefern.

Ein Prozess kann auch von außen„getötet“ werden, d.h. er ruft nichtexit auf. In diesem Fall würdeWIFEXITED 0 liefern.

olaf@xantos:~> ./waitExit Status: 42olaf@xantos:~> ./waitExit Status: 42

Page 22: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 2222

Diskussion: Zombies● Bevor der exit status eines terminierten Prozesses mit

Hilfe von wait abgefragt wird, ist er ein „Zombie“.● Die Ressourcen solcher Prozesse können freigegeben

werden, aber die Prozessverwaltung muss sie noch kennen.● Insbesondere der exit status muss gespeichert werden.

olaf@xantos:~> ./wait &olaf@xantos:~> ps PID TTY TIME CMD 4014 pts/4 00:00:00 bash17892 pts/4 00:00:00 wait17895 pts/4 00:00:00 wait <defunct>17897 pts/4 00:00:00 psolaf@xantos:~> Exit Status: 42

olaf@xantos:~> ./wait &olaf@xantos:~> ps PID TTY TIME CMD 4014 pts/4 00:00:00 bash17892 pts/4 00:00:00 wait17895 pts/4 00:00:00 wait <defunct>17897 pts/4 00:00:00 psolaf@xantos:~> Exit Status: 42

Beispielprogrammvon eben während der 5 Sekunden Wartezeit.

Beispielprogrammvon eben während der 5 Sekunden Wartezeit.

Zombies werdenvon ps als<defunct>dargestellt.

Zombies werdenvon ps als<defunct>dargestellt.

Page 23: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 2323

Zombies ...● Film vom 1968● Regie: G. A. Romero

Wikipedia: In 1999 the Library of Congress entered it into the United States National Film Registry with other films deemed „historically, culturally or aesthetically important.“

Wikipedia: In 1999 the Library of Congress entered it into the United States National Film Registry with other films deemed „historically, culturally or aesthetically important.“

Page 24: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 2424

UNIX Prozesse im Detail: execve()

System Call: int execve (const char *kommando,const char *args[ ],const char *envp[ ])

● Lädt und startet das angegebene Kommando.

● Der Aufruf kehrt nur im Fehlerfall zurück.

● Der komplette Adressraum wird ersetzt.

● Es handelt sich aber weiterhin um denselben Prozess!● Selbe PID, PPID, offenen Dateien, ...

● Die libc biete einige komfortable Hilfsfunktionen, die intern execve aufrufen: execl, execv, execlp, execvp, ...

System Call: int execve (const char *kommando,const char *args[ ],const char *envp[ ])

● Lädt und startet das angegebene Kommando.

● Der Aufruf kehrt nur im Fehlerfall zurück.

● Der komplette Adressraum wird ersetzt.

● Es handelt sich aber weiterhin um denselben Prozess!● Selbe PID, PPID, offenen Dateien, ...

● Die libc biete einige komfortable Hilfsfunktionen, die intern execve aufrufen: execl, execv, execlp, execvp, ...

Page 25: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 2525

Verwendung von exec..()

... /* includes, main() { ... */char cmd[100], arg[100];while (1) { printf ("Kommando?\n"); scanf ("%99s %99s", cmd, arg); pid = fork(); /* Prozess wird dupliziert! Beide laufen an dieser Stelle weiter. */ if (pid > 0) { int status; if (wait(&status) == pid && WIFEXITED(status)) printf ("Exit Status: %d\n", WEXITSTATUS(status)); } else if (pid == 0) { execlp(cmd, cmd, arg, NULL); printf ("exec fehlgeschlagen\n"); }...}

... /* includes, main() { ... */char cmd[100], arg[100];while (1) { printf ("Kommando?\n"); scanf ("%99s %99s", cmd, arg); pid = fork(); /* Prozess wird dupliziert! Beide laufen an dieser Stelle weiter. */ if (pid > 0) { int status; if (wait(&status) == pid && WIFEXITED(status)) printf ("Exit Status: %d\n", WEXITSTATUS(status)); } else if (pid == 0) { execlp(cmd, cmd, arg, NULL); printf ("exec fehlgeschlagen\n"); }...}

Page 26: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 2626

Diskussion: Warum kein forkexec()?● Durch die Trennung von fork und execve hat der

Elternprozess mehr Kontrolle:

● Operationen im Kontext des Kindprozesses ausführen

● Voller Zugriff auf die Daten des Elternprozesses

● Shells nutzen diese Möglichkeit zum Beispiel zur ...

● Umleitung der Standard-E/A-Kanäle

● Aufsetzen von Pipes

Page 27: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 2727

Signale● Mit Hilfe von Signalen können Prozesse über

Ausnahmesituation informiert werden● ähnlich wie Hardwareunterbrechungen

● Beispiele:● SIGINT Prozess abbrechen (z.B. bei Ctrl-C)● SIGSTOP Prozess anhalten (z.B. bei Ctrl-Z)● SIGWINCH Fenstergröße wurde geändert● SIGCHLD Kindprozess terminiert● SIGSEGV Speicherschutzverletzung des Prozesses● SIGKILL Prozess wird getötet● ...

● Die Standardbehandlung (terminieren, anhalten, ...) kann für die meisten Signale überdefiniert werden.● siehe signal (2)

Page 28: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 2828

UNIX-Prozesszustände● ein paar mehr als wir bisher kannten...

Zombieschlafend,

imSpeicher

schlafend,ausgela-

gert

bereit,ausge-lagert

bereit,im Spei-

cher

erzeugt

imKern

laufend

verdrängt

imBenutzer-

moduslaufend

exit

fork

Auslagerung

Einlagerung

Verdrängung

Aufwecken

Auslagerung

Schlafen

Unterbrechung,U.-Rückkehr

Systemaufruf,

Unterbrechung

RückkehrCPU-Zuteilung

Aufwecken

genugSpeicher

nicht genugSpeicher

CPU-Zuteilung

Bild in Anlehnung an M. Bach „UNIX – Wie funktioniert das Betriebssystem?“

Page 29: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 2929

Inhalt● Wiederholung● Prozesse konkret: UNIX-Prozessmodell

● Shells und E/A● UNIX Philosophie● Prozesserzeugung● Signale● Prozesszustände

● Leichtgewichtige Prozessmodelle● „Gewicht“ von Prozessen● Leichtgewichtige Prozesse● Federgewichtige Prozesse

● Systeme mit leichtgewichtigen Prozessen● Windows NT● Linux

Page 30: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 3030

Das „Gewicht“ von Prozessen● Das Gewicht eines Prozesses ist ein bildlicher Ausdruck

für die Größe seines Kontexts und damit die Zeit, die für einen Prozesswechsel benötigt wird.● CPU-Zuteilungsentscheidung

● alten Kontext sichern

● neuen Kontext laden

● Klassische UNIX-Prozesse sind „schwergewichtig“.

Page 31: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 3131

Leichtgewichtige Prozesse (Threads)● Die 1:1-Beziehung zwischen Kontrollfluss und Adressraum

wird aufgebrochen.● Eng kooperierende Threads (deutsch „Fäden“) können sich einen

Adressraum teilen (code + data + bss, nicht stack!).

● Vorteile:● Aufwändige Operationen können in einen leichtgewichtigen

Hilfsprozess ausgelagert werden, während der Elternprozess erneut auf Eingabe reagieren kann.- Typisches Beispiel: Webserver

● Programme, die aus mehreren unabhängigen Kontrollflüssen bestehen, profitieren unmittelbar von Multiprozessor-Hardware.

● Schneller Kontextwechsel, wenn man im selben Adressraum bleibt.● Je nach Scheduler eventuell mehr Rechenzeit.

● Nachteil:● Programmierung ist schwierig: Zugriff auf gemeinsame Daten muss

koordiniert werden.

Page 32: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 3232

Federgewichtige Prozesse(engl. User-Level Threads)

● Werden komplett auf der Anwendungsebene implementiert. Das Betriebssystem weiß nichts davon.● Realisiert durch Bibliothek: User-Level Thread Package

● Vorteile:● Extrem schneller Kontextwechsel: Nur wenige Prozessorregister

sind auszutauschen. Ein Trap in den Kern entfällt.● Jede Anwendung kann sich das passende Thread-Package wählen.

● Nachteile:● Blockierung eines federgewichtigen Prozesses führt zur Blockierung

des ganzen Programms.● Kein Geschwindigkeitsvorteil durch Multi-Prozessoren.● Kein zusätzlicher Rechenzeitanteil.

Page 33: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 3333

Inhalt● Wiederholung● Prozesse konkret: UNIX-Prozessmodell

● Shells und E/A● UNIX Philosophie● Prozesserzeugung● Signale● Prozesszustände

● Leichtgewichtige Prozessmodelle● „Gewicht“ von Prozessen● Leichtgewichtige Prozesse● Federgewichtige Prozesse

● Systeme mit leichtgewichtigen Prozessen● Windows NT● Linux

Page 34: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 3434

Threads in Windows (1)

Prozess

Stack 1

Code

Globale undstatische Daten

Stack 2 Stack 3 Stack 4

Ein Prozess enthält 1 bis N Thread, dieauf denselben globalen Daten operieren.Ein Prozess enthält 1 bis N Thread, dieauf denselben globalen Daten operieren.

Page 35: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 3535

Threads in Windows (2)● Prozess: Umgebung und Adressraum für Threads

● Ein Win32-Prozess enthält immer mindestens 1 Thread

● Thread: Code ausführende Einheit● Jeder Thread verfügt über einen eigenen Stack

und Registersatz (insbesondere PC)

● Threads bekommen vom Scheduler Rechenzeit zugeteilt

● Alle Threads sind Kernel-Level Threads● User-Level Threads möglich („Fibers“), aber unüblich

● Strategie: Anzahl der Threads gering halten● Überlappte (asynchrone) E/A

Page 36: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 3636

Threads in Linux● Linux implementiert POSIX Threads

in Form der pthread-Bibliothek● Möglich macht das ein Linux-spezifischer System Call

● Für Linux sind alle Threads und Prozesse intern „Tasks“● Der Scheduler macht also keinen Unterschied

Linux System Call: int __clone (int (*fn)(void *), void *stack,

int flags, void *arg)

● Universelle Funktion, parametrisiert durch flags● CLONE_VM Adressraum gemeinsam nutzen● CLONE_FS Information über Dateisystem teilen● CLONE_FILES Dateideskriptoren (offene Dateien) teilen● CLONE_SIGHANDGemeinsame Signalbehandlungstabelle

Linux System Call: int __clone (int (*fn)(void *), void *stack,

int flags, void *arg)

● Universelle Funktion, parametrisiert durch flags● CLONE_VM Adressraum gemeinsam nutzen● CLONE_FS Information über Dateisystem teilen● CLONE_FILES Dateideskriptoren (offene Dateien) teilen● CLONE_SIGHANDGemeinsame Signalbehandlungstabelle

Page 37: BS: 03 - Prozesse...BS: 03 – Prozesse 2 Inhalt Wiederholung Prozesse konkret: UNIX-Prozessmodell Shells und E/A UNIX-Philosophie Prozesserzeugung Signale Prozesszustände …

BS: 03 – Prozesse 3737

Zusammenfassung● Prozesse sind die zentrale Abstraktion für Aktivitäten in

heutigen Betriebssystemen.

● UNIX-Systeme stellen diverse System Calls zur Verfügung, um Prozesse zu erzeugen, zu verwalten und miteinander zu verknüpfen.

● alles im Sinne der Philosophie: „Do one thing, do it well.“

● Leichtgewichtige Fadenmodelle haben viele Vorteile

● in UNIX-Systemen bis in die 90er Jahre nicht verfügbar

● in Windows von Beginn an (ab NT) integraler Bestandteil