Hardware-Multitasking — Änderungen 6835 → 6836

Zeile 5: Zeile 5:
 
=== Das Task State Segment ===
 
=== Das Task State Segment ===
  
−
Das Hardware Multitasking beruht auf dem sogenannten Task State Segment, welches jedem Task  zugeordnet wird und unter anderem dessen Registerwerte speichert. Der Aufbau des TSS wird hier exakt beschrieben. Vereinfacht sieht er so aus:
+
Das Hardware Multitasking beruht auf dem sogenannten Task State Segment, welches jedem Task  zugeordnet wird und unter anderem dessen Registerwerte speichert. Der Aufbau des TSS wird [[TSS|hier exakt]] beschrieben. Vereinfacht sieht er so aus:
  
 
[[Datei:Tss.jpg]]
 
[[Datei:Tss.jpg]]
  
−
Die dynamischen Felder werden von der CPU automaitsch beim TaskWechsel mit den entsprechenden Registerwerten des laufenden Tasks gefüllt. Die statischen Felder werden mit Anfangswerten belegt und später nicht mehr verändert. Meiner Meinung nach nicht so entsprechend sind die unwichtigen Felder. (alle Felder haben DWORD Größe)
+
Die dynamischen Felder werden von der CPU automaitsch beim TaskWechsel mit den entsprechenden Registerwerten des laufenden Tasks gefüllt. Die statischen Felder werden mit Anfangswerten belegt und später nicht mehr verändert. Meiner Meinung nach nicht so entscheidenden Felder sind die als unwichtig markierten. (alle Felder haben DWORD Größe)
 
Der Speicherort des TSS wird als Eintrag in der GDT gespeichert. Der Selektor dieses Eintrags wird im Task Register der CPU gespeichert, wodurch die diese bei einem Taskwechsel weiß, wo sie die (dynamischen) Registerwerte speichern soll, damit diese beim Wiederaufruf des Tasks unverändert sind. Folgender Code legt ein TSS an, und erzeugt dann den Descriptor in der GDT an, der darauf zeigt.
 
Der Speicherort des TSS wird als Eintrag in der GDT gespeichert. Der Selektor dieses Eintrags wird im Task Register der CPU gespeichert, wodurch die diese bei einem Taskwechsel weiß, wo sie die (dynamischen) Registerwerte speichern soll, damit diese beim Wiederaufruf des Tasks unverändert sind. Folgender Code legt ein TSS an, und erzeugt dann den Descriptor in der GDT an, der darauf zeigt.
  
Zeile 62: Zeile 62:
 
== Implementierung ==
 
== Implementierung ==
  
−
Schritt 1: Task State Segmente anlegen
+
=== Schritt 1: Task State Segmente anlegen ===
  
 
Jeder spätere Task benötigt ein TSS. Diese müssen mit den Werten gefüllt werden, die der Task zu Beginn seiner Ausführung in den Registern stehen haben soll:
 
Jeder spätere Task benötigt ein TSS. Diese müssen mit den Werten gefüllt werden, die der Task zu Beginn seiner Ausführung in den Registern stehen haben soll:
Zeile 192: Zeile 192:
 
</c>
 
</c>
  
−
Beim nächsten Tick wird dann der scheduler aufgerufen und verrichtet seine Arbeit.
+
Beim nächsten Tick wird dann der Scheduler aufgerufen und verrichtet seine Arbeit.
  
 
== Tipps und Tricks ==
 
== Tipps und Tricks ==