Autor Thema: OS-Dev für Einsteiger - Multitasking  (Gelesen 3044 mal)

eike

  • Beiträge: 2
    • Profil anzeigen
Gespeichert
« am: 27. March 2010, 14:15 »
Hallo,

die Tutorialreihe "OS-Dev für Einsteiger" finde ich recht verständlich gemacht. Nur beim 6. Teil Multitasking habe ich eine kleine Frage.
Um den Zustand eines Prozesses zu sichern, werden ganze 4k Byte Speicher reserviert und nicht nur sizeof(struct cpu_state)?
Reserviere ich aber nur sizeof(struct cpu_state) Bytes, so bekomme ich nach dem 3. Aufrufen der Schedulerfunktion (also zu dem Zeitpunkt, an der der erste Prozess wieder Rechenzeit bekommt) eine Exception.
Liege ich vielleicht falsch in der Annahme, das der reservierte Speicher nicht nur für den Zustand des Prozesses ist?

Eike

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 27. March 2010, 14:22 »
Ja, der Speicher ist nicht nur für den Prozesszustand da. Der Speicher wird als Kernelstack benutzt. Wenn ein Prozess unterbrochen wird, kommt auf diesen Stack als erstes der Prozessorzustand (in intr_common_handler), aber die anschließend aufgerufenen Funktionen (also handle_interrupt und alle davon aufgerufenen anderen Funktionen) brauchen natürlich auch noch ein bisschen Platz auf dem Stack, um arbeiten zu können.

Beim Anlegen eines neuen Tasks wird erstmal nur der Prozessorzustand auf den Stack gelegt, weil auf diesen Stack ja erst in intr_common_handler nach dem call gewechselt wird - und dort wird dann genau der Prozessorzustand zum Wiederherstellen erwartet.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

eike

  • Beiträge: 2
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 27. March 2010, 14:26 »
Danke, jetzt habe ich es verstanden.

Da hätte ich eigentlich auch selbst drauf kommen können.

 

Einloggen