Können Sie einen RAM-Prozessor der x86-Klasse ohne RAM ausführen?


9

Moderne x86-Prozessoren verfügen über mindestens 512 KB L2-Cache. Es gibt Anwendungen, die vollständig in diese Speichermenge passen würden. Können Sie diese Chips ohne RAM betreiben? Wenn ja, gibt es eine Möglichkeit, die den Zeitverlust beim Zurückschreiben beseitigt, wenn die CPU versucht, die RAM-Kohärenz aufrechtzuerhalten?

Ich habe keine bestimmte Anwendung im Sinn, es ist nur müßige Neugier. Ich bin mir sicher, dass es irgendwo eine Nischenanwendung gibt, in der dies nützlich wäre.

Antworten:


12

Ja, du kannst. Indem Sie Lesevorgänge von aufeinanderfolgenden (nicht vorhandenen) physischen Speicherorten vortäuschen, setzen Sie die Tags im Cache. Dann schalten Sie das weitere Füllen der Cachelines aus und geben Writeback ein, wodurch Lese- / Schreibvorgänge auf den Cache beschränkt werden und dieser sich wie ein normaler RAM verhält.

Einige der Bios-Ersatzprojekte tun dies, weil Sie dann viel mehr Code für das Setup des Chipsatzes und des Chipsatz-Speichercontrollers ausgeben können, sodass Sie ihn beispielsweise in C schreiben können.

Diese Vorgehensweise wird häufig für CPUs der eingebetteten Klasse sowie für die Handhabung von Bootloadern verwendet. Die Methoden, um den Cache in einen RAM-ähnlichen Modus zu verwandeln, variieren etwas.

Eine kurze Einführung auf niedriger Ebene finden Sie in dieser Präsentation.

Beachten Sie, dass Sie, wie andere bereits betont haben, den Boot-Code offensichtlich noch von irgendwoher laden müssen.


Tatsächlich denke ich, dass so ziemlich alle modernen BIOS dies verwenden und so ziemlich alle modernen x86-CPUs aus diesem Grund offizielle Unterstützung dafür haben.
Yuhong Bao

7

Wenn die CPU nicht mehr zurückgesetzt wird, wird der Cache ausgeschaltet. Das BIOS konfiguriert und löscht zunächst den Cache. Also nein, Sie können es nicht ohne RAM ausführen, da es überhaupt kein RAM gibt, um das Ding hochzufahren.


1
Könnten die ersten Anweisungen aus dem ROM den Cache nicht initialisieren und einschalten, ohne RAM zu verwenden?
Mark Ransom

1
@ Mark Ransom Moderne Intel-Prozessoren (und viele andere CPUs) verwenden Serial Flash zum Speichern des BIOS. Es kann jedoch kein Code aus seriellem Flash ausgeführt werden. Stattdessen kopiert die CPU diesen seriellen Flash in den RAM und führt ihn dann aus.

Hah, meine Unwissenheit zeigt sich - Sie können sehen, wie viele Jahre es her ist, seit ich Hardware-Design gemacht habe. Also kopiert die CPU den Flash automatisch, bevor der erste Befehl ausgeführt wird? Das wäre ein böses Henne-Ei-Problem, das es zu überwinden gilt.
Mark Ransom

@ David Genau genommen handelt es sich nicht um "seriellen" Flash, sondern um "Firmware Hub". Dies unterscheidet sich von "seriell" dadurch, dass 4 Bits gleichzeitig anstelle von 1 übertragen werden.
Majenko

1
@ Mark Ransom Es gibt viele CPUs / MCUs / DSPs, die über eine serielle Verbindung (Serial Flash, RS-232, SPI usw.) gestartet werden. Sie alle erreichen dies, indem sie ein kleines ROM in der CPU haben, von dem sie startet, und dieser Code lädt den "echten" Code von überall. Das Ausführen eines Systems ohne RAM könnte theoretisch möglich sein, indem Intel diesen Code so ändert, dass der Cache anstelle des externen RAM verwendet wird. Aber ich bezweifle, dass Intel dies tun wird.

3

Ich weiß nicht, wie genau das ist, aber das sind meine Gedanken:

Ich glaube nicht, dass es eine Möglichkeit gibt, programmgesteuerten Zugriff auf den Cache zu erhalten. Sie können nicht von einem Befehl zum nächsten garantieren, was sich im Cache befindet und wo er sich befindet. Daher können Sie ihn nicht zuverlässig als RAM verwenden, selbst wenn Sie direkt darauf zugreifen könnten.

Sie könnten ein x86 ohne RAM ausführen, aber Sie könnten es nicht dazu bringen, sehr nützlich zu sein. Sie können nur die internen Register zur Datenspeicherung verwenden.


2
Die Cacheline-Füll- und Spülprotokolle sind in den meisten CPUs, einschließlich x86, gründlich dokumentiert und konfigurierbar. Der Inhalt der Cacheline wird zwischen den Anweisungen nicht zufällig gelöscht. Siehe meine Antwort dazu, wie Sie es normalerweise so einrichten, dass es sich als lineares RAM verhält.
Björn Wesen

Ich habe ein Hex Loader-Dienstprogramm für einen 80x86-Klon geschrieben, das ohne RAM ordnungsgemäß funktioniert. IIRC, ich habe einen einstufigen Aufrufstapel mit SP implementiert, um die Rücksprungadresse zu speichern. Da sich das ROM auf demselben Bus wie das RAM befand, war es nicht sehr wahrscheinlich, dass es ein Problem gab, das das ROM funktionieren ließ, wenn das RAM nicht funktionierte, aber in einem solchen Fall konnte der Loader das Problem diagnostizieren. Bei einigen anderen Mikros mit externen Codebussen, aber wenig internem Code-Speicherplatz war es ein nützliches Diagnosewerkzeug, Code auf einem System mit einem defekten Bus ausführen zu können.
Supercat

@Ich könnte mich irren, aber ist RAM nicht für Binärcode und zum Lesen und Schreiben durch den Prozessor?
Victor Mehta
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.