Riesci a eseguire un processore di classe x86 senza ram?


9

I moderni processori x86 hanno almeno 512 KB di cache L2. Ci sono applicazioni che si adatteranno interamente a questa quantità di memoria. È possibile eseguire questi chip senza RAM collegata? In tal caso, c'è un modo per farlo che elimina la penalità di timing di writeback quando la CPU tenta di mantenere la coerenza della RAM?

Non ho in mente un'applicazione specifica, è solo curiosità inattiva. Sono certo che da qualche parte esiste un'applicazione di nicchia in cui questo sarebbe utile.

Risposte:


12

Si, puoi. Fingendo letture da posizioni di memoria fisica consecutive (inesistenti), si impostano i tag nella cache. Quindi si disattiva l'ulteriore riempimento delle cache e si inserisce il writeback, limitando così le letture / scritture alla cache e si comporterà come una normale RAM.

Alcuni dei progetti di sostituzione del BIOS lo fanno perché in questo modo è possibile spendere molto più codice sulla configurazione del controller di memoria del chipset e del chipset, quindi è possibile scriverlo in C per esempio.

Questa pratica è ampiamente utilizzata per CPU di classe embedded e anche per la gestione di bootloader. I metodi per trasformare la cache in una modalità simile alla RAM variano leggermente.

Per una breve introduzione di basso livello puoi dare un'occhiata a questa presentazione.

Si noti che, come altri hanno sottolineato, è ancora necessario caricare il codice di avvio da qualche parte ovviamente.


In effetti, penso che quasi tutti i BIOS moderni lo utilizzino e praticamente tutte le moderne CPU x86 hanno il supporto ufficiale per questo motivo.
Yuhong Bao,

7

Quando la CPU esce dal reset, la cache viene disattivata. Il BIOS è ciò che inizialmente configura e svuota la cache. Quindi no, non puoi eseguirlo senza RAM perché non c'è RAM per avviare la cosa in primo luogo.


1
Le prime istruzioni dalla ROM non potrebbero inizializzare e attivare la cache senza usare la RAM?
Mark Ransom,

1
@Mark Ransom I moderni processori Intel (e molte altre CPU) utilizzano Flash seriale per memorizzare il BIOS. Ma non può eseguire il codice dal flash seriale. Invece la CPU copia questo flash seriale su RAM e quindi lo esegue.

Hah, la mia ignoranza sta mostrando - puoi vedere quanti anni sono passati da quando ho fatto la progettazione hardware. Quindi la CPU copia automaticamente il flash prima dell'esecuzione della prima istruzione? Sarebbe un brutto problema di pollo / uova da superare.
Mark Ransom,

@David A rigor di termini non è un flash "seriale" ma "Hub del firmware". Ciò differisce da "seriale" in quanto trasferisce 4 bit alla volta anziché 1.
Majenko

1
@Mark Ransom Ci sono molte CPU / MCU / DSP che si avviano tramite un collegamento seriale (Serial Flash, RS-232, SPI, ecc.). Tutti lo fanno avendo una piccola ROM all'interno della CPU da cui si avvia, e quel codice caricherà il codice "reale" da qualsiasi luogo. L'esecuzione di un sistema senza RAM potrebbe, in teoria, essere possibile facendo in modo che Intel modifichi questo codice per utilizzare la cache anziché la RAM esterna. Ma dubito che Intel lo farà.

3

Non so quanto sia preciso, ma questi sono i miei pensieri:

Non credo che ci sia modo di ottenere l'accesso programmatico alla cache. Non è possibile garantire da un'istruzione all'altra cosa si troverebbe nella cache e dove si troverebbe, quindi non è possibile utilizzarlo in modo affidabile come RAM anche se è possibile accedervi direttamente.

Potresti eseguire un x86 senza RAM, ma non saresti in grado di farlo molto utile. Saresti limitato all'utilizzo puramente dei registri interni per l'archiviazione dei dati.


2
I protocolli di riempimento e svuotamento della cache sono accuratamente documentati e configurabili nella maggior parte delle CPU, incluso x86. Il contenuto della cache non viene scaricato in modo casuale tra le istruzioni. Vedi la mia risposta su come in genere viene impostato per comportarsi come RAM lineare.
Bjorn Wesen,

Ho scritto un'utilità di caricamento esadecimale per un clone 80x86 che funzionerebbe correttamente senza RAM; IIRC, ho implementato uno stack di chiamate a un livello usando SP per contenere l'indirizzo di ritorno. Poiché la ROM si trovava sullo stesso bus della RAM, non era terribilmente probabile che ci fosse un problema che avrebbe lasciato funzionare la ROM quando la RAM non funzionava, ma in tal caso il caricatore poteva diagnosticare il problema. Su alcuni altri micro con bus di codice esterni, ma con una piccola quantità di spazio di codice interno, essere in grado di eseguire il codice su un sistema con un bus rotto era un utile strumento diagnostico.
supercat

@ Potrei sbagliarmi, ma la RAM non è per il codice binario e per la lettura e la scrittura da parte del processore?
Victor Mehta,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.