¿Puede ejecutar un procesador de clase x86 sin ramless?

Los procesadores x86 modernos tienen al menos 512 K 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 la 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.

Respuestas (3)

Sí tu puedes. Al falsificar lecturas de ubicaciones de memoria física consecutivas (inexistentes), configura las etiquetas en el 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 el conjunto de chips y la configuración del controlador de memoria del conjunto de chips, por lo que puede escribirlo en C, por ejemplo.

Esta práctica se usa ampliamente para CPU de clase integrada y también para manejar cargadores de arranque. Los métodos para convertir la memoria caché en un modo similar a la 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 aún necesita cargar el código de arranque desde algún lugar.

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.

Cuando la CPU sale del reinicio, el caché se apaga. El BIOS es lo que inicialmente configura y borra el caché. Así que no, no puede ejecutarlo sin RAM porque no hay RAM para iniciar la cosa en primer lugar.

¿No podrían inicializarse las primeras instrucciones de la ROM y activar la memoria caché, sin utilizar la RAM?
@Mark Ransom Los procesadores Intel modernos (y muchas otras CPU) usan Serial Flash para almacenar el BIOS. Pero no puede ejecutar código desde flash serial. En cambio, la CPU copia este flash serial a la RAM y luego lo ejecuta.
Ja, mi ignorancia se está mostrando: puedes ver cuántos años han pasado desde que hice diseño de hardware. Entonces, ¿la CPU copia el flash automáticamente antes de que se ejecute la primera instrucción? Eso sería un desagradable problema de gallina/huevo de superar.
@David Estrictamente hablando, no es flash 'serie' sino 'Firmware Hub'. Esto difiere de 'serial' en que transfiere 4 bits a la vez en lugar de 1.
@Matt Jenkins Acabo de diseñar una PCB basada en una CPU Intel D510 Atom y el chipset ICH8M. Utiliza un chip Flash serie estándar. Pero sé de lo que estás hablando y tienes razón en que algunos chips usan la cosa de 4 bits de ancho.
@Mark Ransom Hay muchas CPU/MCU/DSP que se iniciará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 cualquier lugar. La ejecución de un sistema sin RAM podría, en teoría, ser posible si Intel modifica este código para usar el caché en lugar de la RAM externa. Pero dudo que Intel haga esto.
@David Kessner: Sé que rara vez es necesario diagnosticar problemas de bus en un sistema de PC de producción (si la placa base no funciona, es chatarra), pero aún así creo que sería mejor que una CPU se encienda usando solo el interno. caché y permita que el código configure el bus de memoria externa y/o ingrese a un modo de diagnóstico si el bus externo no funciona.

No sé qué tan 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 lo que 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.

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

Los protocolos de llenado y vaciado de cacheline están completamente documentados y son configurables en la mayoría de las CPU, incluida la x86. El contenido de Cacheline no se vacía de forma aleatoria entre instrucciones. Vea mi respuesta sobre cómo lo configura normalmente para que se comporte como RAM lineal.
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. Dado que 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 lo hacía, pero en tal caso, el cargador podría diagnosticar el problema. En algunos otros micros con buses de código externos pero una pequeña cantidad de espacio de código interno, poder ejecutar código en un sistema con un bus roto fue una herramienta de diagnóstico útil.
@ Podría estar equivocado, pero ¿la RAM no es para código binario y para lectura y escritura por parte del procesador?