Wie gehen eingebettete Systeme mit der virtuellen und physikalischen Speicheradressierung um?

Ich beziehe mich auf die Wikipedia-Seite über virtuellen Speicher , den letzten Absatz im Abschnitt Verwendung:

Eingebettete Systeme und andere Computersysteme für spezielle Zwecke, die sehr schnelle und/oder sehr konsistente Antwortzeiten erfordern, können sich aufgrund des verringerten Determinismus dafür entscheiden, keinen virtuellen Speicher zu verwenden; Virtuelle Speichersysteme lösen unvorhersehbare Traps aus, die unerwünschte und unvorhersehbare Verzögerungen als Reaktion auf Eingaben erzeugen können, insbesondere wenn der Trap erfordert, dass Daten aus dem Sekundärspeicher in den Hauptspeicher gelesen werden. Die Hardware zum Übersetzen virtueller Adressen in physische Adressen erfordert typischerweise eine beträchtliche Chipfläche zum Implementieren, und nicht alle Chips, die in eingebetteten Systemen verwendet werden, enthalten diese Hardware, was ein weiterer Grund dafür ist, dass einige dieser Systeme keinen virtuellen Speicher verwenden.

Allerdings können wir beispielsweise in der CodeWarrior-IDE (verwendet mit NXP-MCUs) oder der STM32-Cube-IDE (verwendet mit STM32-MCUs) Speichermonitore des virtuellen Speichers sehen, wie diese:

Geben Sie hier die Bildbeschreibung ein

Wie gehen Mikrocontroller mit der Speicheradressierung und der Übersetzung von Speicheradressen um? Was ist diese "signifikante Chipfläche"?

Dieser Screenshot sagt "Speicher", nicht "virtueller Speicher".
In Ihrem Beispiel gibt es keinen "virtuellen Speicher", und ich denke, es wird Ihnen schwer fallen, ein Beispiel für einen Mikrocontroller zu finden, der virtuellen Speicher unterstützt.
Ja, studieren Sie die einzigartigen Vorteile und Funktionen, die virtuelle Speicher bieten, und überlegen Sie dann, welche eingebetteten Anwendungen mindestens einen benötigen. Diejenigen, die dies tun, enthalten normalerweise eine Art Kernel, um ihn zu verwalten, der häufig als Teil einer Betriebssystemumgebung zu finden ist. Keine meiner eingebetteten Anwendungen hat auch nur ein Merkmal benötigt, und die meisten haben ausdrücklich gefordert, dass ich kein virtuelles Speichersystem verwende. Aber keiner von ihnen hat Linux oder freeBSD benötigt, und ich habe mein eigenes O/S geschrieben, wenn die Anwendung von Threads profitiert. Hält andere aber nicht auf.
Machen Sie nicht den Fehler zu glauben, dass "Embedded System" einen Mikrocontroller impliziert. Anspruchsvollere eingebettete Systeme können im Wesentlichen einen Einplatinencomputer verwenden, auf dem ein vollständiges Betriebssystem wie Linux ausgeführt wird. Allerdings verfügen neuere Mikrocontroller möglicherweise über ein ausgeklügeltes Speichermanagement wie separate Daten- und Befehlsbusse mit Caching. Dies ist nicht dasselbe wie virtueller Speicher, aber die Folgen können ähnlich sein.

Antworten (2)

Die Hardware zum Übersetzen virtueller Adressen in physische Adressen erfordert typischerweise eine beträchtliche Chipfläche zum Implementieren, und nicht alle Chips, die in eingebetteten Systemen verwendet werden, enthalten diese Hardware, was ein weiterer Grund dafür ist, dass einige dieser Systeme keinen virtuellen Speicher verwenden.

Dies wird als "MMU" bezeichnet. Um es klar zu sagen, es ist nicht separat, falls vorhanden, wird es Teil desselben Chips wie der Mikrocontroller sein.

Im Allgemeinen haben Cortex-M-Systeme keine MMU, Cortex-A jedoch schon.

Danke mein Herr. Und haben Cortex-M-Systeme (da sie keine MMU haben) einen anderen speziellen Chip zum Übersetzen von Adressen? Oder verwenden sie überhaupt keine virtuelle Adressierung?
Ich glaube nicht, dass sie eine andere Adressübersetzung haben.
Die virtuelle Adressierung erfordert eine MMU, um den realen Speicher in den virtuellen Adressraum abzubilden. Cortex M verwendet keine virtuellen Adressen oder Adressierung. Alle Peripheriegeräte und Speicher haben feste Adressen.

Der signifikante Bereich stammt aus den Seitentabellen: Dies ist ein Array von Adressen, dh ein signifikanter Teil des Speichers, der eine Nachschlagetabelle bildet, in der die HW (die MMU) die physische Adresse nachschlägt, die einer virtuellen Adresse zugeordnet ist (und sich beschwert, wenn die virtuelle Adresse ist nicht zugeordnet). Diese Seitentabellen machen den Großteil des MMU-Bereichs aus.

Die Beschwerde ist als "Seitenfehler" bekannt und wird vom Betriebssystem behandelt, indem es den Inhalt des virtuellen Speichers von der Festplatte in eine freie Seite des physischen Speichers holt. Dazu kann es erforderlich sein, zuerst etwas physischen Speicher freizugeben. Beinhaltet typischerweise das Suchen der ältesten Seite ("am längsten verwendet" oder LRU), Speichern auf der Festplatte, Markieren ihres Pager-Tabelleneintrags als nicht zugeordnet und dann Markieren des neuen Pager-Tabelleneintrags mit der neu freigegebenen physikalischen Adresse, bevor die neuen Daten geladen werden.

Kleine eingebettete Systeme haben diese Übersetzung nicht; die "virtuelle" Adresse ist die physische Adresse.

(Sie haben oft kein Betriebssystem oder auch keine Festplatte!)