¿Puede una CPU funcionar con nada más que una fuente de alimentación y una ROM, usando solo el caché interno como RAM?

¿Puede una CPU (como la Intel i3/i5/i7/Xeon) con caché de RAM en el chip usarla como su única RAM funcional, sin ningún banco de memoria externo conectado?

¿ O debe haber RAM externa y no se puede acceder a la memoria caché o usarla sola?

Las CPU modernas de escritorio/servidor a menudo tienen más RAM de caché interna que la que tenían muchas computadoras de la década de 1990 en la memoria del sistema completo, por lo que debería haber suficiente para ejecutar código simple.

Las CPU de antes de que existiera el caché, como el 6502, no podrían hacer nada, ya que la RAM interna de la CPU solo ascendía a unos pocos bytes para el contador de direcciones y los acumuladores.

No se trata de ejecutar ningún tipo de sistema operativo moderno, sino de ejecutar un código simple programado en una ROM personalizada o ingresado manualmente con un teclado de entrada hexadecimal.

Depende completamente de la CPU y de lo que quiere decir exactamente con "caché", ya que algunas CPU tienen su RAM incorporada y no necesitan chips externos.
Bueno, si puedes reutilizar el caché como ram, entonces sí. Y hay CPUs que pueden hacer eso. O la CPU tiene ram incorporada, y muchos de ellos la tienen, por ejemplo, la familia ARM la usa para ejecutar las primeras etapas de los cargadores de arranque.
básicamente, si incluye memoria direccionable en el propio procesador, construye lo que llamamos un microcontrolador. Estos existen.
@MarcusMüller: Su comentario definitivamente es lo suficientemente importante como para que alguien escriba una respuesta más detallada. ¿Quizás te gustaría?
¿Quién dice que necesitas algo de RAM?
Depende de cómo defina "función". Apuesto a que un i7 es perfectamente capaz de producir calor con solo una batería conectada.
Hay una serie de cosas que puede hacer con solo unos pocos registros y sin RAM adicional. Por ejemplo, un generador de funciones.
:-) Me recuerda a La caza del Octubre Rojo. "¿Se puede lanzar un ICBM horizontalmente?" ... "¡Claro! ¿Por qué querrías hacerlo?" Agradecimiento a @MarcusMüller por señalar que usar un uProcessor completo de esta manera es una exageración.
se necesita una buena cantidad de código para que dram esté listo y funcionando, y aunque es posible hacerlo solo con flash y registros internos del procesador, lo ideal sería diseñar un procesador con un poco de ram para arrancar, algo sensato. Pero seguro que no necesita RAM para ejecutar un procesador como se mencionó anteriormente.
encontrará que estas partes necesitan más que una fuente de alimentación, a veces necesitan una secuencia de cosas para que sucedan los diferentes rieles que aparecen en un momento determinado, generan una buena retroalimentación antes de que pueda obtener otra fuente, particularmente a las cosas de fundición de Intel le gustan muchos rieles. también pueden tener rieles de voltaje variable que esa lógica en el chip usa para sintonizar dinámicamente un suministro central. por lo tanto, su "fuente de alimentación" agitando la mano no es solo un par de pinzas de cocodrilo en un suministro de banco. sin mencionar el zócalo necesario o soldar las bolas a una placa para probar esto.

Respuestas (4)

Vea esta cuenta extremadamente detallada de la secuencia de arranque de la PC: http://www.drdobbs.com/parallel/booting-an-intel-architecture-system-par/232300699?pgno=2

Dado que no hay DRAM disponible en este momento, el código opera inicialmente en un entorno sin pila. La mayoría de los procesadores modernos tienen una memoria caché interna que se puede configurar como RAM para proporcionar una pila de software. Los desarrolladores deben escribir un código extremadamente estricto cuando usan esta función de caché como RAM porque una expulsión sería inaceptable para el sistema en este punto de la secuencia de arranque; no hay memoria para mantener la coherencia. Es por eso que los procesadores funcionan en "Modo sin desalojar" (NEM) en este punto del proceso de arranque, cuando funcionan con caché como RAM. En NEM, una pérdida de línea de caché en el procesador no provocará un desalojo. Desarrollar código con una pila de software disponible es mucho más fácil, y el código de inicialización a menudo realiza la configuración mínima para usar una pila incluso antes de la inicialización de DRAM.

Puede observar esto ejecutando una PC sin RAM: reproducirá una serie de pitidos. El programa que los reproduce se ejecuta desde la BIOS Flash ROM.

También he visto este comportamiento en algunos procesadores ARM. Habrá registros de configuración dentro del SoC que le permitirán usar el caché como RAM al principio de la secuencia de arranque, para ejecutar un programa que encuentre, enumere y configure la DRAM.

Más detalles sobre cómo funciona el modo "cache-as-ram" (CAR) de x86 , en una respuesta que lo presenta como un caso de uso para INVD(al salir del modo CAR, invalidar el caché en lugar de tener datos inútiles escritos en la memoria, potencialmente sobre algo valioso).
¿Qué hay de malo en desalojar cuando DRAM no está disponible? ¿El problema no es leer en lugar de escribir en la RAM?
@user541686: El desalojo en sí no es un problema inmediato, pero si esa línea de caché no era solo un búfer tmp, probablemente querrá leerlo nuevamente más tarde. Si fue desalojado, los datos se han ido. Si el primer acceso después del desalojo fue una escritura (por ejemplo, para usarlo como un búfer tmp nuevamente), eso podría estar bien (en un caso hipotético donde CAR sin el modo sin relleno fuera posible, por lo que podrían ocurrir asignaciones). Pero en lugar de hardware teniendo controles por línea de caché sobre si podemos o no desalojar (lo que costaría bits solo para admitir este caso especial), hay un control global.

Generalmente, la memoria caché no es direccionable. Un programa no puede almacenar o recuperar datos intencionalmente de él.

+1 Esta es una respuesta muy astuta. Las líneas de caché se cargan y retiran a voluntad de los accesos direccionables de la memoria principal, de forma casi aleatoria.
Sí, es por eso que requiere un modo especial (como en la respuesta de pjc) o algún tipo de truco especial. Otra opción (además de la respuesta aceptada) podría ser hacer que el sistema piense que tiene algo de DRAM, pero la memoria real escribe simplemente descarta los datos y las lecturas producen todos ceros (o datos reales de una ROM para alguna región de direcciones). Siempre que todas las cargas lleguen a la memoria caché, el sistema se comportará correctamente. IDK suficiente sobre cómo se inicia x86 para saber si es posible ingresar al modo largo de 64 bits sin necesidad de vaciar la memoria caché real.
Sin embargo, las CPU Skylake con caché eDRAM en el paquete lo usan como un caché del lado de la memoria (entre el controlador de memoria y todo lo demás, a diferencia de Broadwell), por lo que incluso puede almacenar en caché los accesos DMA desde dispositivos del sistema que no son CPU o cargas/ almacena en regiones de memoria "no almacenables en caché" (que omiten L1/L2/L3).
@PeterCordes Sin embargo, la respuesta no es "no" solo porque se necesita un modo especial; la pregunta es si existe el modo especial.
La pregunta es: ¿qué sucede si usa el caché de todos modos y se asegura de que nunca se pierda o se vacíe? Se vuelve direccionable en el momento en que algo se escribe en una dirección en RAM inexistente, ¿no? La escritura real se deja caer en el piso, pero la lectura se sirve desde el caché de todos modos.
Vaya, eso es similar a lo que sugirió @Peter Cordes. Sospecho que la lectura le daría estático, o en un bus multiplexado, el estado "almacenado en caché" capacitivamente de las líneas de dirección (es por eso que la RAM faltante en los sistemas antiguos parecía estar llena de tablas ASCII :))
@rackandboneman: Estaba pensando que podría conectar todas las líneas de datos DRAM a tierra o algo así para que se leyeran como cero. Pero sospecho que no es tan simple, y alguna línea de señal podría tener que pasar de baja a alta o viceversa antes de que un controlador de memoria DDR4 piense que la DRAM ha proporcionado datos. ¿Y la codificación del bus utiliza un codificador? Dado que probablemente conectaría la ROM al conjunto de chips y programaría una región de direcciones físicas para mapear allí en lugar de DRAM, no debería importar. Aunque tal vez podría conectar una ROM al bus DDR4 y tener todas las direcciones alias en la ROM...
Probablemente tendría que "conectarlos a tierra" a través de algún tipo de extracción, dado que aún intentará escribir datos en un punto muerto (y probablemente cree una gran cantidad de desperdicio de energía y estrés térmico de esa manera).
@PeterCordes "No sé lo suficiente sobre cómo arranca x86 para saber si es posible ..." - bueno, ¿qué esperanza tenemos los mortales entonces?
@MartinBonner: mire wiki.osdev.org , y tal vez el código fuente de un BIOS de código abierto como coreboot.org si tiene curiosidad: sé mucho sobre cómo funciona x86 una vez que está en funcionamiento en modo largo o 32 Modo protegido de bits, con el sistema programado para asignar la DRAM a algunos rangos de espacio de direcciones físicas, y así sucesivamente. Tengo poco interés en los detalles para llegar allí, especialmente en lo que hace el BIOS antes de cargar el sector de arranque o EFI. Sé algo sobre cómo un kernel permite la paginación y cambia del modo real de 16 bits al modo protegido o largo...

Si bien esto no aborda directamente las familias de procesadores especificadas en la pregunta, el siguiente esquema funcionaría en los procesadores x86 anteriores, por lo que sí, es posible operar sin RAM ni caché, aunque este enfoque requiere algunas habilidades de programación creativa.

En la década de 1980 encontré un diseño para un receptor de radio que descodificaba las señales horarias de MSF emitidas en el Reino Unido. Este diseño usaba un procesador Z80 y solo tenía una ROM para el almacenamiento del programa. Todo el procesamiento y almacenamiento de datos se realizó utilizando los registros internos dentro del procesador. Obviamente, esto significaba que no podía haber llamadas a subrutinas ya que había memoria disponible para almacenar la pila.

En ese entonces, el costo de la memoria RAM era alto y, como se trataba de un proyecto de pasatiempo, era importante mantener los costos bajos, además de ser un ejercicio académico interesante. Esto también fue antes de los días de los microcontroladores ampliamente disponibles (un 8751 con eprom costaba más de £ 100 IIRC).

Restringirse a los datos que se pueden mantener en los registros realmente limita las funciones útiles que puede realizar. Creo que la pregunta era más sobre la memoria caché en los procesadores modernos.
Por supuesto, no hace falta decir que no usar RAM limita la funcionalidad posible. La aplicación citada muestra cuánto es posible con recursos de almacenamiento de datos muy limitados, una interfaz de radio y una pantalla LCD.

Por lo general, una CPU requerirá un reloj externo. Pero con eso, sí se puede.

Sería apropiado explicar por qué y responder detalladamente a la pregunta de los usuarios. Esta respuesta está en el lado débil.