¿Cómo logra un PC guardar información sin equivocarse ni una vez?

En un mundo donde toda la información que manejamos se encuentra digitalizada en buena parte es importante que esta se conserve tal cual de cara a su preservación. No obstante se pueden producir errores en la transmisión y almacenamiento de la misma y por eso necesitamos sistemas de corrección de errores. Pero, ¿cómo funcionan? ¿cómo es posible que nunca se equivoquen? Vamos a explicarlo en detenimiento.

Una forma que tenemos para entender cómo funciona un ordenador es decir que funciona con 0 y 1, pero esto no es más que una simplificación extrema para dar a entender que hablamos de señales eléctricas que se transmiten con dos valores posibles distintos de un extremo a otro. Pese a que la señal de sistemas digitales son mucho menos vulnerables que los analógicos a los cambios estos también se pueden producir por una serie de efectos no controlados e indeseados que pueden tener como resultado que la información que se transmite de un punto a otro no sea la correcta.

La corrección de errores

Corrección Errores binario

Tenemos la tendencia a pensar que nuestro PC no se equivoca nunca a la hora de realizar los cálculos y si hay un error es por un mal diseño, como por ejemplo el famoso problema de la división en coma flotante del primer Pentium de Intel. No obstante, dar por bueno que no va a existir ningún error en el hardware es en sí mismo una equivocación y es que hay un punto en que se puede crear una variación en la información transmitida.

Dicho elemento crucial es en la transmisión de datos de una parte a otra de un procesador, entre procesadores distintos y entre procesador y memoria. Aunque pueda parecer sorprendente puede ocurrir que por ciertos elementos la señal enviada de un lugar a otro se acaba desvirtuando, de tal manera que los ceros del código binario se conviertan en un 1 o viceversa.

Los cambios producidos pueden tener efectos tan simples como que los datos a procesar cambien levemente o incluso la instrucción a ejecutar. Es por ello que a la hora de realizar la implementación física de un procesador o memoria el equipo de certificación ha de mirar punto por punto que no aparezcan elementos que provoquen esas variaciones en el envío de datos. Así como implementar mecanismos en el hardware para la corrección de errores.

Almacenamiento de datos

Fabricantes discos duros SSD

El primer punto en el que es importante que no haya errores de hardware a la hora de transmitir los datos es en los soportes de almacenamiento, ya que estos son cruciales para almacenar la información y nos interesa que haya una exactitud del 100% a la hora de almacenar los datos en formato binario.

El código resultante en todas las arquitecturas, no obstante, no es siempre el mismo, ya que el set de registros e instrucciones, el formato de disco y demás estándares utilizados harán que el binario no sea el mismo en todos los sistemas. En todo caso hemos de partir del hecho que todo archivo que almacenemos en nuestro disco duro o SSD e independientemente de su naturaleza se codificará siempre en binario.

Una forma de corregir los errores es usar la redundancia de datos, es decir, hacer varias copias de cada dato para que si una recibe cambios al menos se pueda comprobar de manera automática, pero esto es ineficiente al pedir tres veces más ancho de banda y almacenamiento. Por lo que hemos de buscar una solución alternativa y la más conocida consiste en añadir una serie de bits adicionales al final de cada bloque de datos para certificar que no se han producido errores. Dichos bits de más serán empleados de cara a una serie de algoritmos para verificar la estabilidad de la información.

La implementación en el hardware

AI. Circuit board. Technology background. Central Computer Processors CPU concept. Motherboard digital chip. Tech science background. Integrated communication processor. 3D illustration

Los sistemas de corrección de error en el hardware no solo son invisibles de cara al usuario, lo son de cara a la aplicación e incluso para el sistema operativo, ya que todo ocurre a nivel de hardware y en el espacio de las interfaces de comunicación, dentro de las cuales hay una serie de mecanismos, habitualmente de función fija, que se encargan de aplicar los algoritmos correspondientes para asegurarse que los datos que van de un punto a otro se mantienen sin variaciones en cada momento.

Todo sistema de corrección de errores necesita de dos elementos participantes, por un lado, quien envía los datos y por el otro quien los recibe. No olvidemos que en el envío de datos también se incluye su funcionamiento. El transmisor será el encargado de enviar el mensaje junto a una serie de bits especiales que se utilizarán para la corrección de errores en la cual se comparará la información que se ha transmitido con la que se ha recibido para mantener la integridad de la información binaria en cada momento.

Los sistemas de hardware encargados de realizar esta tarea no son accesibles por ningún elemento del software, ya que se encuentran en las interfaces de transmisión de datos realizando de manera continua y redundante la misma tarea una y otra vez. Para ello no hacen falta procesadores complejos, sino unidades tan simples como eficientes.

El bit de paridad

Código binario color

La forma más fácil de hacerlo es con el bit de paridad, el cual consiste en añadir un bit adicional a cada byte y hacer que este tenga un valor de 0 o 1 dependiendo si la cantidad de 1 en el resto del byte es par o impar. Esto no corrige errores, solo nos indica que el binario se ha modificado, pero no sabemos cuántas modificaciones se han hecho y, por tanto, no se trata de la solución ideal para corregirlos, ya que nos es necesario localizar dónde se encuentra el error. No obstante hay formas de poder ejecutar la corrección de errores con el bit de paridad y que al mismo tiempo nos servirá para que entendáis su funcionamiento.

Corrección de errores, ejemplo práctico

No obstante, una manera más elegante de solucionarlo es emplear varios bits paridad dentro de cada bloque de datos y organizar la información en una matriz, por ejemplo podemos tener un código de 16 bits o 4 bytes que se pueden representar en una matriz de 4 x 4. A principio de cada línea podemos añadir un bit de paridad que cuente si la cantidad de 1 en ese byte es par o impar. Al final se añade un byte adicional de información, sin embargo, lo que hace es contar la cantidad de 1 en vertical y no en horizontal.

Corrección errores paridad

Así pues, el sistema receptor lo que hace es recibir un bloque de datos de 16 bits, de los cuales 12 bits incluyen información y 4 son bits de paridad. Lo que se hace es comparar el código que se ha emitido con el que se ha recibido, primero comprobando la primera y tercera columna, luego la primera con la segunda, la segunda con la cuarta y para terminar la tercera con la cuarta columna. Luego se hace un proceso similar con las filas.

El objetivo de este procedimiento es revisar en qué punto exacto se encuentra el bit que ha sido cambiado, ya que permite localizar la columna y la fila exactas donde se encuentra el error. Una vez que el sistema receptor sabe en qué posición ha habido el cambio de la información es tan fácil como voltear el valor al correcto. A día de hoy se utilizan mecanismos de error mucho más simples del que os hemos explicado (sobre todo por rendimiento), pero nos sirve como ejemplo para que entendáis cómo funciona la corrección de errores por hardware de manera simple.

¡Sé el primero en comentar!