Startseite
    der Anfang
    Wintersemester 2007/08
    Unix Praktikum
    Experimentelle Gestaltung
    Grundlagen analoger Gestaltung
    Mathe für Medieninformatiker 1
    Einführung in die Informatik 1
    Film Ab! Kurs -> individuelle Ergänzung
    Meine Wenigkeit
    Fotoalbum
    Dear Diary
  Archiv
  Gästebuch
  Kontakt
 


http://myblog.de/kopffick

Gratis bloggen bei
myblog.de





UNIX
Vorlesung 4 – Unix Prozesse und Signale


-> Hintergrund: Multitasking
_ Timesharing-System
_ Prozeflhierarchie
_ init als Urprozefl
_ Vererbung von Prozeflattributen
_ Prozeflzust‰nde: running, ready, blocked
_ Zombies


-> Prozesse
Unter UNIX wird für jedes Programm, das ausgeführt wird ein eigener Prozess gestartet, welcher zu allen übrigen Prozessen parallel abläuft. Der Programmcode und die Programmdaten werden im Hauptspeicher geladen und gestartet.
Damit in der Prozessverwaltung kein Chaos entsteht, ist jeder Prozess mit einer eindeutigen PID (Prozess ID) versehen.Wird Z.B. ein Programm zweimal gestartet (gleicher oder verschiedene Benutzer), so handelt sich um 2 verschiedene Prozesse,(mit verschiedenen PID) obwohl beide den gleichen Programmcode ausführen. Ein Prozess bleibt solange bestehen, bis er beendet wird.
Ein Prozess kann einen oder mehrere andere Prozesse starten, die wiederum Kindprozesse erzeugen können usw. Man spricht von Elternprozess und Kindprozessen (oder Vater-Sohn-Prozessen). Die Prozesse bilden eine Prozesshierarchie.
Zu jeder Anmeldung beim Rechner gehören der Login-Prozess (der die Anmeldung bearbeitet) und der
Kommandointerpreter Prozess (Shell). Shell liest die Kommandoeingaben, interpretiert sie und führt sie aus.
Neben der PID zeigt die PPID unter welchem Prozess ein Sohnprozess gestartet wurde. Ob alle dazugehörigen Sohnprozesse beendet werden, wenn der Vaterprozess beendet wird, ist vom System und Typ des Vaterprozesses abhängig (Ausnahme: Prozesse, die mit at, batch oder nohup gestartet werden).

-> Prozesszustände:
Ein Prozess kann mehrere Zustände haben. Die wichtigsten sind:
Aktiv (English running): Der Prozess wird jetzt von den CPU bearbeitet
Bereit (English ready): Er wartet auf die Zuteilung der CPU Zeit.
Blockiert (English blocked): Er wartet auf noch nicht verfügbare Ressourcen oder Ereignisse: Z.B. Benutzer
Eingabe, Daten von Plattenspeicher, Signal von einem anderen Prozess, …)
Suspendiert (English suspended): Der blockierte Prozess wird zusätzlich auf eine Speicherplatte ausgelagert und somit ist der Hauptspeicher für andere Programme frei.
Beendet
Das Betriebsystem ist zuständig für Prozessverwaltung, und kann eine der folgenden Operationen über einem Prozess ausführen:
Einen Prozess generieren (start). Zu jedem Prozess gehört ein Prozesskontrollblock (PCB) und andere
Informationen
Momentaner Prozesszustand
PID, PPID, UID (User Identity), GID (Group Identity)
Priorität des Prozesses
Adresse des Prozesses im Hauptspeicher
Ressourcen, die vom Prozess gebraucht werden
Einen Prozess anhalten (suspend)
Einen Prozess wieder starten (resume)
Prozesspriorität ändern (Prozesse werden nicht gleichwertig bedient. Die Zuteilung von CPU Zeit (Scheduling)
ist abhängig von Priorität. )
Einen Prozess beenden (terminate)
Wenn viele Prozesse gleichzeitig im System laufen, muss jeder Prozess länger warten, bis er wieder bearbeitet wird.
Alle Prozesse derselben Priorität müssen gleich lange warten. Die Priorität kann aber geändert werden, so dass einige
Prozesse häufiger von der CPU bearbeitet werden als andere und somit eine kürzere Laufzeit haben. Die UID (User ID)
bezeichnet den Eigentümer des Prozesses; nur der Eigentümer (oder Systemadministrator als Superuser) kann einen
Prozess manipulieren (z.B. mit dem Shell-Kommando „nice“).

-> Prozeßerzeugung
_ Vordergrundprozesse: Shell wartet (blockiert)
_ Hintergrundprozesse: Shell wartet nicht

-> Prozeßinfo
Das Betriebssystem führt intern eine Liste aller Prozesse, über die man alle Verwaltungsdaten eines Prozesses erreichen kann. Die wichtigste davon ist die PID, eine Integerzahl, die den Prozeß eindeutig kennzeichnet. Daneben gibt es noch den Status, zugehöriges Terminal, Prozeßnummer des Prozeß-Vaters, Benutzernummer, Priorität uvm.
Mit dem Kommando ps kann man sich Ausschnitte dieser Liste anzeigen lassen. Anders als jobs, ist dieses Kommando nicht Shell-intern. Es liest seine Daten direkt aus dem Datenbereich des Betriebssystems. Das Problem hierbei ist, daß es sehr unterschiedliche Optionen unter verschiedenen UNIX-Derivaten hat. Deshalb wird im folgenden für System-V (HP- und SGI-Rechner) und BSD (bzw. SunOS) getrennt beschrieben.
Gibt man einfach ps ein, so wird nur der Status der Prozesse ausgegeben, die von der Shell, auf der man das ps-Kommando startet, gestartet wurden. Das sind also mindestens die Shell selbst und der ps-Prozess. Man bekommt eine Liste aller seiner Prozesse auf diesem Rechner mit der Option -x (BSD) bzw. -u loginname (SysV).
Normalerweise bekommt man nur eine kurze Ausgabe mit Angaben je Prozeß über PID (Prozeßnummer: dies ist eine Verwaltungsnummer des Betriebssystems. Man braucht diese Nummer z.B. für das kill Kommando), TTY (Terminal von dem aus das Kommando gestartet wurde), Status (nur BSD: z.B. S für Suspended, oder R für Running), TIME (verbrauchte Rechenzeit) und COMMAND (Kommandoname und alle Parameter).
_ ps -a: alle Ñinteressantenì Prozesse (mit TTY)
_ ps -e: alle Prozesse
_ ps -f: zus‰tzliche Info
_ ps -u user: Prozesse von user
juser@vino ps -f
UID PID PPID C STIME TTY TIME CMD
juser 8300 8291 80 03:28:31 pts/1 0:01 bash
juser 8333 8300 19 03:32:25 pts/1 0:00 ps –f

_ top: dynamische ‹bersicht ¸ber aktivste Prozesse

last pid: 18017; load averages: 0.27, 0.30, 0.45 14:05:10
43 processes: 40 sleeping, 2 stopped, 1 on cpu
CPU states: 94.7% idle, 0.6% user, 1.9% kernel, 2.8% iowait, 0.0% swap
Memory: 32M real, 3552K free, 25M swap in use, 232M swap free

PID USERNAME THR PRI NICE SIZE RES STATE TIME CPU COMMAND
18016 juser 1 50 0 1280K 1036K cpu 0:00 3.29% top-5.8
123 root 1 58 0 4012K 1140K sleep 132:29 2.27% amd
18010 juser 1 58 0 2908K 1900K sleep 0:00 1.95% xterm
18011 juser 1 48 0 1836K 1140K sleep 0:00 1.75% bash
17880 root 1 59 0 24M 2212K sleep 0:07 1.11% Xsun
154 root 8 22 0 3304K 1576K sleep 10:44 0.23% nscd
100 root 1 58 0 1972K 332K sleep 3:45 0.05% inetd
138 root 1 58 0 1584K 372K sleep 0:42 0.02% syslogd
2615 root 1 58 0 1376K 236K sleep 1:18 0.00% cron

-> init als Urprozeß
init ist dafür verantwortlich, das Hochfahren von Unix zu
kontrollieren, nachdem der Kernel gebootet wurde.
Dazu werden normalerweise die systemabh¨angigen
Init-Dateien gelesen: /etc/rc* auf BSD-¨ahnlichen
Systemen und /etc/inittab und die Dateien in
/etc/init.d auf System V.
Neuere Unix-Systeme verwenden andere Mechanismen,
um den Systemstart zu kontrollieren: Solaris und OS X
k¨onnen Startup-Vorg¨ange parallelisieren
Das System wird von init in einen definierten Zustand
gebracht, z.B. Multiuser-Betrieb. In System V- ¨ahnlichen
Systemen kann der Zustand durch den init-Level (z.B. 3 f ¨ ur
Multiuser, 5 f ¨ ur Multiuser+GUI) selektiert werden
Der Init-Prozess stirbt nie. Es ist ein normaler Prozess,
kein Systemprozess innerhalb des Kernels – aber init l ¨ auft
mit den Privilegien des Superusers.
Init ist der erste Prozess in der Unix-Prozesshierarchie und
der “Vorfahr” aller Prozesse, die aktuell auf einem System
laufen.

UID PID PPID CLS PRI STIME TTY TIME CMD
root 0 0 SYS 96 Nov 12 ? 0:02 sched
root 1 0 FSS 49 Nov 12 ? 2:36 /etc/init

-> Zombies
UID PID PPID C STIME TTY TIME CMD
juser 4984 4983 0 Nov 25 pts/4 0:00 bash
juser 4986 4984 0 0:09
_ sind schon tot
_ verbrauchen darum keine Rechenzeit mehr
_ entstehen, wenn der Elternprozefl nicht Ñwartetì (wait)

-> Prozeßkontrolle + Signale
_ INT: Interrupt, ^C
_ QUIT: Abbruch, ^\
_ KILL, 9: Abbruch, nicht zu ignorieren
_ TERM: Default-Signal, geordnetes Beenden
_ STOP, CONT: Prozefl anhalten/fortsetzen
_ ILL, FPE, BUS, SEGV: Programmierfehler o.ä

_ kill: Signal schicken
_ kill [-signal] pid ...
_ Nur für den Eigentümer erfolgreich nutzbar
.
23.2.08 11:52
 


bisher 0 Kommentar(e)     TrackBack-URL

Name:
Email:
Website:
E-Mail bei weiteren Kommentaren
Informationen speichern (Cookie)



 Smileys einfügen



Verantwortlich für die Inhalte ist der Autor. Dein kostenloses Blog bei myblog.de! Datenschutzerklärung
Werbung