Exception

Aus Lowlevel

Wechseln zu: Navigation, Suche
Diese Seite ist ein Artikel, welcher mehr haben könnte..

Wenn du mehr darüber weißt oder recherchieren willst, bist du aufgerufen, dies zu tun. Wenn du dir in einer Sache nicht sicher bist, dann stell es auf die Diskussionsseite.

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. Das kann passieren, wenn man beispielsweise eine Zahl durch 0 dividieren will.

Auf der x86-Architektur löst eine Exception, die nicht abgefangen wird, zunächst einen Double Fault aus, der selbst wieder eine Exception ist. Wird auch der Double Fault nicht abgefangen, führt dies zum Triple Fault und ein CPU-Reset wird durchgeführt.

Inhaltsverzeichnis

Abfangen von Exceptions

Wird noch editiert.

Planmäßiger Einsatz von Exceptions

Exceptions können vom Kernel auch dazu benutzt werden, bestimmte Aktionen eines Userspace-Programms abzufangen und darauf zu reagieren. Die Exception stellt in diesem Sinn keinen echten Fehler dar, sondern der Kernel führt nötige Aktionen durch und lässt das Programm anschließend weiterlaufen.

Das typische Beispiel für solche Exceptions ist der Page Fault. Wenn bei aktiviertem Paging eine Speicherseite nicht zugegriffen werden kann, kann das beispielsweise daran liegen, dass diese Seite auf die Festplatte ausgelagert worden ist. In diesem Fall lädt der Kernel die Seite wieder in den Speicher und springt zurück in das Programm.

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.

Liste der Exceptions

Vektor Bezeichnung
0x00 #DE - Divide by Zero
0x01 #DB - Debug
0x02 NMI
0x03 #BP - Break Point
0x04 #OF - Over Flow
0x05 #BR - Bound Range
0x06 #UD - Invalid Opcode
0x07 #NM - Device Not Available
0x08 #DF - Double Fault
0x09 Coprocessor Segment Overrun
0x0a #TS - Invalid TSS
0x0b #NP - Segment not Present
0x0c #SS - Stack
0x0d #GP - General Protection
0x0e #PF - Page Fault
0x0f Reserviert
0x10 #MF - x87 Floating Point
0x11 #AC - Alignment Check
0x12 #MC - Machine Check
0x13 #XF - SIMD Floating Point
0x14-0x1f Reserviert

Weblinks

http://www.logix.cz/michal/doc/i386/chp09-08.htm

Persönliche Werkzeuge