Friedrich-Alexander-Universität UnivisSuche FAU-Logo
Techn. Fakultšt Willkommen am Department Informatik FAU-Logo
Logo I4
Lehrstuhl für Informatik 4
Betriebssysteme
 
  Vorlesung
    - UnivIS-Infos
    - Inhalt
    - Folien
 
  Übungen
    - UnivIS-Infos
    - Inhalt
    - Ergänzendes Material
    - Terminübersicht
    - Aufgaben
       * Umgebung
       * Typische Fehler
       * A 1
       * A 2
       * A 3
       * A 4
       * A 5
       * A 6
       * A 7
 
  Evaluation
Department Informatik  >  Informatik 4  >  Lehre  >  WS 2007/08  >  Betriebssysteme  >  Übungen  >  Aufgaben  >  Aufgabe 6  >  Funktion kickoff

Funktion kickoff

Einordnung in die Gesamtstruktur

Modul
thread
Erstellungszeitpunkt
Aufgabe 4
verändert in
Aufgabe 5
Dateien
kickoff.cc

Beschreibung

Für die allererste Aktivierung einer Coroutine muss eine "Rücksprungadresse" zu einer Funktion bekannt sein, von der aus dann der Übergang von der C zur C++ Ebene erfolgen kann. Diese Funktion soll kickoff sein.

Aktivierung von kickoff

Bei der Initialisierung einer Coroutine mit Hilfe der Funktion toc_settle() wird nicht nur die Struktur toc für den ersten Koroutinenwechsel vorbereitet, sondern auch die Adresse der Funktion kickoff als Rücksprungadresse auf den Stack gelegt. Bei dem ersten Koroutinenwechsel mit toc_switch wird daher an den Anfang von kickoff "zurück"gesprungen, womit die Ausführung beginnt.

Aufgabenbeschreibung

void kickoff (Coroutine* object)
Die wesentlichste Funktion von kickoff besteht natürlich weiterhin darin, den Sprung von der C Ebene zur C++ Ebene zu vollführen, indem sie die action() Methode des als Parameter vorgefundenen Koroutinen Objekts aufzuruft.

Darüberhinaus ermöglicht es kickoff, für alle Koroutinenobjekte die gleiche Initialisierung vorzunehmen. Zum Beispiel werden Kontextwechsel stets aus einem kritischen Abschnitt heraus ausgelöst. Daher muss die erste Aktion der neuen Koroutine darin bestehen, den kritischen Abschnitt wieder freizugeben.

Hinweis

Da diese Funktion nicht wirklich aufgerufen, sondern nur durch eine geschickte Initialisierung des Stacks der Koroutine angesprungen wird, darf sie nie terminieren. Anderenfalls würde ein sinnloser Wert als Rücksprungadresse interpretiert werden und der Rechner abstürzen.
  Impressum Stand: 2007-11-27 09:50   AG, WH