Schutzverletzung - LinkFang.de





Schutzverletzung


Bei Computern tritt eine Schutzverletzung (von englisch segmentation fault oder segmentation violation, kurz segfault) oder Zugriffsverletzung (engl. access violation) auf, wenn ein Computerprogramm auf eine Ressource (insbesondere auf Speicher) zuzugreifen versucht, die vor einem solchen Zugriff geschützt bzw. nicht erreichbar sein soll. Hierbei sendet der Betriebssystemkern ein Signal zum Prozess, der den Fehlgriff ausgelöst hat, was im Normalfall in dessen Beendigung resultiert. Der Speicherschutz moderner Betriebssysteme und die Memory Protection Units der Mikrocontroller sind Vorkehrungen für andere Prozesse und das Betriebssystem.

Nicht jeder fehlerhafte Speicherzugriff löst die Ausnahmebedingung Schutzverletzung aus. Ein und derselbe Programmfehler kann, abhängig vom allgemeinen Systemzustand und damit mehr oder weniger zufällig, einen Absturz wegen Schutzverletzung auslösen, zu arithmetisch falschen Rechenergebnissen oder anderen unerwünschten Systemverhalten führen oder auch ganz folgenlos bleiben.

Die englische Bezeichnung segmentation fault stammt aus einer Zeit, in der Speicherbereiche durch Segmentierung vor unerlaubtem Zugriff geschützt wurden. Heute werden andere Schutzmechanismen verwendet, insbesondere Paging; der Terminus segmentation fault hat sich aber unverändert erhalten. Der segmentation fault ist nicht zu verwechseln mit dem page fault (Seitenfehler), der lediglich das Programm so lange unterbricht, bis die fehlende Seite vom Sekundärspeicher in den Hauptspeicher geladen wurde.

Unter Unix löst segmentation violation die Ausnahmebedingung SIGSEGV (Ausnahme dezimal 11, hexadezimal B, 0x0B) aus.[1] Bei IA-32 bzw. x86-Prozessoren wird eine Speicherzugriffsverletzung als Allgemeine Schutzverletzung (Ausnahme dezimal 13, hexadezimal D, 0x0D) bezeichnet, die über einen Interrupt ausgelöst wird.[2]

Beispiele

Massenhaftes Auftreten von Schutzverletzungen deutet auf konzeptionelle Schwächen eines Betriebssystems, einer Programmiersprache oder eines Programms hin. Einem breiten Publikum in Erinnerung geblieben ist die Fehlermeldung „Allgemeine Schutzverletzung in“, gefolgt von einer Hexadezimal-Adresse (Blue Screen), mit der Programme unter frühen Microsoft-Windows-Versionen häufig abstürzten.

Ein Grund für gehäuftes Auftreten von Schutzverletzungen kann auch defekter Arbeitsspeicher oder andere defekte Hardware sein. Dabei werden durch Hardwarefehler unbeabsichtigte Adressen angesprochen (z. B. genügt es, ein einzelnes Bit einer Adresse zu wechseln). Auch Übertakten oder ein fehlerhaft programmierter Gerätetreiber kann solche Fehler auslösen, ohne dass dafür ein Defekt notwendig ist.

Beispiel eines C-Programmes, das so gut wie immer und auf jedem System eine Schutzverletzung auslöst:

int main(void)
{
    int *ptr = (int *) 0; // Zeiger auf die Speicheradresse 0
    *ptr = 0; // Schreibe 0 in die gespeicherte Adresse.
    // Dieser Speicherbereich gehört jedoch nicht zum Programm
    // und ist deshalb "geschützt" (daher Schutzverletzung).
    return 0;
}

Einzelnachweise

  1. Quelltext der UNIX-Header-Datei signal.h. Sourceware.org; abgerufen am 14. September 2010.
  2. Klaus Wüst: Mikroprozessortechnik: Grundlagen, Architekturen und Programmierung von Mikroprozessoren, Mikrocontrollern und Signalprozessoren. 3. Auflage, Vieweg+Teubner Verlag, Wiesbaden 2009, ISBN 978-3-8348-0461-7, S. 174–179.

Kategorien: Betriebssystemtheorie

Quelle: Wikipedia - http://de.wikipedia.org/wiki/Schutzverletzung (Vollständige Liste der Autoren des Textes [Versionsgeschichte])    Lizenz: CC-by-sa-3.0

Änderungen: Alle Bilder mit den meisten Bildunterschriften wurden entfernt. Ebenso alle zu nicht-existierenden Artikeln/Kategorien gehenden internen Wikipedia-Links (Bsp. Portal-Links, Redlinks, Bearbeiten-Links). Entfernung von Navigationsframes, Geo & Normdaten, Mediadateien, gesprochene Versionen, z.T. ID&Class-Namen, Style von Div-Containern, Metadaten, Vorlagen, wie lesenwerte Artikel. Ansonsten sind keine Inhaltsänderungen vorgenommen worden. Weiterhin kann es durch die maschinelle Bearbeitung des Inhalts zu Fehlern gerade in der Darstellung kommen. Darum würden wir jeden Besucher unserer Seite darum bitten uns diese Fehler über den Support mittels einer Nachricht mit Link zu melden. Vielen Dank!

Stand der Informationen: August 201& - Wichtiger Hinweis: Da die Inhalte maschinell von Wikipedia übernommen wurden, ist eine manuelle Überprüfung nicht möglich. Somit garantiert LinkFang.de nicht die Richtigkeit und Aktualität der übernommenen Inhalte. Sollten die Informationen mittlerweile fehlerhaft sein, bitten wir Sie darum uns per Support oder E-Mail zu kontaktieren. Wir werden uns dann innerhalb von spätestens 10 Tagen um Ihr Anliegen kümmern. Auch ohne Anliegen erfolgt mindestens alle drei Monate ein Update der gesamten Inhalte.