Infos Home | Impressum | Original Artikel & Autoren Liste


Computerabsturz

Ein Absturz bei einem Computer bezeichnet den Ausfall eines Programmes oder des gesamten Betriebssystems in Folge eines Programmierfehlers, einer Inkompatibilität oder (selten) eines Hardwarefehlers.

Die häufigste Form von Abstürzen ist der so genannte Buffer Overflow, bei dem eine Variable größer wird, als der im Programm für sie vorgesehene Platz. Eng damit verwandt sind Fehler durch nicht erfüllte Erwartungen an die Werte der Variablen, etwa bezüglich der Umwandelbarkeit in andere Datentypen oder Zerlegungsmöglichkeiten durch Trennzeichen. Ein anderer sehr häufig anzutreffender Fehlertyp ist die Allgemeine Schutzverletzung (engl. auch "General Protection Fault", in einigen Betriebssystemen auch "Segmentation Fault" genannt), ausgelößt wenn ein Programm versucht auf Speicher zuzugreifen der dem Programm nicht "gehört". Das ist meist darauf zurückzuführen, dass eine Pointer auf eine falsche Speicheradresse zeigt, häufig z.B. auf Null.

Eine weitere Form mit anderem Ablauf ist das so genannte "Aufhängen" eines Programms, bei dem das Programm scheinbar nicht weiterarbeitet. Das kann auf zwei Arten geschehen: das programm "Klemmt" (siehe Deadlock) und tut nichts. Oder das Programm läuft in einer Endlosschleife, weil eine Abbruchbedingung niemals erfüllt wird.

Eine sehr seltene Form von Abstürzen sind durch Defekte in der Hardware bedingt, in denen Daten so verändert werden, dass diese zu einem Absturz führen.

"Abstürze sind normal"

Aufgrund der Verbreitung von relativ häufig abstürzenden Computerprogrammen im Heimbereich, insbesondere die MS-DOS-basierenden Microsoft Windows-Versionen wie Microsoft Windows 95 oder Microsoft Windows 98, entstand in der Allgemeinheit der Eindruck, dass Abstürze unvermeidlich sind. Tatsächlich ist es aber auf vielen Ebenen möglich, solche Fehler zu einem grossen Teil zu vermeiden: durch das Betriebssystem, die verwendete Programmiersprache oder deren Compiler, durch die Laufzeitumgebung und vor allem durch die Umsicht des Programmierers. Hierfür gibt es einige hilfreiche Regeln, wie etwa die Umwandelbarkeit von Daten vor dem Versuch zu prüfen (und idealerweise frühzeitig sicherzustellen) und Variablen, die größer als der Buffer sind, nicht anzunehmen. Viele dieser Aufgaben lassen sich sogar automatisieren.

Allerdings ist es nicht möglich, Abstürtze völlig auszuschliessen, da sich das Verhalten eines Programmes nicht für alle möglichen Fälle vorhersagen lässt (dies gienge nur durch das "Durchprobieren" aller Fälle - und davon gibt es im Allgemeinen unendlich viele. Siehe Verifikation). Insbesondere ist das "Aufhängen" eines Programms nicht mit analytischen Methoden vorherzusagen (siehe Halteproblem). Es wäre aber durchaus möglich, Software sehr viel stabieler zu gestalten, als sie das heute zumeist ist. Das erfordert allerdings langwierige Tests und Analysen, die meist als zu teuer empfunden werden (bei kommerzieller Software geht es dabei um bezahlte Arbeitsstunden, bei Freier Software ist das Problem eher der persönliche Zeitaufwand, und die Tatsache, dass solche Tests nicht sehr aufregend sind). So wird häufig Software von fragwürdiger Qualität auf den Markt gebracht, was oft gut geht, gerade weil der Anwender gelernt hat, die Fehler als "normal" zu akzeptieren.
Der Ursprungsartikel stammt von der deutschsprachigen Wiki pedia (siehe oben: "Original Artikel & Autoren Liste").
Der Text steht unter der GNU Freie Dokumentation Lizenz.