Memoria ECC ( în engleză error-correcting code memory , memorie cu corectare a erorilor) este un tip de memorie de computer care recunoaște și corectează automat modificările spontane (erorile) în biții de memorie . Memoria care nu acceptă corectarea erorilor este desemnată non-ECC .
De obicei, memoria de corectare a erorilor poate corecta modificările de un singur bit într-un singur cuvânt de mașină . Aceasta înseamnă că la citirea unui cuvânt mașină din memorie, se va citi aceeași valoare care a fost scrisă anterior, chiar dacă în intervalul dintre scriere și citire a fost schimbat accidental un bit (de exemplu, sub acțiunea razelor cosmice ). Memoria obișnuită nu poate spune în general dacă a apărut o eroare, deși unele tipuri de memorie de verificare a parității pot spune dacă a apărut o eroare, dar nu o pot corecta.
Memoria de corectare a erorilor este utilizată în majoritatea computerelor unde timpul de funcționare este important, inclusiv în majoritatea serverelor. Pentru ca memoria să funcționeze în modul de corectare a erorilor, este necesar suport de la controlerul RAM, care poate fi o parte integrantă a chipset-ului sau poate fi încorporat într- un sistem pe un cip care este integrat cu nucleele de calcul.
Cel mai elementar algoritm de corectare a erorilor se bazează pe codul Hamming . Cu toate acestea, există și alți algoritmi care pot corecta mai multe erori.
În practică, memoria DDR* SDRAM ECC este utilizată pe scară largă pentru serverele cu codul de clasă SECDED (corecție de eroare simplă și detecție a erorilor duble). Pe modulele de memorie, pentru fiecare 8 cipuri, se mai adaugă un cip, care stochează coduri ECC de 8 biți în dimensiune pentru fiecare 64 de biți din memoria principală [2] .
De asemenea, schemele de protecție a datelor ECC pot fi aplicate memoriei încorporate în microprocesoare: memorie cache, fișier de înregistrare. Uneori, controlul este adăugat și circuitelor de calcul.
Interferența electromagnetică din cadrul unui sistem informatic poate schimba în mod spontan starea celulei de memorie a unui computer . Cea mai frecventă cauză a acestei schimbări sunt neutronii din razele cosmice [3] . Prin urmare, rata de eroare în sistemele informatice crește pe măsură ce crește altitudinea . Astfel, fluxul de neutroni este de 3,5 ori mai mare la o înălțime de 1,5 km și de 300 de ori mai mare la o înălțime de 10-12 km (altitudinea de zbor tipică a aeronavei de pasageri) decât la nivelul mării [4] . Prin urmare, sistemele care funcționează la altitudine mare necesită mai multă protecție.
De exemplu, nava spațială Cassini-Huygens are două înregistratoare identice, fiecare conținând 2,5 gigabiți de memorie. În primii 2,5 ani de zbor, un număr aproximativ constant de erori a fost înregistrat în fiecare zi: aproximativ 280 de erori pe zi. Cu toate acestea, în decurs de o zi (6 noiembrie 1997), numărul erorilor sa dublat de patru ori. Se crede că acest lucru s-a întâmplat din cauza unei furtuni geomagnetice [5] (tot o furtună de protoni ), care a fost înregistrată de satelitul GOES 9 [6] .
Există îngrijorări că tendința către dimensiuni fizice mai mici ale modulelor de memorie va duce la o creștere a ratei de eroare datorită faptului că particulele de energie mai mică vor putea schimba bitul [4] . Pe de altă parte, dimensiunea compactă a memoriei reduce șansa ca particulele să intre în ea. În plus, trecerea la tehnologii precum siliciul pe un izolator poate face memoria mai stabilă [7] .
[ _ _ _ _ _ _ _ _ _ _ _ _ 8] .
O soluție la problemă este paritatea - folosind un bit suplimentar care înregistrează paritatea biților rămași. Această abordare vă permite să detectați erori, dar nu vă permite să le corectați, așa că dacă este detectată o eroare, puteți doar întrerupe execuția programului.
O abordare mai fiabilă este cea care utilizează coduri de corectare a erorilor . Codul de corectare a erorilor cel mai des folosit este codul Hamming . Cele mai multe tipuri de memorie de corectare a erorilor utilizate în computerele moderne pot corecta o eroare de un singur bit într-un cuvânt de mașină de 64 de biți și pot detecta, dar nu corecta, o eroare de doi biți într-un singur cuvânt de 64 de biți [9] .
Cea mai eficientă abordare a corectării erorilor depinde de tipul de erori așteptat. Se presupune adesea că modificările la diferiți biți apar independent, caz în care probabilitatea a două erori într-un cuvânt este neglijabilă. Cu toate acestea, această presupunere nu este valabilă pentru computerele moderne. Tehnologia de corectare a erorilor Chipkill ( IBM ) vă permite să corectați mai multe erori, inclusiv atunci când întregul cip de memorie este deteriorat. Alte tehnologii de corecție a memoriei care nu presupun independența erorilor de biți includ Extended ECC ( Sun Microsystems ), Chipspare ( Hewlett-Packard ) și SDDC ( Intel ).
Multe sisteme mai vechi au raportat doar acele erori pe care le-au găsit că nu au putut fi remediate și nu le-au raportat pe cele care au fost remediate. Sistemele moderne înregistrează atât erorile corectabile (CE, ing. erori corectabile ) cât și necorectabile (UE, ing. erori necorectabile ). Acest lucru vă permite să înlocuiți memoria deteriorată la timp: în ciuda faptului că un număr mare de erori corectate în absența erorilor irecuperabile nu afectează funcționarea corectă a memoriei, acest lucru poate indica faptul că pentru acest modul de memorie probabilitatea apariției unor erori necorectabile. erorile în viitor vor crește [10] .
Memoria de corectare a erorilor protejează împotriva funcționării incorecte a unui sistem computerizat din cauza corupției memoriei și reduce probabilitatea unei defecțiuni fatale a sistemului. Cu toate acestea, o astfel de memorie costă mai mult; placa de bază , chipset-ul și procesorul care acceptă memoria de corectare a erorilor pot fi, de asemenea, mai scumpe, astfel încât o astfel de memorie este de obicei utilizată numai în sistemele care sunt esențiale pentru o funcționare bună și corectă, cum ar fi un server de fișiere , aplicații științifice și financiare.
Verificarea sumelor necesită adesea un ciclu suplimentar al controlerului de memorie. Logica suplimentară care implementează numărarea, verificarea ECC și corectarea erorilor necesită resurse logice și timp pentru a funcționa fie în controlerul de memorie în sine, fie în interfața dintre CPU și controlerul de memorie [11] . Prin urmare, memoria de corectare a erorilor este cu 2-3% mai lentă decât memoria convențională, în funcție de aplicație [12] .
de memorie dinamică cu acces aleatoriu (DRAM) | Tipuri|
---|---|
asincron | |
Sincron | |
Grafic | |
Rambus | |
Module de memorie |