Exception — Änderungen 9213 → 9294

Zeile 1: Zeile 1:
−
{{Stub}}
+
{{TODO|
 +
*Einige Exceptions ausführlicher beschreiben
 +
*Verlinkungen von der Tabelle zu den Beschreibungen
 +
*Mehr praktische Hinweise
 +
*Rechtschreibung korrigieren}}
  
 
Als Exception (engl. Ausnahme) bezeichnet man einen Fehler, der während des Ausführens eines Programmes auftritt. Es entsteht also eine Ausnahmesituation, in der die Programmausführung nicht wie geplant fortgesetzt werden kann. Eine der bekanntesten Exception ist die 'Divide by Zero'-Exception, die auftritt, wenn man versucht durch Null zu teilen.
 
Als Exception (engl. Ausnahme) bezeichnet man einen Fehler, der während des Ausführens eines Programmes auftritt. Es entsteht also eine Ausnahmesituation, in der die Programmausführung nicht wie geplant fortgesetzt werden kann. Eine der bekanntesten Exception ist die 'Divide by Zero'-Exception, die auftritt, wenn man versucht durch Null zu teilen.
Zeile 86: Zeile 90:
 
Wird ausgelöst, wenn ein FPU-Instruktion ausgeführt werden soll, obwohl an den Computer keine FPU angeschlossen ist. Dieser Fehler ist bei neueren Computern eher nicht mehr relevant.
 
Wird ausgelöst, wenn ein FPU-Instruktion ausgeführt werden soll, obwohl an den Computer keine FPU angeschlossen ist. Dieser Fehler ist bei neueren Computern eher nicht mehr relevant.
  
−
//TODO: die restlichen Exceptions beschreiben
+
=== Double Fault ===
−
//TODO: Exceptions mit der Tabelle oben verlinken
+
Wenn eine Exception eintritt während die CPU versucht, den Handler für eine andere Exception aufzurufen, dann bezeichnet man dies als Double Fault. Dieser ist im Grunde der letzte Schritt vorm Triple Fault (Systemabsturtz) und kann nicht in irgendeiner Art behoben werden.
 +
 
 +
=== Coprocessor Segment Overrun ===
 +
???
 +
 
 +
=== Invalid TSS ===
 +
Die Exception wird ausgelöst, wenn die CPU beim Taskswitch auf ein ungültiges TSS trifft. Sie übergibt auf dem Stack einen Errorcode:
 +
{| {{prettytable}}
 +
!Bits || Bedeutung
 +
|-
 +
|0 || Gesetzt: Die Exception hat ihren Ursprung außerhalb der CPU
 +
|-
 +
|1,2 || 0: GDT, 1 und 3: IDT, 2: LDT
 +
|-
 +
|3-15|| Index in der GDT, IDT oder LDT,  je nach Wert von Bit 1 und 2
 +
|-
 +
|16-31 || reserviert
 +
|}
 +
 
 +
=== Segment not Present ===
 +
Diese Exception wird ausgelöst, wenn die CPU ein Segmentregister (DS, ES, FS, GS, CS) mit einem ungültigen Wert füllt. Ungültige Werte meint hierbei einen Deskriptor, der als nicht aktiv oder in irgendeiner anderen Form ungültig ist. Beim Laden des SS Register tritt ein Stack Fault auf.
 +
 
 +
=== Stack Fault ===
 +
Der Stack Fault tritt auf, wenn der Stack seine maximale Größe erreicht hat oder das SS-Register mit einem ungültigen Wert geladen wird.
 +
 
 +
=== General Protection ===
 +
''Hauptartikel: [[General Protection Fault''
 +
Der General Protection Fault tritt bei jeder Art von Rechteverletzung auf, die nicht von einer anderen Exception abgefangen wird.
  
 
=== Page Fault ===
 
=== Page Fault ===
Zeile 119: Zeile 150:
  
 
Eine weitere Anwendungsmöglichkeit ist Copy on Write. Es kommt zum Einsatz, wenn ganze Pages kopiert werden - z.B. bei unixoiden Systemen bei fork(), dem Klonen von Prozessen. Dabei werden alle zu kopierenden Seiten zunächst nicht wirklich kopiert, sondern sowohl im alten als auch neuen Prozess als schreibgeschützt markiert. Erst bei Bedarf, also wenn sich die Originalpage und Kopie zum ersten Mal unterscheiden, wird wirklich kopiert: Beim ersten Schreibzugriff auf eine solche Seite wird ein Page Fault abgefangen (der ausgelöst wird, weil der Bereich schreibgeschützt ist) und eine zweite Page für die Kopie alloziert.
 
Eine weitere Anwendungsmöglichkeit ist Copy on Write. Es kommt zum Einsatz, wenn ganze Pages kopiert werden - z.B. bei unixoiden Systemen bei fork(), dem Klonen von Prozessen. Dabei werden alle zu kopierenden Seiten zunächst nicht wirklich kopiert, sondern sowohl im alten als auch neuen Prozess als schreibgeschützt markiert. Erst bei Bedarf, also wenn sich die Originalpage und Kopie zum ersten Mal unterscheiden, wird wirklich kopiert: Beim ersten Schreibzugriff auf eine solche Seite wird ein Page Fault abgefangen (der ausgelöst wird, weil der Bereich schreibgeschützt ist) und eine zweite Page für die Kopie alloziert.
 +
 +
=== x87 Floating Point ===
 +
???
 +
 +
=== Alignment Check ===
 +
Wenn auf nicht ausgerichtete Daten zugegriffen wird und daa AM Bit in CR0 sowie das AC in den EFLAGS sind gesetzt, dann wird diese Exception ausgelöst. In der Regel trifft man nicht auf diese Exception, weil Alignment Checks standartmäßig ausgeschaltet sind.
 +
 +
=== Machine Check ===
 +
???
  
 
== Weblinks ==
 
== Weblinks ==
 
http://www.logix.cz/michal/doc/i386/chp09-08.htm (Englisch)
 
http://www.logix.cz/michal/doc/i386/chp09-08.htm (Englisch)
 
[[Kategorie:Glossar]]
 
[[Kategorie:Glossar]]