2017-01-30 3 views
0

Ich entwickle einen einfachen Kernel für mein kommendes Betriebssystem. Ich habe alles bis zum Scheduler entwickelt. Ich frage mich, wie der Scheduler in seinen Zyklus kommt.Wie kehrt der OS-Scheduler zurück?

Zum Beispiel

  1. der Timer-Interrupt ausgelöst.
  2. Der Handler ruft den Scheduler auf.
  3. Der Scheduler springt den nächsten Prozess in der Warteschlange.
  4. Der Interrupt muss zurückkehren (IRETD)

Aber wenn der Scheduler muss den nächsten Prozess dann springen, wenn die Interrupt-Rückkehr tut. Und wenn es so wäre, würde es nicht zum letzten Prozess zurückkehren.

Ich möchte diese Klarstellung - Wie kommt der Timer-Interrupt zurück zum Scheduler und wie kommuniziert der Scheduler mit Timer-Interrupt (wenn mit Funktionsaufruf, wann kommt er zurück)?

Angenommen - Monolithic Kernel

+0

Ich hebt geschoben Ich bin nicht vertraut mit den Besonderheiten der IRETD-Anweisungen, aber ich nehme an, es muss den Befehlszeiger und andere Register von einem Stapel aufspringen, um fortzufahren. Die Art, wie ich es sehe, müssen Sie die Werte in diesem Stapel ändern, so dass, wenn IRETD erscheint, was es braucht, es den neuen Prozess statt des unterbrochenen Prozesses effektiv wieder aufnimmt. Ich kann Ihnen keine Details geben, ohne diesen Teil der x86-Anweisung selbst zu studieren. Meine Erfahrung kommt hauptsächlich von meinem Hobbyprojekt (https://bitbucket.org/ruifig/g4devkit), das lose auf ARM basiert. – RuiFig

Antwort

0

Wenn ein Interrupt auftritt, schaltet der Prozessor seinen Kontext. Dazu wird ein Flag im EFLAGS-Register aktualisiert und einige Informationen auf dem Stack gepusht (kann in Intel-Handbüchern gesehen werden). Wenn der Interrupt im Benutzermodus auftritt, tritt auch ein Stack-Switch gemäß dem TSS der aktuellen Task auf.

Der Scheduler Vorgang wird als getan -

  1. von Benutzer-Prozess kam mit Interrupt-Zustand auf Stapel
  2. nächster Prozess
  3. IRETD auf Unterbrechungszustand neuen Prozesses