¿Se puede ejecutar un procesador de clase x86 sin ram?

9

Los procesadores x86 modernos tienen al menos 512K de caché L2. Hay aplicaciones que encajarían completamente en esta cantidad de memoria. ¿Puedes ejecutar estos chips sin RAM conectada? Si es así, ¿hay alguna manera de hacerlo que elimine la penalización de tiempo de reescritura cuando la CPU intenta mantener la coherencia de RAM?

No tengo una aplicación específica en mente, es solo curiosidad ociosa. Sin embargo, estoy seguro de que en algún lugar hay una aplicación de nicho donde esto sería útil.

Mark Ransom
fuente

Respuestas:

12

Sí tu puedes. Al falsificar lecturas de ubicaciones de memoria física consecutivas (no existentes), establece las etiquetas en la memoria caché. Luego apaga el llenado adicional de las líneas de caché e ingresa la reescritura, limitando así las lecturas / escrituras al caché y se comportará como una RAM normal.

Algunos de los proyectos de reemplazo de BIOS hacen esto porque entonces puede gastar mucho más código en la configuración del chipset y del controlador de memoria del chipset, por lo que puede escribirlo en C, por ejemplo.

Esta práctica se usa ampliamente para CPU de clase integrada, así como para manejar cargadores de arranque. Los métodos para convertir el caché en un modo tipo RAM varían un poco.

Para una breve introducción de bajo nivel, puede consultar esta presentación.

Tenga en cuenta que, como otros han señalado, obviamente todavía necesita cargar el código de arranque desde algún lugar.

Bjorn Wesen
fuente
De hecho, creo que casi todas las BIOS modernas usan esto y casi todas las CPU x86 modernas tienen soporte oficial por esa razón.
Yuhong Bao
7

Cuando la CPU sale de reinicio, el caché se apaga. El BIOS es lo que inicialmente configura y borra el caché. Entonces, no, no puedes ejecutarlo sin RAM porque no hay RAM para arrancar la cosa en primer lugar.


fuente
1
¿No podrían las primeras instrucciones de ROM inicializar y encender el caché, sin usar RAM?
Mark Ransom
1
@ Mark Ransom Los modernos procesadores Intel (y muchas otras CPU) usan Serial Flash para almacenar el BIOS. Pero no puede ejecutar el código del flash serie. En cambio, la CPU copia este flash serie en la RAM y luego lo ejecuta.
Hah, mi ignorancia está demostrando: puedes ver cuántos años han pasado desde que hice el diseño del hardware. ¿Entonces la CPU copia el flash automáticamente antes de que se ejecute la primera instrucción? Eso sería un problema desagradable de pollo / huevo para superar.
Mark Ransom
@David Estrictamente hablando, no es un flash 'serial' sino 'Firmware Hub'. Esto difiere de 'serial' en que transfiere 4 bits a la vez en lugar de 1.
Majenko
1
@ Mark Ransom Hay muchas CPU / MCU / DSP que arrancarán a través de un enlace en serie (Serial Flash, RS-232, SPI, etc.). Todos logran esto al tener una pequeña ROM dentro de la CPU desde la que arranca, y ese código cargará el código "real" desde donde sea. Ejecutar un sistema sin RAM podría, en teoría, ser posible haciendo que Intel modifique este código para usar el caché en lugar de la RAM externa. Pero dudo que Intel haga esto.
3

No sé cuán preciso es esto, pero estos son mis pensamientos:

No creo que haya ninguna forma de obtener acceso programático al caché. No puede garantizar de una instrucción a la siguiente qué estaría en el caché y dónde se ubicaría, por lo que no puede usarlo de manera confiable como RAM, incluso si pudiera acceder a él directamente.

Podría ejecutar un x86 sin RAM, pero no sería capaz de hacer que sea muy útil. Estaría restringido a usar únicamente los registros internos para el almacenamiento de datos.

Majenko
fuente
2
Los protocolos de llenado y vaciado de la línea de caché están completamente documentados y configurables en la mayoría de las CPU, incluida la x86. El contenido de la caché no se vacía de forma aleatoria entre las instrucciones. Vea mi respuesta sobre cómo normalmente lo configura para comportarse como RAM lineal.
Bjorn Wesen
He escrito una utilidad de cargador hexadecimal para un clon de 80x86 que funcionaría correctamente sin RAM; IIRC, implementé una pila de llamadas de un nivel usando SP para mantener la dirección de retorno. Como la ROM estaba en el mismo bus que la RAM, no era muy probable que hubiera un problema que permitiera que la ROM funcionara cuando la RAM no funcionaba, pero en tal caso el cargador podría diagnosticar el problema. En algunos otros micros con buses de código externo pero una pequeña cantidad de espacio de código interno, poder ejecutar código en un sistema con un bus roto era una herramienta de diagnóstico útil.
supercat
@ Podría estar equivocado, pero ¿la RAM no es para código binario y para lectura y escritura por parte del procesador?
Victor Mehta