Aufgabe 2: Unterbrechungen
In der Vorlesung wurden mehrere Varianten zum Entkäfern des Betriebssystems vorgestellt. Dies wollen wir nach Möglichkeit natürlich auch in der Praxis in unserem StuBS umsetzen. In Qemu ist ein GDB Stub integriert, den wir ohne zusätzlichen Aufwand einfach verwenden können. Allerdings unterscheidet sich die emulierte Hardware von der echten – Letztere reagiert oft wesentlich empfindlicher.
Deshalb habt ihr auf unseren Testrechnern vermutlich schon das printf-Debugging angewandt, welches jedoch sehr Seiteneffekt-behaftet ist. Alternativ bieten sich Hardwaredebugger wie die Geräte von Lauterbach an, diese haben jedoch meist einen stolzen Preis, für uns im Übungsbetriebs sind sie somit leider nicht verfügbar.
Ein guter Mittelweg zwischen den beiden Varianten ist das Remotedebugging mit GDB. Neben dem Test PC auf dem ihr euer StuBS ausführt – dem Target – brauchen wir noch einen zweiten Rechner, den Host, welcher Zugriff auf Quelltexte und den aktuellen StuBS Kernel haben muss und zudem auch in der Lage sein sollte GDB auszuführen.
Beide Rechner müssen über ein Nullmodemkabel verbunden sein. Auf dem Host muss 'gdb' gestartet werden, während das Target bootet. Sobald in StuBS der GDB Stub bereit ist, kann der Host eine Verbindung herstellen und das Zielsystem den Bootvorgang fortsetzen lassen.
Wenn nun dort ein Fehler auftritt, dann wird eine Meldung an den GDB Host geschickt. Dieser zeigt ihn im Code an und erlaubt die typische Analyse des Fehlers – mit allen Vorzügen die GDB bietet.
Das Protokoll ist in StuBS bereits für euch implementiert. Damit nun bei einem Fehler der GDB Stub aktiv werden kann, kommt dieser mit einer eigenen Unterbrechungsbehandlung.
Dabei wird in der Initialisierung die Interrupt Deskriptortabelle entsprechend umgestellt, damit z. B. bei einem "Invalid Opcode" oder "General Protection Fault" die GDB Routine auch aufgerufen wird.
Alles, was euer StuBS braucht, ist somit die Implementierung der seriellen Schnittstelle. Aber die Umsetzung ist natürlich freiwillig. Und eine Hilfestellung wie man mit GDB effizient arbeitet, kommt in einem Zusatzseminar.