Autor Thema: FPU sichern  (Gelesen 4585 mal)

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« am: 24. December 2005, 19:58 »
Hi,
wie funktioniert das Task-Switched Bit im CR0?
Wenn ich das richtig verstanden habe, setzte ich das TS-Bit bei jedem Taskswitch, wenn die FPU dann benutzt wird, löscht der Prozessor es, und löst eine Exception aus, wodurch ich dann die FPU-Register sichern kann. Oder muss ich das Bit selbst löschen, wenn die Exception ausgeführt wird?

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 25. December 2005, 11:08 »
Mit der FPU funktioniert das folgendermaßen:

Man geht ersteinmal davon aus, dass es viele Programme gibt, die die FPU nicht benutzen oder nicht immer benutzen. Wenn man z.B. 3 Programme am laufen hat, aber nur eines die FPU benutzt, wäre es CPU-Zeitverschwendung die FPU Register zu sichern.

Das Prinzip ist ganz einfach, sobalt ein Programm das erste mal nach einem Taskwechsel die FPU benutzt, wird die exception ausgelöst. Dann wird kontrolieren ob die FPU-Register noch mit inhalten des selben Taskes gefült sind, sollte das nicht der Fall sein, muss man die Register für den Task sichern, der die FPU zuletzt benutzt hat. Danach werden die FPU-Register mit den gespeicherten werten für den aktuellen Task geladen .

Exception:
if TaskID <> letzte_FPU_benutzung_TaskID then begin
 gespeicherte_FPU_Register [letzte_FPU_benutzung_TaskID] = FPU_Register
 FPU_Register = gespeicherte_FPU_Register [TaskID]
 letzte_FPU_benutzung_TaskID = TaskID
end
db 0x55AA

 

Einloggen