¿Es posible ejecutar una computadora con solo memoria caché ya que funciona como RAM?

De hecho, he enviado un producto que contenía una computadora (una 6502) que ejecutaba un programa sin RAM. Simplemente tenía una EPROM de 2kB para el programa y solo usaba los tres bytes de los registros del procesador.

Para aquellos que estén interesados, reemplazó algo que Digital llamó un “terminal robusto” que era efectivamente dos VT100 conectados a un solo puerto serie. Podríamos reemplazar los dos terminales por dos individuales, y de la misma manera podríamos usar dos puertos de comunicación en la computadora, pero necesitamos algo para multiplexar sus datos en un solo cable. (Sí, hubiera sido un gran dolor reemplazar eso. Esto fue en una planta de automóviles en funcionamiento; esa línea de ensamblaje se cerró una o dos veces al año).

Creamos dos cajas idénticas que usaban un protocolo a medida para codificar en qué línea enviar el tráfico y organizamos las velocidades en baudios para que pudiéramos estar absolutamente seguros de que nunca, alguna vez habría ningún almacenamiento intermedio. El protocolo era tan simple que cada carácter contenía una indicación de en qué línea debería enviarse. No se requirió RAM. Una vez que nos dimos cuenta de que lo optimizamos un poco más y retiramos ceremoniosamente el chip RAM antes de enviarlo.

Funcionó de fábrica y nunca tuvimos ninguna queja o problemas de soporte.

Además de trucos como el de Iwan Nadapdap, existe un tipo de arquitectura de computadora llamada Cache Only Memory Architecture (COMA).

En un sistema COMA, toda su memoria es caché, y la dirección de cada ubicación se mueve según la caché a la que se mueve. Las tablas del directorio de hardware realizan un seguimiento de dónde ha migrado todo. En cierto sentido, es el sistema de memoria equivalente al enrutamiento de teléfonos celulares: al igual que la red celular descubre cómo dirigirle una llamada, el sistema de memoria COMA sabe cómo consultar sus directorios para averiguar qué caché contiene cada ubicación de dirección.

O, para un giro diferente, la arquitectura Mill tiene una memoria caché puramente virtual, que se lee como cero en una falla, y solo envía los datos a la memoria externa cuando necesita hacer espacio en la memoria caché. Siempre que pueda ingresar un programa la primera vez (¿ROM?), Teóricamente puede ejecutarse por completo dentro de su caché sin enviar un acceso externo, siempre que no active un desalojo.

En cuanto a los sistemas de memoria más tradicionales, he visto trucos similares a los de Iwan en otros procesadores tradicionales. Algunas CPU incluso le permiten bloquear líneas de caché, por lo que, en principio, puede cargar una serie de direcciones ficticias y bloquearlas en la caché. Mientras permanezca dentro de esas direcciones, no podrá notar la diferencia. Los controladores de caché de procesador incorporado tienen más probabilidades de tener la funcionalidad necesaria. (O más bien, es más probable que exponga la funcionalidad necesaria).

Tenga en cuenta que para todo esto, aún necesita una forma de introducir un programa en la máquina, como una ROM de arranque, un cargador JTAG u otro truco.

Sí, y lo he hecho antes.

Cuando trabajaba en Intel, uno de los nuevos procesadores de diseño que acababa de salir de la fábrica no podía acceder a ninguna memoria.

Estaba preparado para esta situación y construí un marco de programación C especial que funcionará solo usando una memoria caché. No puedo dar más detalles sobre cómo hacerlo, ya que puede exponer algunos secretos de Intel.

En el lado de la programación, en realidad era un montón de memoria para jugar. En realidad, puede hacer muchas cosas, escribir software complejo dentro de 512kilobytes.

El primer software que ejecuté fue encontrar el último número de los primeros 10 mil números primos y colocarlo en una ubicación de memoria específica (una pantalla virtual). Después de unas horas, todo lo que necesito hacer es comparar el número que obtuve del resultado de la CPU recientemente diseñada con el resultado de mi computadora portátil. Pude informar al equipo nervioso, que había gastado millones de horas hombre en el proyecto, que partes de la CPU habían sido probadas por miles de millones de ciclos de reloj y ¡dieron el resultado correcto!

Probablemente se pueda escribir un sofisticado programa de ajedrez en este entorno.

En general, el código no debe acceder a ninguna memoria fuera de la memoria caché que se haya marcado como estado modificado / exclusivo. En este caso, cualquier ciclo de CPU no generará ninguna transacción al controlador de memoria.

En aplicaciones más prácticas, mantener el código y los datos dentro de un rango de caché es en realidad una técnica de optimización de programación común para acelerar cierto algoritmo. Es más rápido ya que acceder a la memoria caché es mucho más rápido que la memoria maim. Por supuesto, si ejecuta el algoritmo en Microsoft Windows o en cualquier otro sistema operativo típico, necesitará memoria principal.

Entonces sí, es posible, pero requiere un poco de salsa secreta de Intel. No estoy seguro de si otro fabricante de CPU, AMD tiene esa característica secreta.

Si y no. Por supuesto, hay chips que tienen su RAM en chip y no tienen memoria externa.

Pero un caché verdadero se asigna a la RAM, generalmente de forma asociativa o, a veces, directamente. Para “usar caché como RAM”, debe apagar el controlador de “almacenamiento en caché”. Cuando haces eso, ya no es realmente caché … Es solo RAM.

Me encanta la semántica desgarradora.

No.

Y la razón es porque no “funciona como RAM”.

la memoria caché se usa debido a la falta de coincidencia de velocidad entre la CPU y la memoria principal.

Proporciona un búfer de alta velocidad para que coincida con la CPU e interacciones de baja velocidad con la memoria principal.

Para lograr eso, la memoria caché no carga un byte de memoria … carga bloques de memoria (el tamaño depende de la arquitectura, más grande para procesadores más rápidos). pero solo escribirá lo que necesita cuando se modifiquen los datos. Esto también deja el bus de memoria inactivo por más tiempo permitiendo que los periféricos carguen datos de dispositivos externos sin interferir con la CPU.