Der Hintergrund dieser Dissertation beruht auf der Beobachtung, dass das Betriebssystem, welches die Grundlage für den Betrieb von Rechnersystemen darstellt, eine sehr komplexe Struktur aufweist, was häufig zu Fehlern im Betriebssystem führen kann. Wenn diese betriebssysteminternen Fehler Ausfälle von Diensten zur Folge haben, sind auch die im Rahmen des Betriebssystems laufenden Applikationen gefährdet. Auch wenn es im allgemeinen viele Fehlerquellen gibt, werden oft fehlerhafte Treiber als die häufigste Ursache angegeben. Um die Auswirkungen von Treiberdefekten auf der Betriebssystem- und Applikationsebene zu charakterisieren, wird in dieser Dissertation ein auf der Ausbreitung von Fehlern basierendes Framework für Robustheitsauswertung entwickelt. Das Framework wird sowohl konzeptionell entwickelt als auch auf einem echten Betriebssystem experimentell validiert. Das gewählte Betriebssystem, Windows CE .Net, ist repräsentativ für viele andere Betriebssysteme. Es ist modular aufgebaut, was die Anpassung der Betriebssystemkomponenten an verschiedene Bedürfnisse erheblich vereinfacht. Fehlerinjektion ist eine bedeutende Technik für die experimentelle Validierung, wobei Fehler simuliert werden indem man sie in das System injiziert und ihre Folgen beobachtet. Drei wichtige Aspekte, die hierbei berücksichtigt werden müssen, sind: Welche Fehler sollen wo und wann injiziert werden. In dieser Dissertation wird gezeigt, dass Fehlerinjektion in die Schnittstelle zwischen dem Betriebssystem und den Treibern eine effektive Vorgehensweise darstellt, die Folgen von Treiberfehlern abzuschätzen. Um die Robustheit eines Betriebssystems zu quantifizieren, werden eine Reihe von Fehlerausbreitungsmetriken definiert, die speziell auf Treiberfehler zugeschnitten sind. Anhand dieser Metriken können Dienste und Treiber hinsichtlich Empfindlichkeit und Ausbreitungsvermögen verglichen werden. Diese Dissertation vergleicht drei Fehlermodelle in Bezug auf ihre Tauglichkeit zur Robustheitsbewertung. Das klassische Bit-Flip-Modell ermittelt am häufigsten schwere Ausfälle im System. Mehr als die beiden anderen Modelle, Data Type und Fuzzing, ermittelt dieses Modell auch die meisten Dienste, die zu Ausfällen führen könnten. Der grösste Nachteil dieses Modells ist allerdings, dass es sehr viele Injektionen erfordert. Fuzzing ermittelt weniger Dienste, dafür aber neue fehlerhafte, von Bit-Flip nicht erkannte Dienste. Eine sorgfältige Untersuchung der Ergebnisse des Bit-Flip-Modells zeigt, dass schon eine Teilmenge der Bits ausreichend ist, um neue Dienste, die zu Robustheitsausfällen führen, zu ermitteln. Daraufhin wird ein neues, zusammengesetztes Modell vorgeschlagen, das die guten Eigenschaften des Bit-Flip-Modells und das Vermögen des Fuzzing-Modells neue Dienste zu identifizieren miteinander kombiniert. Das neue Modell verliert keine wichtige Information, und erfordert insgesamt deutlich weniger Injektionen. Um die Frage zu beantworten wann es sinnvoll ist Fehler zu injizieren, wird ein neues, an das Benutzerprofil des Treibers angelehntes Timingmodell vorgeschlagen. Das neue Modell basiert auf der Ausführung von Befehlen in einer höheren Schicht. Bestimmte Fehlerinjektionen werden zum Zeitpunkt der Ausführung bestimmter Befehle getätigt. Die Ergebnisse der Fehlerinjektionen zeigen, dass ein Vielfaches an störungsanfälligen Diensten gefunden werden kann. Auflerdem gibt das Benutzerprofil des Treibers im Voraus Aufschluss über die Effektivität der neuen Methode. | German |