En todos los SSD existe un chip central que se encarga de comunicar los chips NVMe con el resto de los componentes del PC, este es el controlador flash que se encuentra en cada unidad SSD, sea este una unidad M.2, un disco SSD en formato de 2.5 pulgadas o un SSD externo. Pero, ¿cómo funciona esta pieza de hardware? Os lo explicamos.
La memoria flash es lo que llamamos memoria RAM no volátil o NVRAM, es por ello que el acceso a este tipo de memoria se realiza con una interfaz muy parecida, por no decir casi igual al de una interfaz de memoria convencional. No obstante, por la naturaleza y localización de la memoria NAND Flash del tipo NVMe en el hardware de los SSD su funcionamiento es totalmente distinto a las interfaces con la memoria RAM convencional.
¿Qué es un controlador flash?
Un controlador flash es el chip central que se encuentra en toda unidad SSD, el cual tiene que realizar una serie de funciones que son esenciales para su funcionamiento. Estas son el traslado de direcciones y la copia de los datos de la memoria flash del SSD a la RAM o la VRAM del sistema. A continuación os describimos el motivo y cómo funcionan estos dos procesos y cómo los realiza el controlador flash.
Para entender la utilidad del controlador flash en el SSD lo mejor es hacer un símil en el que tenemos dos oficinas de correos, una estatal que tiene todas las direcciones de los pueblos que hay en el país pero no de manera convencional. Para entenderlo mejor pensad que cada dirección en nuestro ejemplo no es una calle con un número, sino un apartado de correos o dicho de otra manera un número. ¿Y qué hay de la segunda oficina de correos? Pues esta funciona a escala de una localización mucho más pequeña, como sería una provincia o un pequeño pueblo.
Dado que cada oficina va a asignar todas las direcciones desde la primera a la última según la cantidad de direcciones que tiene disponibles entonces nos encontramos con que la numeración de cada dirección asignada por cada una de las oficinas de correos no corresponderá entre ellas. Pues bien, la primera oficina de correos es el conjunto de unidades de manejo de memoria o MMU que generan las direcciones virtuales para acceder a los datos en la memoria física, pero la CPU ha de tener una manera para acceder más allá de la RAM y por eso su direccionamiento no solo incluye todas las direcciones de memoria que hay en la RAM del sistema sino también más allá.
En cuanto a nivel físico, tanto la RAM tradicional y la no volátil, que es la que conocemos como memoria flash, tienen un direccionamiento distinto porque su interfaz empieza a contar sobre sí misma y no en global. De ahí una de las tareas del controlador Flash, es el traslado de las direcciones de memoria para que la CPU o cualquier otro procesador pueda acceder.
Traslado de direcciones en FLASH
Todo controlador flash tiene una memoria RAM asignada, excepto en los DRAM-Less donde utiliza la RAM del sistema con la latencia añadida y la pérdida de rendimiento que esto supone. Pero, al contrario de lo que podemos llegar a concluir a simple vista, esta memoria no solo sirve como búfer de datos intermedio, sino que además es utilizado para el traslado de direcciones.
Es decir, la memoria RAM que tiene asignada el controlador flash almacena las direcciones que envía la CPU, la tabla de traslado y a través de una simple operación genera las direcciones de memoria física que le permite acceder a los datos dentro de los chips NVMe compuestos de celdas NAND Flash, ya sea para leer o escribir sobre ellos. Y se ha de tener en cuenta que dicha tabla será cada vez más grande cuanta más memoria tenga en su interior el SSD, de ahí a que sea necesario un chip de memoria RAM convencional.
Esto lo podemos ver por ejemplo en la unidad SSD integrada de PlayStation 5, donde podemos ver un pequeño chip de memoria acompañando a los chips NVMe, lo cual es habitual en la gran mayoría de unidades SSD, a excepción, como os hemos comentado antes, que estemos hablando de una unidad SSD DRAM-Less.
Copiando datos de la Flash a la RAM o VRAM
La memoria flash es mejor que un disco duro convencional al no heredar los problemas de acceso a las clásicas unidades de disco. Como su alta velocidad de transferencia. Pese a esta ventaja frente a los HDD no se trata de una memoria ideal para que la CPU pueda operar con ella de manera directa y mucho menos una GPU. Si ya para las clásicas memorias DDR con un mayor ancho de banda necesitamos el uso de cachés para paliar la falta de velocidad de esta, en el caso de las memorias flash esto se agrava.
Es por ello que el controlador flash necesita copiar a la memoria RAM los datos para que la CPU pueda acceder a ellos, pero existe un problema de entrada, por motivos de seguridad la RAM está dividida en dos espacios distintos. Uno en el que pueden acceder las aplicaciones y otro al que accede en exclusiva el sistema operativo y a donde no pueden acceder los programas. Bajo esta premisa, ¿cómo sabe el controlador flash donde ha de copiar los datos? Pues se toma una parte de la RAM como búfer intermedio y se copian los datos ahí. Es la propia CPU del sistema, si no hay un acelerador encargado de dicha tarea el que se encargaría de comprobar los datos del búfer y copiarlos en la parte de la RAM correspondiente.
En cuanto a la VRAM, dependiendo de qué tipo de GPU y API estemos utilizando, en una GPU con soporte completo con DX12 Ultimate la propia GPU es la que puede tomar los datos desde el SSD, en una sin dicho soporte requiere la participación de la CPU, lo cual es un trabajo doble, ya que luego tiene que copiarlos de la RAM a la VRAM haciendo llamadas a los mecanismos de copia de datos de la CPU y la GPU.