OOStuBS - Technische Informatik II (TI-II)  2.4
Aufgabe 2 - Interrupts

Inhaltsverzeichnis

Ziele

Aufgabe

Es soll eine einfache Interruptbehandlung für die Unterbrechungen durch Tastaturereignisse umgesetzt werden. Hierzu müssen die Klassen CPU (bereits implementiert), PIC, InterruptStorage, InterruptManager, Panic, Keyboard sowie die Funktion exception() implementiert oder erweitert werden. Um die entsprechenden Geräte überall in OOStuBS nutzen zu können, sollen von diesen Klassen die globale Objekte cpu, iManager und keyboard angelegt werden. Dies ist bereits geschehen.

dot_inline_dotgraph_2.png

Implementierung

Teil A Im ersten Schritt sollte die Klasse PIC

implementiert werden. Mit ihrer Hilfe und der Klasse CPU können Unterbrechungen von der Tastatur zugelassen werden (während des Boot-Vorgangs werden alle Unterbrechungen bei der CPU deaktiviert). Nach der Implementierung des PIC müsste automatisch bei jedem Betätigen einer Taste die Funktion exception aktiviert werden, da die Interruptdeskriptortabelle im Startup-Code entsprechend initialisiert wurde. Diese funktion wird initial den Text "unhandled interrupt xx ausgeben" damit kann die Impementierung von PIC leicht getestet werden (zumindestens einige Male).

Zu beachten
Da die Zeichen noch nicht vom Tastaturcontroller abgeholt werden, läuft der Tastaturpuffer irgendwann voll. Sobald dies geschehen ist, sendet der Tastaturcontroller keine Interrupts mehr. Deshalb kann es durchaus passieren, dass zunächst nur für ein oder zwei Tastendrücke Interrupts angezeigt werden.
Während der Bearbeitung einer Unterbrechung muss sich nicht um unerwünschte Interrupts gekümmert werden. Der Prozessor schaltet diese automatisch aus, wenn er mit der Behandlung beginnt und lässt sie erst wieder zu, wenn die Unterbrechungsbehandlung mit der Assembleranweisung iret beendet wird. Die vorhandene Implementierung führt dazu, dass dies quasi der letzten schließenden Klammer der exception() entspricht.
Achtung
Die Interruptverarbeitung kann natürlich nur funktionieren, wenn OOStuBS auch läuft. Sobald die kernel()-Funktion verlassen wird, ist das Verhalten beim Auftreten eines Interrupts undefiniert. Ein Betriebssystem sollte nicht plötzlich enden! ;-)

Teil B

Im zweiten Schritt soll eine Infrastruktur geschaffen werden, die die Behandlung von Unterbrechungen durch zugeordnete Gerätetreiberobjekte ermöglicht. Zur Verwaltung dieser Treiberobjekte dient dabei die Klasse InterruptStorage, die für jeden möglichen Interrupt einen Zeiger auf ein InterruptHandler - Objekt bereithält. Die abstrakte Klasse InterruptHandler beschreibt dazu die Schnittstelle aller Treiber, die Interrupts behandeln.

Zu beachten
Alle Zeiger der InterruptStorage sollen initial so gesetzt werden, dass sie auf ein in InterruptStorage enthaltenes Panic - Objekt verweisen.

Teil C

Im nächsten Schritt sollen Unterbrechungen, die von der Tastatur ausgelöst werden, abgefangen und interpretiert werden. Als Ergebnis soll nach jedem Tastendruck das entsprechende Zeichen an einer festen Position auf dem Bildschirm dargestellt werden. Zusätzlich soll die Tastenkombination Ctrl-Alt-Delete einen Reboot auslösen. Hierzu soll die Klasse Keyboard implementiert werden, die den eigentlichen Tastaturtreiber darstellt.

Teil D

Anschließend solltet ihr am oberen Bildschirmrand eine Laufzeile mit Sternen sehen und am unteren Bildschirmrand Tastatureingaben machen können. Allerdings werden nach kurzer Zeit merkwürdige Artefakte auftreten. Wo könnten diese her kommen? Was kann gegen sie unternommen werden?

Zu beachten
Die Artefakte sind Teil der Aufgabe und kein Fehler.

Hilfestellung