Computerhardware: RAM: Parität


Korrekturverfahren Bearbeiten

Ob magnetischer, optischer oder elektronischer Speicher - bei jeder Art von Speicher treten gelegentlich Fehler auf. Statistisch am häufigsten sind Einzelbitfehler, aber auch zwei oder viele Bits können gleichzeitig falsch sein. Es ist wichtig, Fehler zu erkennen und das betroffene Programm abzubrechen. Es ist zwar ärgerlich, wenn ein Programm abstürzt, aber unbemerkt mit falschen Daten zu rechnen dürfte weitaus schlimmer sein. Es gibt sogar Verfahren, kleine Fehler automatisch zu korrigieren.

Parität Bearbeiten

Das Hinzufügen einer Parität ist eins der einfachsten Verfahren zur Fehlererkennung. Wie funktioniert es?

Zu jeweils acht Datenbits wird ein neuntes Bit, das Paritätsbit, hinzugefügt. Dieses Bit enthält keine Nutzinformation, sondern dient nur der Fehlerkontrolle. Der Wert des Paritätsbits wird abhängig von den Datenbits berechnet. Es gibt zwei Möglichkeiten, wie das Paritätsbit ermittelt wird. Hier wird als Beispiel die ungerade Parität gezeigt.

  • Das Paritätsbit ist Null, wenn im Datenbyte die Anzahl der Einsen ungerade ist.
  • Das Paritätsbit ist Eins, wenn im Datenbyte die Anzahl der Einsen gerade ist.

Anders und einfacher ausgedrückt: Zählt man die Anzahl der Einsen in den Datenbits und im Paritätsbit zusammen, muss stets eine ungerade Zahl herauskommen.

Als Beispiel betrachten wir vier aufeinanderfolgende Bytes, nummeriert von 1 bis 4. Die Bits auf gelben Grund sind die Paritätsbits. Es wird die ungerade Parität verwendet.

Byte 1    0 1 1 1 0 0 0 0 0
Byte 2    0 0 0 1 0 0 1 0 1
Byte 3    1 0 0 1 1 0 0 0 0
Byte 4    0 0 0 0 0 0 0 0 1

Angenommen, es sind zwei Bits falsch. Die falschen Bits sind rot, fett und kursiv hervorgehoben.

Byte 1    0 0 1 1 0 0 0 0 0
Byte 2    0 0 1 1 0 0 1 0 1
Byte 3    1 0 0 1 1 0 0 0 0
Byte 4    0 0 0 0 0 0 0 0 1

Im ersten und zweiten Byte ist die Anzahl der Einsen jetzt gerade, die Parität stimmt nicht mehr! Jetzt sollte die Überwachungsschaltung Alarm schlagen.

Mit Hilfe der Paritätsprüfung entdeckt der Chipsatz Bitfehler in den Speichermodulen. Bei Fehlern kann der PC anhalten und eine Meldung wie z. B. "Parity Error at xxxx: yyyy" ausgeben.


Längsparität Bearbeiten

Eine weitere Möglichkeit ist es, in senkrechter Richtung eine Parität hinzuzufügen. Vermutlich wurde das Verfahren zuerst an Magnetbändern eingesetzt. Dort wurde die oben gezeigte Parität als Querparität bezeichnet und in senkrechter Richtung als Längsparität.

Byte 1    0 1 1 1 0 0 0 0 0
Byte 2    0 0 0 1 0 0 1 0 1
Byte 3    1 0 0 1 1 0 0 0 0
Byte 4    0 0 0 0 0 0 0 0 1
Längsparität    0 0 0 0 0 1 0 1 1

Wenn nur ein einzelnes Bit falsch ist, kann sogar dessen Position bestimmt werden und eine Korrektur vorgenommen werden. Wenn mehrere Bits falsch sind, wird ein Fehler entdeckt, aber eine Korrektur ist nicht möglich.

Zyklischer Code Bearbeiten

Das ist eine weitere Möglichkeit der Fehlerentdeckung. Die Bytes werden nach diversen mathematischen Formeln kombiniert. Ein sehr einfache Methode ist die folgende:

  1. Das erste Byte wird zur anfänglichen Zwischensumme.
  2. Die Zwischensumme wird um ein Bit zyklisch nach links verschoben (zyklisch bedeutet: Die aus der obersten Position herausgeschobenen Bits werden als Bit Null wieder eingeschoben, hier grün markiert).
  3. Das nächste Byte wird zur Zwischensumme addiert.
  4. Mit dem zweiten Schritt wird fortgesetzt, bis das letzte Byte erreicht ist.
Daten
Byte 1    0 1 1 1 0 0 0 0
Byte 2    0 0 0 1 0 0 1 0
Byte 3    1 0 0 1 1 0 0 0
Byte 4    0 0 0 0 0 0 0 0
Zwischensumme
Byte 1    0 1 1 1 0 0 0 0
Byte 2    1 1 1 1 0 0 1 0
Byte 3    1 1 1 1 1 1 0 1
Byte 4    1 1 1 1 1 0 1 1
 
*1    
*2
*3
*4
Zw.-summe linksverschoben
Byte 1    1 1 1 0 0 0 0 0
Byte 2    1 1 1 0 0 1 0 1
Byte 3    1 1 1 1 1 0 1 1
Byte 4    1 1 1 1 1 0 1 1

Kommentar 1 Bearbeiten

Die erste Zwischensumme ist gleich dem ersten Byte. Linksverschiebung von 01110000 ergibt 11100000.

Kommentar 2 Bearbeiten

  11100000   die linksverschobene erste Zwischensumme
+ 00010010 plus Daten-Byte 2
= 11110010 ergibt die zweite Zwischensumme
  11100101 ist die zyklisch linksverschobene zweite Zwischensumme

ECC-RAM Bearbeiten

Es gibt eine Vielzahl von Fehlerkorrekturalgorithmen. Einer der bekanntesten ist der „Hamming-Code“, der Einzelbitfehler beheben und Doppelbitfehler zumindest erkennen kann. Für 8 Datenbits werden zwei zusätzliche Bits benötigt, für 64-Bit-Datenbreite werden 8 zusätzliche Bits benötigt.

Dieser ECC-RAM (Error Correction Code) wird besonders in Servern gern verwendet, auch EDC-RAM (Error Detecting and Correcting) genannt. ECC-RAM erkennt und korrigiert Einzelbitfehler selbständig. Diese Bausteine sind um etwa 40 Prozent teurer als „normale“ RAM. Zudem muss auch der Chipsatz ECC unterstützen. Bei Serverplatinen ist die Unterstützung von ECC-RAM üblich.

Nach einer Studie von IBM erreicht ECC-Speicher über einen Zeitraum von drei Jahren eine Zuverlässigkeit von 91 Prozent. Um eine noch höhere Speichersicherheit zu erreichen, wurde 1996 von HP die „Advanced-ECC-Technologie“ entwickelt. Ende der 90er Jahre entwickelte IBM speziell für die „Pathfinder“-Marsmission das Chipkill-Verfahren, denn Speicherfehler auf dem langen Flug wären katastrophal gewesen. Inzwischen wird die Technologie auch in High-End-Servern benutzt. Der Speicher funktioniert ähnlich wie ein Festplatten-RAID-System. IBM erreichte mit „Chipkill“ eine Zuverlässigkeit von 99,94% über drei Jahre.

Mehr dazu im Artikel von TecChannel: http://www.tecchannel.de/server/hardware/402181/fehlertoleranter_speicher_schuetzt_vor_systemausfaellen_und_datenverlust/