Kann eine CPU nur mit einem Netzteil und einem ROM arbeiten und nur den internen Cache als RAM verwenden?

61

Kann eine CPU (wie der Intel i3 / i5 / i7 / Xeon) mit On-Chip-Cache-RAM diesen als einzigen funktionsfähigen RAM verwenden, ohne dass externe Speicherbänke angeschlossen sind?

Oder muss externes RAM vorhanden sein und der Cache kann nicht alleine verwendet werden?

Moderne Desktop- / Server-CPUs verfügen häufig über mehr internen Cache-RAM als viele Computer der 90er Jahre im gesamten Systemspeicher. Daher sollte dort genügend Platz für die Ausführung von einfachem Code vorhanden sein.

CPUs aus der Zeit vor dem Cache, wie der 6502, wären nicht in der Lage, irgendetwas zu tun, da der interne CPU-RAM nur wenige Bytes für den Adressenzähler und die Akkumulatoren betrug.

Hierbei handelt es sich nicht um die Ausführung moderner Betriebssysteme, sondern um die Ausführung von einfachem Code, der in einem benutzerdefinierten ROM programmiert oder über eine Hex-Eingabetastatur von Hand eingegeben wurde.

Dale Mahalko
quelle
1
Das hängt ganz von der CPU ab und was genau Sie unter "Cache" verstehen, da einige CPUs ihren RAM eingebaut haben und keine externen Chips benötigen.
PlasmaHH
42
Wenn Sie adressierbaren Speicher in den Prozessor selbst einbinden, bauen Sie im Grunde einen sogenannten Mikrocontroller. Diese existieren.
Marcus Müller
1
Wer sagt, dass Sie überhaupt RAM benötigen?
Chris Stratton
1
Kommt darauf an, wie Sie "Funktion" definieren. Ich wette, ein i7 ist perfekt in der Lage, Wärme zu erzeugen, wenn nur ein Akku angeschlossen ist.
Dmitry Grigoryev
2
Es gibt eine Reihe von Möglichkeiten, die Sie mit nur wenigen Registern und ohne zusätzlichen Arbeitsspeicher ausführen können. Zum Beispiel ein Funktionsgenerator.
David Schwartz

Antworten:

67

Sehen Sie sich diese äußerst detaillierte Beschreibung der PC-Startsequenz an: http://www.drdobbs.com/parallel/booting-an-intel-architecture-system-par/232300699?pgno=2

Da zu diesem Zeitpunkt kein DRAM verfügbar ist, wird Code zunächst in einer stapellosen Umgebung ausgeführt. Die meisten modernen Prozessoren verfügen über einen internen Cache, der als RAM konfiguriert werden kann, um einen Software-Stack bereitzustellen. Entwickler müssen extrem engen Code schreiben, wenn sie diese Cache-as-RAM-Funktion verwenden, da eine Räumung zu diesem Zeitpunkt in der Startsequenz für das System nicht akzeptabel wäre. Es gibt kein Gedächtnis, um die Kohärenz aufrechtzuerhalten. Aus diesem Grund arbeiten Prozessoren zu diesem Zeitpunkt des Startvorgangs im "No Evict Mode" (NEM), wenn sie auf Cache-as-RAM-Basis arbeiten. In NEM verursacht ein Cache-Zeilen-Fehler im Prozessor keine Räumung. Das Entwickeln von Code mit einem verfügbaren Softwarestapel ist viel einfacher, und der Initialisierungscode führt häufig die minimale Einrichtung durch, um einen Stapel zu verwenden, sogar vor der DRAM-Initialisierung.

Sie können dies beobachten, indem Sie einen PC ohne RAM betreiben: Er gibt eine Reihe von Signaltönen aus. Das Programm, das diese wiedergibt, wird vom BIOS-Flash-ROM ausgeführt.

Ich habe dieses Verhalten auch bei einigen ARM-Prozessoren beobachtet. Im SoC befinden sich Konfigurationsregister, mit denen Sie den Cache zu einem frühen Zeitpunkt in der Startsequenz als RAM verwenden können, um ein Programm auszuführen, das den DRAM findet, auflistet und konfiguriert.

pjc50
quelle
1
Lassen Sie uns diese Diskussion im Chat fortsetzen .
Vaxquis
2
Weitere Informationen zur Funktionsweise des "Cache-as-RAM" -Modus (CAR) von x86 finden Sie in einer Antwort, die als Anwendungsfall für das INVDDeaktivieren des Caches (beim Verlassen des CAR-Modus) dient, anstatt unnötige Daten in den Speicher zu schreiben, die möglicherweise überschrieben werden etwas wertvolles).
Peter Cordes
Was ist falsch an der Räumung, wenn DRAM nicht verfügbar ist? Ist das Problem nicht eher das Lesen als das Schreiben in den Arbeitsspeicher?
Mehrdad
14

Im Allgemeinen ist der Cache-Speicher nicht adressierbar. Ein Programm kann keine Daten absichtlich speichern oder von dort abrufen.

Lior Bilia
quelle
2
+1 Dies ist eine sehr kluge Antwort. Cachelines werden nach Belieben von adressierbaren Zugriffen aus dem Hauptspeicher in nahezu zufälliger Weise geladen und aus dem Speicher entfernt.
Ale..chenski
17
Ja, das ist der Grund, warum es einen speziellen Modus (wie in der Antwort von pjc) oder eine Art besonderen Trick erfordert. Eine andere Option (neben der akzeptierten Antwort) könnte sein, das System glauben zu lassen , es habe DRAM, aber tatsächliche Speicherschreibvorgänge werfen nur die Daten weg und Lesevorgänge erzeugen nur Nullen (oder tatsächliche Daten aus einem ROM für einen bestimmten Adressbereich). Solange sich alle Lasten im Cache befinden, verhält sich das System korrekt. IDK genug darüber, wie x86 bootet, um zu wissen, ob es möglich ist, in den 64-Bit-Modus zu gelangen, ohne dass echte Cache-Flushs erforderlich sind.
Peter Cordes
3
Jedoch mit Skylake CPUs in-package eDRAM Cache es als Cache - Speicher-Seite verwenden (zwischen dem Speicher - Controller und alles andere, anders als in Broadwell), so kann es sogar zwischenzuspeichern DMA - Zugriffe aus Nicht-CPU - System Vorrichtungen oder CPU Lasten / Speichern in "nicht zwischenspeicherbaren" Speicherbereichen (die L1 / L2 / L3 umgehen).
Peter Cordes
3
@PeterCordes Die Antwort ist jedoch nicht "nein", nur weil ein spezieller Modus benötigt wird - die Frage ist dann, ob der spezielle Modus existiert.
user253751
1
Die Frage ist: Was passiert, wenn Sie den Cache trotzdem verwenden und sicherstellen, dass er niemals verfehlt oder gelöscht wird? Er wird in dem Moment adressierbar, in dem etwas in eine Adresse in einem nicht vorhandenen RAM geschrieben wird, nicht wahr? Der eigentliche Schreibvorgang wird auf den Boden fallen gelassen, aber der Lesevorgang wird trotzdem aus dem Cache ausgeführt.
Rackandboneman
9

Obwohl dies die in der Frage angegebenen Prozessorfamilien nicht direkt anspricht, funktioniert das folgende Schema auf den früheren x86-Prozessoren. Ja, es ist möglich, ohne RAM oder Cache zu arbeiten, obwohl dieser Ansatz einige kreative Programmierkenntnisse erfordert.

In den 1980er Jahren stieß ich auf einen Entwurf für einen Radioempfänger, der die in Großbritannien ausgestrahlten MSF-Zeitsignale entschlüsselte . Dieses Design verwendete einen Z80-Prozessor und hatte nur ein ROM für den Programmspeicher. Die gesamte Verarbeitung und Datenspeicherung wurde unter Verwendung der internen Register im Prozessor durchgeführt. Dies bedeutete offensichtlich, dass es keine Unterprogrammaufrufe geben konnte, da Speicher verfügbar war, um den Stapel zu halten.

Die Kosten für RAM waren damals hoch und da es sich um ein Hobbyprojekt handelte, war es wichtig, die Kosten niedrig zu halten, abgesehen davon, dass es sich um eine interessante akademische Übung handelte. Dies war auch vor den Tagen der weit verbreiteten Mikrocontroller (ein 8751 mit eprom kostete über £ 100 IIRC).

uɐɪ
quelle
Die Beschränkung auf die Daten, die in Registern gespeichert werden können, schränkt die nützlichen Funktionen ein, die Sie ausführen können. Ich denke, die Frage war mehr über den Cache-Speicher in modernen Prozessoren.
Mark Ransom
Es versteht sich von selbst, dass ein Verzicht auf RAM die Funktionalität einschränkt. Die zitierte Anwendung zeigt, wie viel mit sehr begrenzten Datenspeicherressourcen, einem Radio-Frontend und einem LCD-Display möglich ist.
uɐɪ
-3

In der Regel benötigt eine CPU eine externe Uhr. Aber damit kann es ja.

John Hamilton
quelle
1
Es wäre angebracht zu erklären, warum und die Frage des Benutzers gründlich zu beantworten. Diese Antwort ist auf der schwachen Seite.
Voltage Spike