Você pode executar um processador de classe x86 sem ram?

9

Os processadores x86 modernos têm pelo menos 512 K de cache L2. Existem aplicativos que cabem inteiramente nessa quantidade de memória. Você pode executar esses chips sem RAM anexada? Em caso afirmativo, existe uma maneira de fazê-lo que elimine a penalidade de tempo de write-back quando a CPU tenta manter a coerência da RAM?

Não tenho uma aplicação específica em mente, é apenas uma curiosidade ociosa. Estou certo de que em algum lugar existe um aplicativo de nicho em que isso seria útil.

Mark Ransom
fonte

Respostas:

12

Sim você pode. Ao falsificar leituras de locais consecutivos (inexistentes) de memória física, você define as tags no cache. Em seguida, você desativa o preenchimento adicional dos alunos e entra no write-back, limitando assim as leituras / gravações ao cache e ele se comporta como uma RAM normal.

Alguns dos projetos de substituição da BIOS fazem isso porque você pode gastar muito mais código na configuração do controlador de memória do chipset e do chipset, para poder escrevê-lo em C, por exemplo.

Essa prática é amplamente usada para CPUs de classe incorporada e também para manipular gerenciadores de inicialização. Os métodos para transformar o cache em um modo semelhante à RAM variam um pouco.

Para uma breve introdução de baixo nível, você pode conferir esta apresentação.

Observe que, como outros apontaram, você ainda precisa carregar o código de inicialização de algum lugar, obviamente.

Bjorn Wesen
fonte
Na verdade, acho que praticamente todos os BIOS modernos usam isso e praticamente todos os CPUs x86 modernos têm suporte oficial por esse motivo.
Yuhong Bao
7

Quando a CPU sai da redefinição, o cache é desativado. O BIOS é o que inicialmente configura e limpa o cache. Portanto, não, você não pode executá-lo sem RAM, porque não há RAM para inicializar a coisa em primeiro lugar.


fonte
11
As primeiras instruções da ROM não puderam inicializar e ativar o cache sem usar a RAM?
Mark Ransom
11
@ Mark Ransom Os modernos processadores Intel (e muitas outras CPUs) usam o Serial Flash para armazenar o BIOS. Mas ele não pode executar o código do flash serial. Em vez disso, a CPU copia esse flash serial para a RAM e depois o executa.
Hah, minha ignorância está aparecendo - você pode ver quantos anos se passaram desde que eu fiz design de hardware. Então a CPU copia o flash automaticamente antes que a primeira instrução seja executada? Isso seria um problema desagradável de galinha / ovo a ser superado.
Mark Ransom
@ David Estritamente falando, não é o flash 'serial', mas o 'Firmware Hub'. Isso difere de 'serial', na medida em que transfere 4 bits por vez em vez de 1. #
Majenko 07/07/11
11
@ Mark Ransom Existem muitos CPU / MCU / DSP que inicializam através de um link serial (Serial Flash, RS-232, SPI, etc.). Todos eles conseguem isso tendo uma pequena ROM dentro da CPU da qual são inicializados, e esse código carregará o código "real" de qualquer lugar. A execução de um sistema sem RAM poderia, em teoria, ser possível com a Intel modificando esse código para usar o cache em vez da RAM externa. Mas duvido que a Intel faça isso.
3

Não sei o quão preciso isso é, mas estes são meus pensamentos:

Eu não acho que exista uma maneira de obter acesso programático ao cache. Você não pode garantir de uma instrução para a seguinte o que estaria no cache e onde ele estaria localizado; portanto, você não pode usá-lo de forma confiável como RAM, mesmo que possa acessá-lo diretamente.

Você poderia executar um x86 sem RAM, mas não conseguiria fazê-lo muito útil. Você estaria restrito a usar apenas os registros internos para armazenamento de dados.

Majenko
fonte
2
Os protocolos de preenchimento e liberação da linha de cache são completamente documentados e configuráveis ​​na maioria das CPUs, incluindo o x86. O conteúdo do cache de linha não é liberado aleatoriamente entre as instruções. Veja minha resposta sobre como você costuma configurá-lo para se comportar como RAM linear.
Bjorn Wesen
Eu escrevi um utilitário de carregador hexadecimal para um clone 80x86 que funcionaria corretamente sem nenhuma RAM; IIRC, implementei uma pilha de chamadas de um nível usando SP para manter o endereço de retorno. Como a ROM estava no mesmo barramento que a RAM, não era muito provável que houvesse um problema que deixasse a ROM funcionar quando a RAM não funcionasse, mas, nesse caso, o carregador poderia diagnosticar o problema. Em alguns outros micros com barramentos de código externos, mas com uma pequena quantidade de espaço interno, a capacidade de executar código em um sistema com barramentos quebrados era uma ferramenta de diagnóstico útil.
Supercat
@Eu posso estar enganado, mas a RAM não é um código binário e uma leitura e gravação do processador?
Victor Mehta