SUCHE MIT Google
Web virtualuniversity.ch
HOME DIDAKTIK ECDL ELEKTRONIK GUIDES HR MANAGEMENT MATHEMATIK SOFTWARE TELEKOM
DIENSTE
Anmeldung
Newsletter abonnieren
Sag's einem Freund!
VirtualUniversity als Startseite
Zu den Favoriten hinzufügen
Feedback Formular
e-Learning für Lehrer
Spenden
Autoren login
KURSE SUCHEN
Kurse veröffentlichen

Suche nach Datum:

Suche mit Schlüsselwort:

Suche nach Land:

Suche nach Kategorie:
PARTNER
ausbildung24.ch - Ausbildungsportal, Seminare, Kursen... 

 
HTMLopen.de - Alles was ein Webmaster braucht

 
PCopen.de - PC LAN Netze und Netzwerke - alles was ein IT Profi und Systemtechnicker braucht

GUIDES UND TUTORIAL

fork(), exec() und wait()

Diese Systemaufrufe haben mit der Generierung von Kindprozessen zu tun und erlauben die Synchronisation zwischen Eltern- und Kindprozessen.An dieser Stelle wird nur soweit darauf eingegangen, wie es zum Verständnisder folgenden Abschnitte nötig ist.

fork() erzeugt einen Kindprozeß,der ein vollständiges Abbild des Elternprozesses ist und der beimgleichen Stand des Befehlszählers fortgesetzt wird. Eltern- und Kindprozeßwird jedoch die Möglichkeit geboten, festzustellen, ob es sich umEltern- oder Kindprozeß handelt: Der Kindprozeß bekommt alsRückgabewert 0, der Elternprozeß die PID des Kindprozesses. Durch bedingte Verzweigung nach dem Schema (".. if Elternprozeß then ... else ...") können beide Prozesse dann unterschiedlich weiterarbeiten.

  • Etliche Systemprozesse schließen stdin, stdout und stderr, treten also in den Hintergrund. Solche Prozesse nennt man 'demon' (Daemonprozesse).
  • Terminiert der Elternprozeß vor dem Kindprozeß, wird dieser zum 'Waisenkind'. Normalerweise wird er dann vom Init-Prozeß 'adoptiert'.
  • Hat der Kindprozeß dann auch noch den Kontakt zum Terminal (Standardausgabe und -eingabe) wird er zum 'Zombie'.

Einzelschritte beim Aufruf von fork():

  1. Prozeßtabelle überprüfen (Platz frei?)
  2. Speicher für Kindp. allokieren
  3. Elternprozeß-Speicher --> Kindprozeß-Speicher kopieren
  4. Prozeßtabelleneintrag es Elternprozesses aktualisieren
  5. PID für Kindp. wählen, Kindp. in Prozeßtabelle eintragen
  6. Kernel und Dateisystem über Kindprozeß informieren
  7. Fertigmeldung an Eltern- und Kindprozeß senden

wait() ermöglicht dem Elternprozeß das Warten auf die Beendigung des/der Kindprozess(e). Der Elternprozeß wird verdrängt und erst durch das Ende eines Kindprozesses wieder "aufgeweckt". Zur Unterscheidung mehrerer Kindprozesse liefert die Funktion wait() die PID des "gestorbenen" Kindprozesses zurück.

Gibt es keinen Kindprozeß, ist das Ergebnis -1. Beheben des Waisenkind/Zombie-Problems:

  • 1. Elternprozeß ruft wait() zu spät auf:

    Beim Wait-Aufruf wird zuerst die Prozeßtabelle nach terminierten Kindprozessen durchsucht und diese dann gelöscht.

  • 2. Elternprozeß ist terminiert:

    Beim Terminieren des Elternprozesses werden dessen Kindprozesse zu Kindprozessen des Systemprozesses Init.

Bei exec() wird der ursprüngliche Prozeß durch einen neuen Prozeß ersetzt (eine Rückkehr zum aufrufenden Prozeß ist daher logischerweise nicht möglich). exec() ist der komplizierteste Aufruf, da der komplette Prozeßadreßraum ersetzt werden muß. Dieser Aufruf ist auch als Kommando verfügbar (exec [Programmname]). Der Ablauf im Schema:

  1. Zugriffsrechte prüfen (Datei ausführbar?)
  2. Größe der Speichersegmente feststellen
  3. Aufrufparameter und Umgebung des Aufrufers festhalten
  4. Speicher des Aufrufers freigeben, neuen Speicher allokieren
  5. Neues Programm in den Speicher laden
  6. UID-, GID-Bits bearbeiten
  7. Prozeßtabelle aktualisieren
  8. Bereitmeldung an den Kernel senden

    Schließlich gibt es noch eine Systemfunktion, welche die zeitweise Blockierung eines Prozesses erzwingt: Mit sleep() kann ein Prozeß für eine definierte Zeit "eingeschläfert" werden. Nach Ablauf der vorgegebenen Zeit, wird der Prozeß wieder auf "bereit" gesetzt und kann weiterlaufen. Auch sleep() ist als Kommando verfügbar (sleep [Zeit in Sekunden]).

DIPLOMARBEITEN UND BÜCHER

Diplomarbeiten zum Runterladen:

Suche im Katalog:
Architektur / Raumplanung
Betriebswirtschaft - Funktional
Erziehungswissenschaften
Geowissenschaften
Geschichtswissenschaften
Informatik
Kulturwissenschaften
Medien- und Kommunikationswissenschaften
Medizin
Psychologie
Physik
Rechtswissenschaft
Soziale Arbeit
Sozialwissenschaften


JOBS
HOME | E-LEARNING | SITEMAP | LOGIN AUTOREN | SUPPORT | FAQ | KONTAKT | IMPRESSUM
Virtual University in: Italiano - Français - English - Español
VirtualUniversity, WEB-SET Interactive GmbH, www.web-set.com, 6301 Zug

Partner:   Seminare7.de - PCopen.de - HTMLopen.de - WEB-SET.com - YesMMS.com - Ausbildung24.ch - Manager24.ch - Job und Karriere