Ausfälle vermeiden, Störungen tolerieren

Teil 1: Ansätze für zuverlässiges Design: Fehlervermeidung

Angesichts der Einführung bzw. Ankündigung von „Sicherheits“-Mikrocontroller durch Texas Instruments, Freescale und Infi neon, präsentieren wir in dieser Ausgabe den ersten Teil in einer Serie zu Theorie und Praxis von zuverlässigkeit und Redundanz in sicherheitskritischen Systemen.

Im letzten Viertel des 20. Jahrhunderts wurde das Wort „Computer“ fast zu einem Synonym für Unzuverlässigkeit. Wann immer ein System ausfi el, war es der Computer, dem die Schuld dafür zugeschoben wurde. In den meisten Fällen war dies natürlich nicht gerechtfertigt, aber es stellte eine bequeme Methode zum Verdecken von Fehlern dar, die entweder dem Programmierer oder dem Bediener unterlaufen waren. Der Computer wurde zum Sündenbock für unser eigenes Versagen und dies war allgemein akzeptabel, solange die so genannten „Computerfehler“ nicht zu Verletzungen oder gar Todesfällen führten. Die Technologie entwickelte sich jedoch weiter und Computer hielten in Autos und Flugzeugen Einzug, wo sie zunächst nicht-sicherheitskritische Funktionen wie z. B. Scheibenwischer oder die Navigation kontrollierten. Alles dies änderte sich mit der Einführung computergesteuerter Flugsteuerungssysteme – zuerst für Militärfl ugzeuge und dann auch im Zivilbereich, wie z. B. für den Airbus A320. Heutzutage sind sogar Autos mit Mikrocontrollern vollgepackt und sie sind dabei auch für sicherheitskritische Funktionen wie ABS und Airbags verantwortlich. Vor kurzem hat Google demonstriert, dass fahrerlose Autos praktisch möglich sind.

Aber was bedeutet dies für die Einstellung der Öffentlichkeit gegenüber Computerfehlern? Glücklicherweise erkannten Flugzeug- und Kraftfahrzeughersteller sehr schnell, dass ein Flugzeugunglück oder ein schwerer Autobahnunfall mit Dutzenden von Toten und Verletzten nicht einfach als „ein Computerfehler“ abgetan werden konnte. Im Laufe der letzten fünfzig Jahre hat sich viel Forschungsaufwand darauf gerichtet, Computer „unfehlbar“ zu machen. Dabei wurden grob gesagt zwei Ziele verfolgt: erstens die Vermeidung von Fehlern und zweitens (mit zunehmender Maschinenintelligenz) die Toleranz gegenüber Fehlern. Als Konzept wird „Computerzuverlässigkeit“ fast so viele Defi nitionen haben, wie es Benutzer von Computern gibt. Dabei hängt auch viel vom jeweiligen Gesichtspunkt ab: der Administrator einer Computeranlage kann sein System beispielsweise als zuverlässig ansehen, wenn der Durchsatz des Systems im Großen und Ganzen den gesetzten Anforderungen entspricht. Ein Bediener könnte das System weniger positiv einschätzen, z. B. wenn er Fehler korrigieren oder öfter einen Wartungstechniker in Anspruch nehmen muss, um sein Arbeitspensum abwickeln zu können. Der Wartungstechniker schließlich könnte das System als völlig unzuverlässig ansehen, weil er unter anderem präventive Wartungsaktivitäten durchführt und dabei potenzielle Problembereiche identifi ziert, die noch nicht zu tatsächlichen Fehlern geführt haben. Wir sehen an diesen Beispielen, dass eine lose und subjektiv gefärbte Defi nition von Zuverlässigkeit für sicherheitskritische Systeme wie Flugsteuerung nicht ausreichend sein wird.

Definitionen von Zuverlässigkeit

• Zuverlässigkeit ist die Wahrscheinlichkeit, dass ein gegebenes System eine benötigte Funktion unter festgelegten Bedingungen für einen festgelegten Zeitraum ausführen wird.

Zuverlässigkeit ist daher eine Funktion der Zeit und sie liegt zwischen den Werten 1 (völlig zuverlässig) und 0 (völlig unzuverlässig). Das Ziel eines Entwicklers ist, den Systemwert so lange wie möglich zu halten, so nah an 1 wie möglich oder zumindest bis die Funktionszeit bzw. die Lebensdauer des Systems erreicht wurde. Für Fälle, in denen im System etwas schief geht, benötigen wir zunächst grundlegende

Definitionen für die Begriffe Störung, Ausfall und Fehler:

• Eine Störung ist die direkte Ursache dafür, dass das System seine Aufgabe nicht korrekt ausgeführt hat. Eine Störung kann in der Hardware, der Zeitbestimmung oder in der Software (Bugs) vorliegen. Sie kann darüber hinaus dauerhaft oder vorübergehend sein.

• Ein Ausfall ist eine Abweichung von der Systemspezifi kation, die auf eine vorliegende Störung zurückzuführen ist. Dies bedeutet, dass der Prozessor sich in einen inkorrekten Zustand versetzt, nachdem er eine Anzahl korrekter Zustände durchlaufen hat.

• Ein Fehler ist die Ausfallerscheinung einer Maschine durch einen Berechnungsfehler an einer bestimmten Stelle des Programms. Beim Entwurf eines Systems müssen wahrscheinliche Ursachen für Störungen in Betracht gezogen werden, und diese werden als „Gefährdung“ bezeichnet.

• Eine Gefährdung ist eine Belastung, die zu einem Ausfall führt. Dabei kann es sich z. B. um eine normale Umgebungsbedingung, eine ungewöhnliche Umgebungsbedingung oder einen Konstruktionsfehler handeln.

Um eine mathematische Funktion für Zuverlässigkeit formulieren zu können, werden zwei grundlegende Annahmen gemacht. Diese sind, dass Gerätausfälle zufallsbedingtauftreten und daher statistisch unabhängig sind, und dass die in Ausfällen pro Stunde ausgedrückte Ausfallrate über die Lebensdauer des Systems konstant ist. Beide Annahmen sind etwas heikel, aber sofern bestimmte Bedingungen erfüllt sind, haben sie sich zu Zwecken der Systemanalyse als ausreichend gültig herausgestellt. Statistische Unabhängigkeit ist die Annahme, dass der Ausfall einer Komponente nicht zu zusätzlicher Belastung für eine andere Komponente führt und damit deren Ausfallwahrscheinlichkeit erhöht.

Zu einer Zeit, als Computer noch aus einzelnen Transistoren, Widerständen usw. gefertigt wurden, konnte es beispielsweise vorkommen, dass der Ausfall eines Kondensators aufgrund eines Kurzschlusses zur Überlastung eines Transistors führt und so weitere Ausfälle nach sich zieht. Die heutzutage verwendeten integrierten Schaltkreise sind jedoch weit weniger anfällig gegenüber solchen kaskadierenden Ausfällen, so dass moderne Computer dem Zuverlässigkeitsmodell besser entsprechen. Die Anforderung einer konstanten Ausfallrate kann erfüllt werden, wenn man die Anfangs- und Endphasen im Leben des Systems ignoriert (Abb. 1) und sich nur auf den Boden der „Wanne“ konzentriert. In der Anfangsphase sollten alle inhärent fehlerhaften Komponenten, Hardwaredesignfehler und „Bugs“ in der Software eliminiert werden. Die theoretische Zuverlässigkeit eines nicht-redundanten Systemmoduls in Bezug auf Zeit kann daher wie folgt ausgedrückt werden:

R(t) = e-lt wobei l eine konstante Ausfallrate ist.

Dies liefert die in Abb. 2 gezeigte exponentielle Kurve. Das Modul ist theoretisch völlig zuverlässig ( R(t) = 1 ) wenn Zeit = 0, d. h. wenn das System in die konstante Ausfallrate seiner Lebensdauer eintritt.

Fehlervermeidung

Natürlich muss eine Methode gefunden werden, um zu ermitteln, wann die System-Ausfallrate den Boden der „Wanne“ erreicht hat. In der Praxis wird dies durch kostenintensive Langzeittests erreicht. Dies ist generell jedoch nur für Hersteller militärischer und bestimmter lebenswichtiger Systeme wirtschaftlich machbar. Kommerzielle Systeme im Zivilbereich werden dagegen meist am Kunden getestet und Zuverlässigkeitsberechnungen erfolgen auf der Grundlage eingegangener Beschwerden. Die durchschnittliche Zeit zwischen Ausfällen (MTBF) wird häufig als ein Parameter für die Zuverlässigkeit verwendet, und es handelt sich dabei einfach um den Kehrwert der Ausfallrate l. Um für ein gegebenes Modul einen Wert für l oder MTBF zu erhalten, werden die Ausfallraten seiner Komponenten addiert, da wir davon ausgehen, dass Ausfälle statistisch unabhängig sind. Die Kurve zeigt, dass für den spezifischen Fall t = MTBF, dann R(t) = 0,37 gilt. Dies bedeutet, dass wenn das System sich dem Alter nähert, das seinem MTBF entspricht, es nur zu 37 % wahrscheinlich ist, dass ein fortdauernd fehlerfreier Betrieb eintreten wird. Die herkömmliche Fehlervermeidung oder Fehlerintoleranz zielt darauf ab, die MTBF des Systems zu erhöhen, indem die MTBFs der einzelnen Module und Komponenten verbessert werden. Dies geschieht bis zu dem Punkt, an dem die erforderliche Lebensdauer oder Funktionszeit des Geräts deutlich niedriger als die MTBF des Systems ist, so dass sich die Wahrscheinlichkeit des erfolgreichen Betriebs auf 90-99 % erhöht. Normalerweise wird die Funktionszeit als Grundlage für diese Berechnung verwendet, besonders im Bereich von Militärflugzeugen, bei denen die MTBF unter Umständen nur Stunden betragen kann. Ausfälle werden auf verschiedene Weisen vermieden:

Qualitätskontrolle für Komponenten.

Heutzutage gehört dazu auch die verstärkte Wachsamkeit gegenüber gefälschten Teilen.

• Nutzung von Komponenten deutlich unter ihren Nennwerten, z. B. nur 10 % der Stromleistungsfähigkeit.

• Nutzung von Komponentenversionen, die im Automobilbau oder in militärischen Anwendungsbereichen verwendet werden.

• Verminderte Belastung durch die Umgebung, z. B. durch Kühlsysteme usw.

• Minimieren der Anzahl der Komponenten, die für den Auftrag erforderlich sind, d. h. Konstruktionseffi zienz ohne Redundanz.

Diese Techniken werden oft in militärischen Anwendungen eingesetzt, in denen niedriges Gewicht von entscheidender Bedeutung ist. Die langfristige Zuverlässigkeit ist in diesen Fällen oft sekundär, da Funktionszeiten so kurz sind, dass sie beispielsweise für Lenkwaffen in Minuten oder sogar Sekunden gemessen werden. Im militärischen Bereich ist dagegen eine möglichst geringe Verschlechterung über Zeit (d. h. bei Lagerung) von größerer Bedeutung. Außerdem hat die Sicherheit geringere Priorität als im Zivilbereich. Zivile Luftfahrt- und Automobilbauprojekte haben möglicherweise ähnlich kurze Funktionszeiten, aber die Kosten für ausfallsichere Konstruktion können dabei unerschwinglich sein. Glücklicherweise bietet die breite Verwendung integrierter Schaltkreise die Aussicht auf Ausfalltoleranz zu niedrigen Kosten: selbstprüfende Systeme, integrierte „Ersatzteile“ und automatische Wiederherstellung. In zivilen Anwendungsbereichen wird Ausfalltoleranz Entwicklungen wie führerlose Fahrzeuge nicht nur möglich sondern auch sicher machen. In Teil 2 werden wir die theoretischen und praktischen Implikationen ausfallsicherer Konstruktionen untersuchen und in diesem Zusammenhang Beispiele aus der Luftfahrt (Airbus) und der Raumfahrt (Space Shuttle und Roboterfahrzeuge) betrachten.

Von Dr. William Marshall, Central Content Editor Semiconductors