Kann eine CPU mit nichts anderem als einer Stromversorgung und einem ROM funktionieren und nur den internen Cache als RAM verwenden?

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

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

Moderne Desktop-/Server-CPUs haben oft mehr internen Cache-RAM als viele Computer aus den 1990er Jahren im gesamten Systemspeicher, also sollte genug Platz vorhanden sein, um einfachen Code auszuführen.

CPUs aus der Zeit, bevor es Cache gab, wie der 6502, konnten nichts tun, da das interne CPU-RAM nur wenige Bytes für Adresszähler und Akkumulatoren umfasste.

Dies ist keine Frage des Ausführens irgendwelcher moderner Betriebssysteme, sondern des Ausführens von einfachem Code, der in ein benutzerdefiniertes ROM programmiert oder mit einer Hex-Eingabetastatur von Hand eingegeben wird.

Hängt ganz von der CPU ab und was genau Sie mit "Cache" meinen, da einige CPUs ihren RAM eingebaut haben und keine externen Chips benötigen.
Nun, wenn Sie den Cache als RAM umfunktionieren können, dann ja. Und es gibt CPUs, die das können. Oder die CPU hat RAM eingebaut, und viele von ihnen haben es, zB die ARM-Familie verwendet es, um die ersten paar Stufen von Bootloadern auszuführen.
Wenn Sie adressierbaren Speicher in den Prozessor selbst einbauen, bauen Sie im Grunde einen sogenannten Mikrocontroller. Diese existieren.
@MarcusMüller: Dein Kommentar ist definitiv wichtig genug, damit jemand eine ausführlichere Antwort schreiben kann. Vielleicht möchten Sie?
Wer sagt, dass Sie überhaupt RAM brauchen?
Kommt darauf an, wie man "Funktion" definiert. Ich wette, ein i7 ist perfekt in der Lage, Wärme zu erzeugen, wenn nur eine Batterie daran angeschlossen ist.
Es gibt eine Reihe von Dingen, die Sie mit nur wenigen Registern und ohne zusätzlichen RAM tun können. Zum Beispiel ein Funktionsgenerator.
:-) Das erinnert mich an Die Jagd nach dem Roten Oktober. "Können Sie eine Interkontinentalrakete horizontal starten?" ... "Sicher! Warum sollten Sie das wollen?" Daumen hoch an @MarcusMüller für den Hinweis, dass die Verwendung eines vollständigen uProcessors auf diese Weise übertrieben ist.
Es braucht ziemlich viel Code, um DRAM zum Laufen zu bringen, und obwohl dies nur mit Flash und internen Prozessorregistern möglich ist, würde man idealerweise einen Prozessor mit ein wenig RAM zum Booten entwerfen, eine vernünftige Sache. Aber Sie brauchen sicher keinen RAM, um einen Prozessor wie oben erwähnt zu betreiben.
Sie werden feststellen, dass diese Teile mehr als eine Stromversorgung benötigen. Sie benötigen manchmal eine Reihe von Dingen, die passieren. Die verschiedenen Schienen, die zu einem bestimmten Zeitpunkt hochkommen, liefern ein gutes Feedback, bevor Sie eine andere Quelle finden können, insbesondere Intel-Foundry-Zeug mag viele Schienen. Sie können auch variable Spannungsschienen haben, die diese Logik im Chip verwendet, um eine Kernversorgung dynamisch abzustimmen. Ihre "Stromversorgung" besteht also nicht nur aus ein paar Krokodilklemmen an einer Tischversorgung. ganz zu schweigen von der benötigten Steckdose oder dem Auflöten der Kugeln auf eine Platine, um dies zu versuchen.

Antworten (4)

Sehen Sie sich diesen äußerst detaillierten Bericht über die 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, arbeitet der Code zunächst in einer stapellosen Umgebung. 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 strengen Code schreiben, wenn sie diese Cache-as-RAM-Funktion verwenden, da eine Räumung an diesem Punkt 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 an diesem Punkt des Startvorgangs im "No Evict Mode" (NEM), wenn sie auf Cache-as-RAM-Basis arbeiten. Bei NEM führt ein Cache-Line-Miss im Prozessor nicht zu einer Räumung. Das Entwickeln von Code mit einem verfügbaren Software-Stack ist viel einfacher, und der Initialisierungscode führt häufig die minimale Einrichtung durch, um einen Stack sogar vor der DRAM-Initialisierung zu verwenden.

Sie können dies beobachten, indem Sie einen PC ohne RAM betreiben: Es wird eine Reihe von Pieptönen abgespielt. Das Programm, das diese abspielt, wird vom BIOS-Flash-ROM ausgeführt.

Ich habe dieses Verhalten auch bei einigen ARM-Prozessoren gesehen. Es gibt Konfigurationsregister im SoC, die es Ihnen ermöglichen, den Cache früh in der Startsequenz als RAM zu verwenden, um ein Programm auszuführen, das den DRAM findet, auflistet und konfiguriert.

Weitere Einzelheiten zur Funktionsweise des CAR-Modus (Cache-as-Ram) von x86 finden Sie in einer Antwort, die ihn als Anwendungsfall für INVD(beim Verlassen des CAR-Modus den Cache ungültig machen, anstatt nutzlose Daten in den Speicher schreiben zu lassen, möglicherweise über etwas Wertvolles).
Was ist falsch an der Räumung, wenn DRAM nicht verfügbar ist? Ist das Problem nicht das Lesen aus dem RAM, anstatt in den RAM zu schreiben ?
@ user541686: Die Räumung selbst ist kein unmittelbares Problem, aber wenn diese Cache-Zeile nicht nur ein tmp-Puffer war, möchten Sie sie vermutlich später erneut lesen. Wenn es entfernt wurde, sind die Daten weg. Wenn der erste Zugriff nach der Räumung ein Schreibvorgang war (z. B. um ihn wieder als tmp-Puffer zu verwenden), ist dies möglicherweise in Ordnung (in einem hypothetischen Fall, in dem CAR ohne No-Fill-Modus möglich war, sodass Zuweisungen erfolgen könnten.) Aber anstelle von Hardware Da es pro Cache-Zeile Kontrollen gibt, ob wir räumen können oder nicht (was Bits kosten würde, nur um diesen speziellen Fall zu unterstützen), gibt es eine globale Kontrolle.

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

+1 Dies ist eine sehr schlaue Antwort. Cachelines werden nach Belieben von adressierbaren Zugriffen aus dem Hauptspeicher auf nahezu zufällige Weise geladen und zurückgezogen.
Ja, deshalb ist ein spezieller Modus (wie in pjcs Antwort) oder eine Art spezieller Tricks erforderlich. Eine andere Option (neben der akzeptierten Antwort) könnte darin bestehen, das System glauben zu lassen, es habe etwas DRAM, aber tatsächliche Speicherschreibvorgänge werfen die Daten einfach weg und Lesevorgänge erzeugen nur Nullen (oder tatsächliche Daten aus einem ROM für einen bestimmten Adressbereich). Solange alle Lasten im Cache getroffen werden, 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-Langmodus zu wechseln, ohne dass echte Cache-Flushes erforderlich sind.
Skylake-CPUs mit integriertem eDRAM-Cache verwenden ihn jedoch als speicherseitigen Cache ( zwischen dem Speichercontroller und allem anderen, anders als bei Broadwell), sodass sogar DMA-Zugriffe von Nicht-CPU-Systemgeräten oder CPU-Lasten zwischengespeichert werden können. speichert in "uncacheable" Speicherregionen (die L1/L2/L3 umgehen).
@PeterCordes Die Antwort ist jedoch nicht "nein", nur weil ein spezieller Modus benötigt wird - die Frage ist dann, ob der spezielle Modus existiert.
Die Frage ist - was passiert, wenn Sie den Cache trotzdem verwenden und sicherstellen, dass er niemals verfehlt oder geleert wird - er wird adressierbar, sobald etwas an eine Adresse in nicht vorhandenem RAM geschrieben wird, oder? Der eigentliche Schreibvorgang wird auf den Boden fallen gelassen, aber der Lesevorgang wird trotzdem aus dem Cache bereitgestellt?
Ups, das ähnelt dem, was @Peter Cordes vorgeschlagen hat. Ich würde vermuten, dass der Lesevorgang Ihnen statisch oder auf einem Multiplex-Bus den kapazitiv "gecachten" Zustand der Adresszeilen geben würde (deshalb schien fehlender RAM auf alten Systemen voller ASCII-Tabellen zu sein :))
@rackandboneman: Ich dachte, Sie könnten alle DRAM-Datenleitungen mit Masse oder so verbinden, damit sie als Null gelesen werden. Aber ich vermute, dass es nicht so einfach ist und eine Signalleitung möglicherweise von niedrig nach hoch oder umgekehrt übergehen muss, bevor ein DDR4-Speichercontroller denkt, dass der DRAM Daten bereitgestellt hat. Und verwendet die Buscodierung einen Scrambler? Da Sie wahrscheinlich das ROM mit dem Chipsatz verdrahten und eine Region mit physischen Adressen programmieren würden, um sie dort anstelle von DRAM abzubilden, sollte dies keine Rolle spielen. Obwohl Sie vielleicht ein ROM mit dem DDR4-Bus verbinden und alle Adressen in das ROM aliasieren könnten ...
Sie müssten sie wahrscheinlich über eine Art Pullup "erden", da Sie immer noch versuchen werden, Daten in einen toten Kurzschluss zu schreiben (und auf diese Weise wahrscheinlich viel Energieverschwendung und thermische Belastung erzeugen).
@PeterCordes "IDK genug darüber, wie x86 bootet, um zu wissen, ob es möglich ist ..." - nun, welche Hoffnung haben wir Sterblichen dann?
@MartinBonner: Schauen Sie sich wiki.osdev.org an und vielleicht den Quellcode für ein Open-Source-BIOS wie coreboot.org , wenn Sie neugierig sind: PI weiß viel darüber, wie x86 funktioniert, sobald es im Long-Modus oder 32 läuft -Bit-geschützter Modus, bei dem das System so programmiert ist, dass es den DRAM auf einige Bereiche des physischen Adressraums abbildet, und so weiter. Ich habe wenig Interesse an den Details, um dorthin zu gelangen, insbesondere an Dingen, die das BIOS vor dem Laden des Bootsektors oder von EFI tut. Ich weiß etwas darüber, wie ein Kernel Paging ermöglicht und vom 16-Bit-Realmodus in den geschützten oder langen Modus wechselt ...

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

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

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

Sich auf die Daten zu beschränken, die in Registern gehalten werden können, schränkt die nützlichen Funktionen, die Sie ausführen können, wirklich ein. Ich denke, die Frage betraf eher den Cache-Speicher in modernen Prozessoren.
Es versteht sich von selbst, dass der Verzicht auf RAM die mögliche Funktionalität einschränkt. Die zitierte Anwendung zeigt, was mit sehr begrenzten Datenspeicherressourcen, einem Radio-Frontend und einem LCD-Display möglich ist.

Typischerweise benötigt eine CPU einen externen Takt. Aber damit kann es ja.

Es wäre angebracht, den Grund dafür zu erklären und die Frage des Benutzers ausführlich zu beantworten. Diese Antwort ist auf der schwachen Seite.