Friedrich-Alexander-Universität UnivisSuche FAU-Logo
Techn. Fakultńt Willkommen am Department Informatik FAU-Logo
Logo I4
Lehrstuhl für Informatik 4
Betriebssysteme
 
  Vorlesung
    - UnivIS-Infos
    - Inhalt
    - Folien
    - Videos
 
  Übungen
    - UnivIS-Infos
    - Inhalt
    - Module
    - Mailingliste
    - Ergänzendes Material
    - Terminübersicht
    - Aufgaben
       * Umgebung
       * Typische Fehler
       * Aufgabe 1
          Dokumentation
       * Aufgabe 2
          Dokumentation
       * Aufgabe 3
          Dokumentation
       * Aufgabe 4
          Dokumentation
       * Aufgabe 5
          Dokumentation
       * Aufgabe 6
          Dokumentation
       * Aufgabe 7
          Dokumentation
 
  Evaluation
Department Informatik  >  Informatik 4  >  Lehre  >  WS 2012/13  >  Betriebssysteme  >  Übungen  >  Aufgaben  >  Aufgabe 1
Aufgabe 1: Ausgabefunktionen und Tastaturansteuerung

Lernziele

  • Kennenlernen der Entwicklungsumgebung
  • Auffrischen der Programmiersprache C++
  • Hardwarenahe Programmierung (CGA-Bildschirm und Tastatur)

Allgemeine Bemerkungen

Grunds├Ątzlich gibt es zwei verschiedene Auspr├Ągungen von OOStuBS:

  • OOStuBS als Uniprozessorvariante
  • MPStuBS als Multiprozessorvariante

F├╝r beide Varianten gibt es getrennte Vorgaben, die sich jedoch nur an einigen wenigen Stellen unterscheiden. So ist es relativ einfach m├Âglich auch zu einem sp├Ąteren Zeitpunkt die Variante zu wechseln.

Aufgabenbeschreibung

F├╝r Testausgaben und zur Erleichterung der Fehlersuche soll das ├ťbungsbetriebssystem OOStuBS bzw. MPStuBS als erstes Ausgabefunktionen erhalten. Diese sollen ├Ąhnlich wie bei der C++-I/O-Streams-Bibliothek verwendet werden k├Ânnen und mit Hilfe der Klassen IO_Port, CGA_Screen, Stringbuffer, O_Stream und CGA_Stream implementiert werden. Dabei wird die Klasse IO_Port von uns vorgegeben.

Die Klasse CGA_Screen ist dabei die zentrale Abstraktion f├╝r die Darstellung von Zeichen auf dem Bildschirm. Sie soll ├╝ber den Konstruktor so parametrierbar sein, dass sie ihre Ausgaben auf einem einstellbaren rechteckigen Ausschnitt des Bildschrims ausgibt. Dadurch ist der Bildschirm aufteilbar und f├╝r die Ausgaben in den einzelnen Teilbereichen ist dann jeweils eine eigene Instanz verantwortlich. Dar├╝berhinaus soll man auf dieselbe Weise festlegen k├Ânnen, ob der Hardwarecursor verwendet soll oder nicht.

Damit diese Ausgabefunktionen ├╝berall in OOStuBS/MPStuBS nutzbar sind, sollen mehrere globale CGA_Stream-Objekte erzeugt werden:

  • F├╝r die Ausgaben der Anwendung soll ein globales Objekt kout dienen. Dieses sollte so eingestellt werden, dass es den Hardware-Cursor verwendet.
  • F├╝r Debugausgaben soll f├╝r jede CPU ein eigenes, globales Objekt dout_CPUx erstellt werden.

In der Datei object/debug.h ist das Macro DOUT definiert, ├╝ber das die Debugausgaben get├Ątigt werden sollen. Solange in einer ├ťbersetzungseinheit die Pr├Ąprozessorvariable DEBUG gesetzt ist, werden die Debugausgaben an das dout Objekt weitergeleitet. Ist DEBUG nicht gesetzt, so verschwinden die Debugausgaben und ├╝brig bleibt nur das, was die Anwendung direkt auf kout ausgibt. In der Version f├╝r MPStuBS wird zus├Ątzlich f├╝r jede CPU ein eigenes dout Objekt verwendet, so dass die Debugausgaben f├╝r jede CPU getrennt zu sehen sind.

S├Ąmtliche Instanzen der Klasse CGA_Stream sollen ihre Ausgaben in miteinander disjunkten Bereichen des Bildschirms ausgeben, um ├ťberlappungen bei der Ausgabe zu vermeiden.

Neben der Ausgabe von Text soll auch die Eingabe ├╝ber die Tastatur unterst├╝tzt werden. Dazu sollt ihr die Klasse Keyboard_Controller vervollst├Ąndigen, die neben Key in der Vorgabe enthalten ist.

dot_a1.png
Klassen├╝bersicht f├╝r Aufgabe 1

Die Funktionsf├Ąhigkeit der genannten Klassen soll mit Hilfe eines aussagef├Ąhigen Testprogramms gezeigt werden. Dazu soll im Hauptprogramm main() des "Betriebssystems" OOStuBS das Objekt kout f├╝r verschieden formatierte Ausgaben genutzt werden. F├╝r den Test der Tastatureingabe ist ein Keyboard_Controller-Objekt zu instanziieren. In einer Schleife sind dann Zeichen von der Tastatur abzufragen und mittels kout auszugeben.

F├╝r MPStuBS soll das Testprogramm ├Ąhnlich wie f├╝r OOStuBS aussehen. Dazu reicht des die Testapplikation nur auf dem Bootprozessor ablaufen zu lassen (K├Ânnte es Probleme geben, wenn mehrere Prozessoren diese Schleife parallel ausf├╝hren, und warum?). Die Applikationsprozessoren sollen nur Ausgaben mit Hilfe des Debugmacros t├Ątigen, um dessen Funktionsweise zu verifizieren.

Hinweis: In sp├Ąteren Aufgaben soll Anwendungs- und Testcode in der Klasse Application (aus der Vorgabe) und nicht in main() implementiert werden. Wer m├Âchte, kann dies nat├╝rlich auch bei Aufgabe 1 schon so handhaben.

Implementierungshinweise

Die Aufgabe besteht im Wesentlichen aus den zwei Teilen "Ausgaben" und "Eingaben", wobei der Test der "Eingaben" ohne "Ausgaben" nicht m├Âglich ist. Die Teilaufgabe "Ausgaben" kann zudem in drei voneinander unabh├Ąngige Teile gegliedert werden, die sehr gut einzeln gel├Âst und getestet werden k├Ânnen. Daher empfehlen wir folgende Bearbeitungsreihenfolge:

Ausgaben

Eingaben

Vorgabe

Die Einrichtung der Entwicklungsumgebung und eine Erkl├Ąrung, welche Vorgaben ihr jeweils ben├Âtigt, findet ihr hier

Hilfestellung

  Impressum Stand: 2012-11-29 11:40   BO, DL