Können Sie einen Prozessor der x86-Klasse ramless betreiben?

Moderne x86-Prozessoren haben mindestens 512 KB L2-Cache. Es gibt Anwendungen, die vollständig in diese Speichermenge passen würden. Können Sie diese Chips ohne angeschlossenen RAM ausführen? Wenn ja, gibt es eine Möglichkeit, die Zeitstrafe beim Zurückschreiben zu beseitigen, 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 jedoch nützlich wäre.

Antworten (3)

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 sich wie ein normaler RAM verhalten.

Einige der Bios-Replacement-Projekte 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 Praxis 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 versetzen, variieren ein wenig.

Für eine kurze Einführung auf niedriger Ebene können Sie sich diese Präsentation ansehen.

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

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

Wenn die CPU aus dem Reset kommt, wird der Cache ausgeschaltet. Das BIOS konfiguriert und löscht den Cache anfänglich. Also nein, Sie können es nicht ohne RAM ausführen, da es keinen RAM gibt, um das Ding überhaupt hochzufahren.

Konnten die ersten paar Anweisungen aus dem ROM den Cache nicht initialisieren und einschalten, ohne RAM zu verwenden?
@Mark Ransom Moderne Intel-Prozessoren (und viele andere CPUs) verwenden Serial Flash zum Speichern des BIOS. Aber es kann keinen Code vom seriellen Flash ausführen. 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 die erste Anweisung ausgeführt wird? Das wäre ein hässliches Henne-Ei-Problem, das es zu überwinden gilt.
@David Streng genommen ist es kein 'serieller' Flash, sondern 'Firmware Hub'. Dies unterscheidet sich von "seriell" dadurch, dass es 4 Bits gleichzeitig anstelle von 1 überträgt.
@Matt Jenkins Ich habe gerade eine Platine basierend auf einer Intel D510 Atom-CPU und dem ICH8M-Chipsatz entworfen. Es verwendet einen standardmäßigen seriellen Flash-Chip. Aber ich weiß, wovon Sie sprechen, und Sie haben Recht, dass einige Chips die 4-Bit-Breite verwenden.
@Mark Ransom Es gibt viele CPUs/MCUs/DSPs, die über eine serielle Verbindung (Serial Flash, RS-232, SPI usw.) booten. Sie alle erreichen dies, indem sie ein kleines ROM in der CPU haben, von dem es bootet, und dieser Code lädt den "echten" Code von wo auch immer. Der Betrieb eines RAM-losen Systems könnte theoretisch möglich sein, indem Intel diesen Code so ändert, dass er den Cache anstelle von externem RAM verwendet. Aber ich bezweifle, dass Intel dies tun wird.
@David Kessner: Ich weiß, dass es selten notwendig ist, Busprobleme in einem Produktions-PC-System zu diagnostizieren (wenn das Motherboard nicht funktioniert, ist es Schrott), aber ich würde trotzdem denken, dass es für eine CPU besser wäre, nur mit dem Internen hochzufahren zwischenspeichern und dem Code dort erlauben, den externen Speicherbus zu konfigurieren und/oder in einen Diagnosemodus zu wechseln, wenn der externe Bus nicht funktioniert.

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

Ich glaube nicht, dass es eine Möglichkeit gibt, programmgesteuert auf den Cache zuzugreifen. Sie können nicht von einer Anweisung zur nächsten garantieren, was sich im Cache befinden würde und wo es sich befinden würde, sodass Sie es nicht zuverlässig als RAM verwenden können, selbst wenn Sie direkt darauf zugreifen könnten.

Sie könnten einen x86 ohne RAM ausführen, aber Sie könnten ihn nicht dazu bringen, sehr viel Nützliches zu tun. Sie wären darauf beschränkt, nur die internen Register zur Datenspeicherung zu verwenden.

Die Cacheline-Füll- und Leerprotokolle sind gründlich dokumentiert und in den meisten CPUs, einschließlich x86, konfigurierbar. Cacheline-Inhalte werden nicht auf zufällige Weise zwischen Anweisungen geleert. Sehen Sie sich meine Antwort an, wie Sie es normalerweise so einrichten, dass es sich als linearer RAM verhält.
Ich habe ein Hex-Loader-Dienstprogramm für einen 80x86-Klon geschrieben, der ohne RAM korrekt funktionieren würde; IIRC, ich habe eine einstufige Aufrufliste mit SP implementiert, um die Rücksendeadresse 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 arbeiten ließ, wenn das RAM nicht funktionierte, aber in einem solchen Fall konnte der Lader das Problem diagnostizieren. Auf einigen anderen Mikros mit externen Codebussen, aber wenig internem Codespeicherplatz war es ein nützliches Diagnosetool, Code auf einem System mit einem defekten Bus ausführen zu können.
@Ich könnte mich irren, aber ist RAM nicht für Binärcode und für Lese- und Schreibvorgänge durch den Prozessor?