viernes, 15 de mayo de 2020

¿Cómo se guarda 1 Terabyte de datos en una memoria USB?

"Pen drive", lápiz de memoria, pincho... hasta "llave maya" (en Costa Rica) son los distintos nombres por los que se conoce a estos pequeños artilugios que aparecieron en nuestras vidas en el año 2000 y que hoy son compañeros indispensables para ir moviendo datos de un dispositivo informático a otro. Las primeras memorias tenían una capacidad de 8 Megabytes (MB; 1 Mega=1 millón). En 2014, Kingston lanzó al mercado la primera memoria USB de 1 Terabyte (TB; 1 Tera=1 millón de MB). Lo que suponía multiplicar por 125.000 veces su capacidad, en aproximadamente el mismo espacio físico. 

Un cálculo fácil, para hacernos una idea de lo que "cabe" en 1 TB es el siguiente: Si un libro de 500 páginas, con 2.000 caracteres por página, contiene 1 millón de caracteres, y (por lo que luego veremos) cada carácter ocupa 1 byte (8 bits) de memoria, entonces ese libro ocupará 1 MB. Por lo tanto, en 1 TB caben 1 millón de libros de 500 páginas (o 250.000 canciones en MP3, 500.000 fotografías digitales o 350 episodios completos de Los Simpson).
Memoria USB de 1 TB

Lo que me propongo en este post es explicar 1) cómo se almacena la información en una memoria USB y 2) cómo es posible almacenar tal cantidad de información en tan poco espacio. Y lo hago después de haberle dedicado bastante tiempo a entenderlo yo primero (que no es fácil), y con el objetivo de explicarlo, espero, de una forma clara y amena. No sé si como "para que lo entienda hasta mi abuela", frase que se le atribuye de forma dudosa a Einstein, pero sí para que todo aquel que dedique 10 minutos a su lectura salga con una idea bastante clara del tema.


Pero, para entender bien las cosas, hay que empezar por el principio y seguir paso a paso (los lectores que ya conozcan alguno de los fundamentos que expongo a continuación, pueden hacer "skip" hasta los siguientes párrafos).

1) Conversión de la información a 0´s y 1´s.

"Todo el mundo sabe" (¡qué peligro tiene esta afirmación!, pero la daremos por buena en este caso) que la información se almacena en todos los dispositivos informáticos en forma de ristras de 0´s y 1´s. O sea, que lo primero que se necesita es una tabla de conversión de cualquier carácter a eso, a una serie de 0´s y 1´s. Ha habido varios estándares a lo largo de la (corta) historia de la informática, pero hablaremos del más utilizado hoy en día: Unicode.

En su última versión, permite la conversión de cualquier carácter de 154 tipos de escrituras diferentes (incluyendo las más exóticas, tanto actuales, por ejemplo: árabe, braille, copto, cirílico, griego, sinogramas (hanja coreano, hanzi chino y kanji japonés), silabarios japoneses (hiragana y katakana) como desaparecidas: cuneiforme, griego antiguo, micénico, fenicio o rúnico) lo que da un total de 143.924 caracteres diferentes. Hay varios formatos de conversión, pero, para no liarnos, nos fijaremos en el que establece 16 bits (una cadena de 16 0´s y 1´s) para cada carácter.

Por ejemplo, tomemos la palabra "Rosa". La conversión Unicode en formato de 16 bits sería:
R mayúscula: 0000 0000 0101 0010   (punto de código: +U0052)
o minúscula:  0000 0000 0110 1111    (+U006F)
s minúscula:   0000 0000 0111 0011   (+U0073)
a minúscula:  0000 0000 0110 0001    (+U0061)

Dos cosas llaman la atención: el "despilfarro" de posiciones llenas de 0´s, pero es lo que tiene que se puedan codificar casi 150.000 caracteres, y no sólo los apenas 100 códigos que se necesitarían para cubrir todas las letras latinas (mayúsculas, minúsculas, caracteres especiales) y los dígitos del 0 al 9. Y lo que se llama punto de código, que es cómo se escriben los códigos en Unicode, para que no sean tan largos. Se hace en formato hexadecimal, poniendo delante de todos un U+. Formato hexadecimal (sistema base 16) quiere decir que a cada grupo de 4 bits se le asigna un dígito, desde el 0000=0 hasta el 1111=8+4+2+1="15"=F, pasando, por ejemplo, por el 1001=8+0+0+1=9 y 1010=8+0+2+0="10"=A. Pero esto no es relevante para lo que nos ocupa. Nos quedamos con la idea de que, en algún sitio dentro del ordenador, hay una tabla que convierte cada carácter en una ristra de 16 bits (0´s y 1´s).

(Inciso: si te estás preguntando, bien, ya entiendo lo de la conversión de letras o textos a 0´s y 1´s, pero ¿qué pasa con las canciones, con las fotos, con los vídeos que también se almacenan en la memoria USB? La respuesta es que tanto las señales analógicas de audio (canciones) como las imágenes (de fotos o de vídeos) pasan por un proceso previo de conversión a digital.

En el caso de una foto, por ejemplo, la resolución de esa foto indica el número de "píxeles" que la forman (Por ejemplo, la cámara del iPhone 11 tiene una resolución de 4.290 x 2.800 píxeles, lo que da  un total de 4290x2800=12.012.000 píxeles, o sea 12 megapíxeles). Cada píxel equivale a un color (combinación de Rojo, Verde y Azul - RGB en inglés) y ese color tiene su conversión en un código binario de 24 bits, como hemos visto con las letras, aunque en este caso eran 16 bits.

Tabla de conversión de colores RGB (Red-Green-Blue) a 24 bits (3 bytes - 6 dígitos hexadecimales)
A su vez, los vídeos no son "continuos", sino una sucesión de imágenes ("frames") pasados a alta velocidad (unos 30 fps, "frames per second"), por lo que traducir un vídeo a binario resulta de la conversión de cada uno de sus frames (1 minuto de vídeo HD a 30 fps ocupa unos 60 MB; 1 hora, 3,6 GB))



2) Almacenamiento en la memoria

Componentes de un "pincho" La memoria es el nº 4, y el
controlador de la memoria el nº 2
(Foto John Fader - 2004)
Llegamos, por tanto, a la primera pregunta: ¿cómo se almacena un 0 o un 1 en una memoria USB? A diferencia de los dispositivos magnéticos (el cassette, para entendernos) u ópticos (los CD´s o DVD´s), la memoria USB es lo que se conoce como "memoria de estado sólido", formada por millones (luego veremos cuántos) de "transistores" que están "empaquetados" en la unidad de memoria. Olvídate de la acepción española de transistor equivalente a aparato de radio donde se escucha los domingos el "Carrusel Deportivo". No. Hablamos de un dispositivo electrónico elemental, que nos va a permitir, precisamente, lo que queremos: tener dos estados, que interpretaremos como "0" o "1", que haya un procedimiento capaz de "escribirlo" (es decir, de poner el estado que queremos) y otro de "leerlo" (saber en qué estado se encuentra). El cómo se lleva a cabo ésto no creo que importe mucho y puede liar la explicación; simplemente que sepas que tiene un papel importante la carga (o no) de los electrones que se encuentran en uno de los componentes del transistor, el que se conoce como "puerta flotante". 

Bien, ya sabemos dónde y cómo se guardan los 0´s y 1´s de nuestros caracteres en las "celdas de memoria". Lo siguiente es saber cómo se organiza el contenido de la memoria, el Terabyte de datos, y cómo se gestiona para saber dónde está cada trozo de información.

3) Gestión de la memoria

Aquí el papel protagonista lo tiene el dispositivo controlador de la memoria, que aparece con el nº 2 en el diagrama anterior de componentes de la USB. Lo primero a saber es que cada celda de memoria tiene una dirección, para saber dónde está. Esa dirección también está formada por una ristra de 0´s y 1´s. Dependiendo del sistema operativo del microprocesador que controla la memoria, esta dirección puede tener una longitud de 16, 32 ó 64 bits. A más bits, más direcciones de memoria y, por tanto, más capacidad de almacenamiento.

El cómo funciona el almacenamiento y la recuperación de información es más complejo de explicar. Quizá nos podemos quedar con una versión simplificada, entendiendo que la realidad es similar, pero más complicada.

Al "abrir" una memoria USB, nos muestra los archivos que contiene, Pueden ser ficheros Word, Excel, imágenes JPEG, archivos MP3 de audio, etc... Cada fichero tiene un programa (que está en el ordenador, no en la USB) que lo "reconoce" e interpreta la información que lleva. Podemos pensar que esa lista de ficheros está en una tabla donde, además, se indica la posición de memoria donde empieza ese fichero. Sólo donde empieza. Porque, así es como normalmente se diseña, la información de un fichero está dividida en bloques (de tamaño a definir), y cada bloque termina con la dirección de memoria del siguiente bloque, y así hasta que acaba la información del fichero, lo cual se sabe porque hay un código concreto que lo indica. Esto se hace así, entiendo, para optimizar el espacio de almacenamiento, sobre todo cuando se escribe y se borran datos muchas veces en el mismo dispositivo.

Pero lo vemos mejor con un ejemplo muy sencillo. Supongamos que nuestro USB sólo tiene dos ficheros de texto: uno que se llama "Hola.txt" y otro "COMPRAS".
El fichero "Hola.txt" contiene el texto: Buenos días, Ángel, Saludo
El fichero "COMPRAS" contiene el texto: Patatas, pan y galletas
En la "tabla de contenidos" (resaltada en amarillo) está el nombre de los dos ficheros y el sector de comienzo del primer bloque. En el ejemplo, sería el sector 7 para el fichero "Hola.txt" y el sector 17 para el fichero "COMPRAS". Mirad la tabla y seguimos:

Ejemplo de Tabla de asignación de memoria
Cortesía de LTH


Si abrimos el fichero "Hola.txt", nos dirigirá al sector 7 para empezar a leer su contenido. Allí leeremos 9 bytes de información (Buenos dí) y 1 byte con la dirección del sector donde continúa el contenido (en este caso, el 4). Vamos al 4, leemos otros 9 bytes (as, Ángel) y vamos al 13; nuevamente leemos (, Saludo) y, al llegar al byte con el código "28"(este es el carácter que lo indica en la codificación ASCII) sabemos que el contenido se ha acabado. Y hemos leído el contenido completo:"Buenos días, Ángel, Saludo".

Igual proceso podríamos hacer con el fichero "COMPRAS".

Como digo, el proceso real es bastante más complejo, pero lo importante es quedarnos con la idea de que hay un "programa" que se encarga de la organización y gestión del contenido de la memoria.

4) Miniaturización

Ahora que ya sabemos cómo se almacena la información y cómo se organiza la gestión de la memoria, la pregunta es ¿y cómo se consigue que todo eso quepa en un espacio de apenas 20 mm x 10 mm? Pues gracias a un proceso de fabricación que permite la miniaturización de sus componentes hasta extremos prodigiosos. Aquí las distancias se miden en nanómetros (nm). En un centímetro caben 10 millones de nanómetros.

Imagen aumentada de una "oblea" de silicio donde se van insertando las unidades de memoria

Pues bien, las técnicas actuales de fabricación permiten que, en lo que se conoce como "proceso 10 nm", la densidad de transistores sea de unos 100 millones/mm2 --> 10.000 millones de transistores por cm2. Como, además, se pueden poner apiladas y conectadas varias capas de transistores (hasta 136 capas se han conseguido apilar en el caso de un modelo de Samsung), eso ya nos daría unos 1.360.000 millones de bits por cm2, o, lo que es lo mismo 170.000 millones de bytes --> 170 GB. (Para extender la capacidad de una memoria USB hasta el TB que hemos indicado, hay que utilizar unas técnicas de fabricación más complejas, que permiten almacenar hasta 4 bits por transistor, y más cosas..., pero no nos vamos a enredar más. Baste con saber que cada vez se va consiguiendo empaquetar más millones de transistores por mm2).

Evolución en los últimos años de la densidad de transistores en Intel (millones por mm2)

A modo de curiosidad, en este vídeo de 30 segundos, se hace un zoom (simulado) del chip de un teléfono móvil (que contiene más cosas, aparte de la memoria). Para dar una idea de la tremenda minuciosidad de los procesos de fabricación : Zoom in on the chip in your smartphone
____________________________________________________

En resumen, hemos visto:
1) cómo se convierte toda la información a digital (ristras de 0´s y 1'´s),
2) cómo se almacena esa información en una memoria de miles de millones de transistores,
3) cómo se gestiona esa memoria, para saber dónde está cada pieza de información y poder responder a las peticiones de los distintos programas de usuario (Word, Excel, MP3,...) y
4) cómo las técnicas avanzadas de fabricación permiten miniaturizar hasta extremos inverosímiles todo el entramado de transistores y conectores.

La próxima vez que tengas en tus manos un "pincho" de 1 TB, lo verás con otros ojos...
____________________________________________________
Si tienes curiosidad, te recomiendo:
1) La página web de Unicode, aquí.
2) Este vídeo de Intel, donde se describe el proceso de fabricación de chips.

3 comentarios:

  1. Muy interesante. Me ha gustado recordar la codificación de la información.

    ResponderEliminar
  2. Joer, Angel. Todavía te recuerdo saliendo del Chami con tu cartera llena de tarjetas perforadas camino del centro de calculo. Un artículo muy interesante porque da respuesta a algo que siempre me he preguntado...Pero, demasiado pá mi corta sesera. Y si encima es verdad que con la edad se pierden neuronas, pues peor. Felicidades por tu blog. Un ratito muy agradable, siempre, entre los correos que en estos tiempos vienen cargados de problemas o de malas noticias.

    ResponderEliminar
    Respuestas
    1. Gracias Nabelo. A cambio de mi "erudición tecnológica" tú me enseñaste que, mirando a través del visor de una cámara, se pueden ver muchas cosas, si lo haces con los ojos de la curiosidad y la creatividad.
      En cuanto a lo de las tarjetas perforadas, dos anécdotas: la primera es que en el Centro de Cálculo de la UCM había que pagar por ellas (creo recordar que 50 ptas. por el paquete de 100); supongo que era para que hiciéramos un uso racional de ellas. La segunda, derivada de ésto, era que, para ahorrar tarjetas, escribíamos las instrucciones del programa todas seguidas en sus 80 columnas, separadas por el ";" que indicaba el fin de cada una. Eso estaba muy bien siempre que no tuvieras un fallo en el programa y tuvieras que corregir alguna instrucción, porque entonces había que tirar varias tarjetas a la basura...

      Eliminar