Friedrich-Alexander-Universität Erlangen-Nürnberg  /   Technische Fakultät  /   Department Informatik

Übungen zu BST (SS 2015)

Implementierung einer Abstraktion fuer den Prozessor. Mehr ...

#include <cpu.h>

Öffentliche, statische Methoden

static void enable_int ()
 Erlauben von (Hardware-)Interrupts.
static bool disable_int ()
 Interrupts werden ignoriert/verboten.
static void restore_int (bool val)
 Unterbrechungszustand wiederherstellen.
static void idle ()
 Prozessor bis zum nächsten Interrupt anhalten.
static void die ()
 Prozessor dauerhaft anhalten.
static void halt ()
 Prozessor anhalten.

Ausführliche Beschreibung

Implementierung einer Abstraktion fuer den Prozessor.

Derzeit wird angeboten: Interrupts zuzulassen, zu verbieten, den Prozessor in den Haltmodus zu schicken oder ganz anzuhalten.

Dokumentation der Elementfunktionen

static void CPU::die ( )
inlinestatic

Prozessor dauerhaft anhalten.

Hält den Prozessor an. Intern werden dazu die Interrupts mit cli gesperrt und anschließend der Prozessor mit hlt angehalten. Da der Haltezustand nur durch einen Interrupt verlassen werden könnte, ist somit garantiert, dass die CPU bis zum nächsten Kaltstart "steht". Das Programm kehrt aus die() nie zurück. In einer Multiprozessorumgebung hat die Ausführung der Funktion nur Auswirkungen auf die CPU, die ihn ausführt. Die anderen CPUs laufen weiter.

static bool CPU::disable_int ( )
inlinestatic

Interrupts werden ignoriert/verboten.

Verhindert eine Reaktion auf Unterbrechungen, indem die Assembleranweisung cli ausgeführt wird. Der Rückgabewert gibt an ob Unterbrechungen schon gesperrt waren.

Rückgabe
true wenn die Unterbrechungen zum Zeitpunkt des aufrufs frei waren, false wenn sie schon gesperrt waren.
static void CPU::enable_int ( )
inlinestatic

Erlauben von (Hardware-)Interrupts.

Lässt die Unterbrechungsbehandlung zu, indem die Assembleranweisung sti ausgeführt wird.

static void CPU::halt ( )
inlinestatic

Prozessor anhalten.

Hält den Prozessor an. Intern wird dazu die hlt Instruktion ausgeführt. In diesem Zustand verbraucht der Prozessor sehr wenig Strom. Nur ein Interrupt kann den Prozessor aufwecken.

static void CPU::idle ( )
inlinestatic

Prozessor bis zum nächsten Interrupt anhalten.

Versetzt den Prozessor in den Haltezustand, aus dem er nur durch einen Interrupt wieder erwacht. Intern werden dazu die Interrupts mit sti freigegeben und der Prozessor mit hlt angehalten. Intel garantiert, dass die Befehlsfolge sti hlt atomar ausgeführt wird.

static void CPU::restore_int ( bool  val)
inlinestatic

Unterbrechungszustand wiederherstellen.

Zusammen mit dem Rückgabewert von CPU::disable_int() kann diese Funktion verwendet werden, um das Sperren und freigeben von Unterbrechungen zu schachteln.

Parameter
valGibt an ob Unterbrechungen wieder freigegeben werden sollen oder nicht.

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Datei: