MemoriasTutoriales

Memoria de un ordenador: ¿Cuáles existen?

La memoria de un ordenador, pese a que está en boca de todos los usuarios, aún sigue siendo una completa desconocida para muchos de ellos. Por ese motivo, aquí podrás ver la jerarquía de memoria íntegra de un computador y los tipos de memoria que intervienen durante los procesos que normalmente se realizan con estos equipos, así como el objetivo de cada una de ellas.

Memoria de un ordenador: jerarquía

La definición de computador es clara: es un sistema capaz de procesar datos a partir de unas instrucciones o programas, y se compone básicamente de una CPU, memoria, y E/S a nivel de hardware, con un sistema operativo y programas a nivel de software. Pues bien, si nos centramos en la memoria, la jerarquía que debes conocer es:

Registros

registros
Registros del Z80

La ISA de un computador define las instrucciones, los tipos de datos aceptados, los modos de direccionamiento y también los registros. Precisamente esos registros de la CPU son los primeros a tratar, ya que se trata de la memoria más diminuta y rápida que existe en la jerarquía.

Los registros se encuentran dentro del microprocesador, en forma de bancos. Su objetivo es almacenar pequeñas cantidades de información, unos pocos bits o datos binarios, como pueden ser instrucciones o datos. Cada CPU puede tener un buen número de ellos, con diferentes objetivos. Por ejemplo, algunos de los más habituales suelen ser:

  • Registro para datos: pueden almacenar datos u operandos como su propio nombre indica. Algunos de ellos se usan para almacenar datos enteros o en coma flotante, otros solo para uno de estos dos tipos.
  • Registro para instrucciones: destinados solo a almacenar instrucciones, es decir, las operaciones que se aplicarán sobre los datos u operandos. Estos registros almacenarán unos códigos que la unidad de control debe interpretar.
  • Registros de direcciones: como su nombre indica, sirven para almacenar direcciones de memoria.
  • Registros de estado: son los que almacenan las llamadas flags o banderas. Una de estas bandera será unos bits que determinan el estado de algo, como por ejemplo si una operación de suma tuvo carry o no, para condiciones, etc.
  • Registros de propósito general: son lo contrario a los de propósito específico, pudiendo almacenar información de cualquier tipo, como instrucciones, datos, direcciones, etc.
  • Registro Programa Counter o PC: es un registro muy importante, y se encarga de apuntar a la siguiente dirección de la instrucción a ejecutar. Como sabes, un programa se compone de una serie de instrucciones y datos que deben ser ejecutados de forma secuencial. Para ello, el registro PC se encarga de sumar +1 a la dirección actual, apuntando así a la siguiente instrucción a ejecutar, y así sucesivamente hasta terminar de procesar el programa.

Independientemente del tipo, lo interesante aquí es resaltar que se trata de una memoria de muy poca capacidad, pero la más rápida de todas. Además, al estar tan cerca de las unidades de ejecución de la CPU, la latencia es mínima, y puede transferir la información almacenada o ser escritos de forma extremadamente rápida.

El inconveniente es que estas celdas compuestas de biestables son más caras de producir, por eso tienen capacidades tan ínfimas de 32, 64, 128-bit, etc. Producir una de estas memorias de capacidades de GB o TB sería un total despropósito en cuando al precio que alcanzarían.

Memoria caché

caché
Memoria caché L1 de datos e instrucciones (flechas azules) y L2 (flechas amarillas) de un AMD K7

En la microarquitectura de la CPU, otra de las memorias más importantes es la memoria caché. También se encuentra cerca de la CPU. Generalmente on-chip, aunque en el pasado hubo modelos off-chip. La idea de esta memoria es la de actuar como un buffer intermedio entre la memoria principal y la CPU, para así reducir el impacto de la latencia, aumentando el rendimiento.

Esta memoria también resulta cara de fabricar, es un tipo de SRAM compuesta por transistores, y que es muy rápida en cuando al acceso. Sus capacidades son algo superiores a los registros, con algunos KB o MB, pero siguen manteniendo una capacidad inferior a otro tipo de memorias más lentas y baratas, como la RAM.

Según la CPU, la memoria caché puede tener varios niveles., mientras menor sea el número que acompaña al nivel, más cerca del núcleo de procesamiento y más rápida suele ser, reduciendo así la latencia. Por eso, siempre se buscará el dato o instrucción en el nivel más bajo, si no está ahí se produce lo que se conoce como fallo de caché y se busca en el nivel inmediatamente superior, y así sucesivamente hasta que se obtiene la información requerida.  Los más habituales son:

  • L0: es una memoria muy pequeña, como un registro de operaciones, con tan solo unos bits, y puede ser accedida directamente por las unidades funcionales. No obstante, este nivel no está presente en muchas CPUs.
  • IL1: es la memoria caché L1 para instrucciones, ya que la L1 suele estar dividida en dos.
  • DL1: es la memoria caché L1 para datos.
  • L2: es el siguiente nivel, de mayor tamaño que la L1 y unificada, con lo que puede almacenar tanto datos como instrucciones. Además, suele ser más lenta que la L1 y estar más distante de la unidad de control.
  • L3: el nivel inmediatamente superior a la L2, también unificada y de mayor tamaño y nuevamente más alejada aún.
  • L4: algunos sistemas también suelen incluir una L4, aunque en algunos casos no está on-chip, sino fuera de él.
  • LLC: Last Level Cache se refiere al último nivel de la caché de un sistema, sea cual sea. Por ejemplo, los que solo llegan a la L2, será la L2 la LLC. Si tienen L3 y no L4, la L3 será el LLC…

No me gustaría olvidar tampoco el TLB (Translate Lookaside Buffer). Este elemento también suele estar dividido en niveles en algunos casos, y separado para datos (DTLB) e instrucciones (ITLB). Esta memoria, administrada por la MMU, también es rápida y está estrechamente relacionada con la caché. Suelen ser unas tablas con unos cuantos KB de información.  Concretamente contiene partes de la tabla de paginación con la relación entre direcciones lógicas y físicas.

Memoria principal

Samsung DDR3 RAM
Samsung DDR3 RAM

La memoria principal o memoria RAM sería el siguiente nivel de la jerarquía. Estaría por encima de la caché, con una velocidad inferior a ésta y con un tamaño mayor. Mientras la caché llegaba a unos cuantos MB, la RAM puede ser de varios GB. Como ya sabrás, es un tipo de memoria SDRAM que mantiene los datos mientras se le está suministrando energía.

La CPU trabaja de forma mucho más rápida que ésta, y para evitar cuellos de botella se han implementado memorias intermedias como las vistas en el apartado anterior. Y es que la CPU debe emplear más ciclos para acceder a la RAM que para acceder a cualquier nivel de caché. Por eso, si está en caché es preferible acceder desde allí.

Esta memoria también es genérica, en ella se puede almacenar cualquier tipo de información. Generalmente tiene cargado el kernel del sistema operativo, que está siempre en ejecución, y también los diferentes procesos o programas en marcha (o algunos de ellos). Tanto el kernel como los programas son software, y todos ellos se componen de instrucciones y datos que procesará la CPU.

Memoria secundaria

memoria flash Samsung
Memoria Flash

Es el siguiente nivel a la primaria. La memoria secundaria hace referencia a los medios de almacenamiento masivo. Una memoria de una capacidad muy superior, pero mucho más lenta en cuanto a los accesos (lectura y escritura) se refiere. Por ejemplo, puede ser el disco duro HDD o SSD, una tarjeta de memoria en algunos casos, etc.

Las capacidades aquí aumentan desde varios cientos de GB hasta TB. Y no solo sirven para almacenar los datos del usuario o los programas instalados, también tienen una parte reservada muy importante, como es la memoria virutal o SWAP que amplia la capacidad de la RAM más allá de sus límites físicos de capacidad. De esta forma, ante los «ojos» del programa, la computadora tendrá memoria infinita.

No hay que confundir la memoria virtual con algo relacionado con una máquina virtual o que no existe. Se trata de una técnica de gestión de la jerarquía de memoria que hace que el sistema operativo y el resto de software dispongan de mayor capacidad que la RAM instalada en el sistema. Para ello, se «unifican» los registros de la CPU, su memoria caché, la memoria RAM y el almacenamiento secundario con un mismo espacio.

El kernel del sistema operativo, mediante unos algoritmos, concretamente el planificador o scheduler, será el encargado de subir los procesos de mayor prioridad desde esta memoria a la RAM y, si fuese necesario, descargar los procesos menos prioritarios desde la RAM a la memoria secundaria.

Dicho de un modo rudo y simple, cuando ejecutas un programa, el kernel lo enviará a la RAM, y de ésta pasará a la CPU para ser procesado. Sin embargo, si dicho programa pierde prioridad y necesita con más urgencia otro para el que no hay espacio en la RAM, se descarga el proceso anterior y se sube el de mayor prioridad para ser procesado.

E/S: entrada y salida

E/S

Aunque parezca extraño para muchos usuarios, el E/S o sistema de entrada y salida de un computador también forma parte de esta jerarquía de la memoria. De hecho, la CPU lo ve como una memoria más. Es decir, un teclado conectado a un equipo, o una impresora son para la CPU memoria. En el primer caso es una memoria que se debe leer (para saber los caracteres que se están tecleando), y en el segundo caso es una memoria que se debe escribir (enviar el archivo a imprimir).

Por tanto, la E/S también tiene un espacio de direcciones reservadas para él. Y, en estos casos también es una memoria algo más lenta, aunque dada la heterogeneidad de los periféricos posibles, no tiene por qué ser necesariamente de mayor capacidad. En la mayoría de los casos no lo es.

Aquí también habría que introducir el DMA (Direct Memory Access). El acceso directo a memoria es una tecnología implementada hace décadas y que permite al sistema acceder (leer y escribir) a la memoria del sistema sin necesidad de que la CPU intervenga en el proceso, para así descargar esta trabajo y agilizar los procesos.

Cuando se habla de una transferencia de DMA estamos refiriéndonos a transferir un bloque de datos de un dispositivo a otro. En lugar de que la CPU inicie la transferencia, éste trabajo lo hace un chip conocido como controlador DMA. Eso sí, aunque la CPU no intervenga, sí que se ocupa el bus del sistema para realizar la transferencia, por lo que si existen necesidades por parte de la CPU de usarlo, se tendrá que regular su uso.

Y con el DMA y todas estas jerarquías de memoria, así como el multiprocesamiento paralelo, se abre una gran problemática, como es mantener la coherencia de memoria. Aunque esto daría para otro gran artículo… Porque ¿qué crees que ocurriría si un dispositivo accede a una dirección de memoria y escribe un dato en dicha dirección antes de que la CPU haga uso de dicho dato? Estaría procesando un dato erróneo, por supuesto, y esto hay que evitarlo a toda costa.

Isaac Romero Torres

Más de una década trabajando en el ámbito de la investigación sobre arquitecturas y microarquitecturas de CPUs, de la electrónica, la lógica digital, de los sistemas operativos Unix (con los que trabajé como asesor para algunas empresas), programación de MCUs, PLCs, hacking, etc.
Los datos de carácter personal que nos facilite mediante este formulario quedarán registrados en un fichero de Miguel Ángel Navas Carrera, con la finalidad de gestionar los comentarios que realizas en este blog. La legitimación se realiza a través del consentimiento del interesado. Si no se acepta no podrás comentar en este blog. Puedes consultar Política de privacidad. Puede ejercitar los derechos de acceso, rectificación, cancelación y oposición en info@profesionalreview.com
Botón volver arriba