Sistemas operativos modernos
Antes de describir el algoritmo, es importante tener un modelo claro de los posibles erro res. El modelo supone que cuando se escribe un bloque en un disco (uno o más sectores), la es critura es correcta o incorrecta, y que este error puede detectarse en una lectura subsiguiente examinando los valores de los campos ECC. En principio, nunca es posible garantizar la detec ción de errores porque con un campo ECC de, digamos, 16 bytes para proteger un sector de 512 bytes, existen posibles valores de los datos y sólo 21^^ posibles valores de ECC. Por tanto, si un bloque sufre alteraciones durante la escritura pero el ECC no, hay miles y miles de millo nes de combinaciones incorrectas que producen el mismo ECC. Si se presenta cualquiera de ellas, el error no se detectará. En general, la probabilidad de que datos al azar tengan el ECC de 16 bytes correcto es de aproximadamente 2 -^^, una cifra lo bastante pequeña como para lla marla cero, aunque en realidad no lo sea. El modelo también supone que un sector escrito en forma correcta puede arruinarse espon táneamente, de modo que ya no pueda leerse. Sin embargo, se supone que tales sucesos son tan poco frecuentes que la probabilidad de que el mismo sector se arruine en una segunda unidad (independiente) durante un intervalo de tiempo razonable (por ejemplo, 1 día) es lo bastante pequeña como para hacer caso omiso de ella. El modelo también supone que la CPU puede fallar, en cuyo caso simplemente parará. Cualquier escritura de disco que esté efectuándose en el momento del fallo también se deten drá, dando pie a datos incorrectos en un sector y a un ECC incorrecto que podrá detectarse des pués. En todas estas condiciones puede hacerse un almacenamiento estable 100% confiable en el senfido de que las escrituras o bien funcionan en forma correcta, o dejan intactos los datos anteriores. Claro que esto no protege contra desastres físicos, como un terremoto que haga que la computadora caiga 100 metros en una fisura y llegue a un lago de magma hirviente. En el software, es difícil recuperarse de una situación así. El almacenamiento estable utiUza un par de discos idénticos en el que los bloques corres pondientes colaboran para formar un bloque sin errores. En ausencia de errores, los bloques correspondientes en ambas unidades son iguales. Es posible leer cualquiera de ellos y obtener el mismo resultado. Para lograr esta meta, se definen estas tres operaciones: 1. Escrituras estables. Una escritura estable consiste en escribir primero el bloque en la unidad 1, y luego leerlo para verificar que se escribió en forma correcta. Si no fue así, se repiten la escritura y posterior lectura n veces hasta que funcionen. Después de n fracasos consecutivos, el bloque se hace corresponder con uno de repuesto y la opera ción se repite hasta tener éxito, sin importar cuántos bloques de repuesto sea preciso probar. Una vez que se ha logrado escribir correctamente en la unidad 1, se escribe y relee el bloque correspondiente en la unidad 2 , reintentándolo varias veces si es nece sario, hasta lograrlo. Si la CPU no falla, al terminar una escritura estable se habrá es crito el bloque en forma correcta y se habrá verificado en ambas unidades. 2. Lecturas estables. Una lectura estable lee primero el bloque de la unidad 1. Si esto pro duce un ECC incorrecto, la lectura vuelve a intentarse hasta n veces. Si en todas se obtiene un ECC incorrecto, se lee el bloque correspondiente de la unidad 2. Dado el hecho de que una escritura estable lograda crea dos copias correctas del bloque, y da
RkJQdWJsaXNoZXIy MjI4NDcx