Warum ist der virtuelle Speicher benötigt, in embedded-Systemen?
Pro meinem Verständnis, wird der virtuelle Speicher ist wie folgt:
Programme/Programme/ausführbare Dateien befinden sich in einem Speichergerät. Speicher Gerät Zugriff ist wesentlich langsamer als RAM. Daher, Programme kopiert von Speicherplatz im Hauptspeicher zur Ausführung. Da Computer nur begrenzten Arbeitsspeicher (RAM), wenn alle RAM verwendet wird (z.B., wenn viele Programme gleichzeitig geöffnet haben, oder wenn ein sehr großes Programm ist in Benutzung), ein computer mit virtuellem Speicher aktiviert ist, wird die swap-Daten auf die Festplatte und wieder zurück in den Speicher wie benötigt, also in der Wirkung, erhöht die Gesamt-system-Speicher.
Soweit ich weiß, sind die meisten eingebetteten Geräte nicht über disk-Speicher (wie smartphones oder car-infotainment-Systeme). Code wird direkt ausgeführt, aus dem Flash-Speicher. RAM wird hauptsächlich als scratchpad-Bereich (lokale Variablen, Rücksprungadresse etc.).
Warum also brauchen wir virtual memory in embedded systems? (z.B. WinCE-und QNX-Unterstützung für virtuellen Speicher)
- RAM-Kapazität ist begrenzt. Das ist, warum Virtuelle Speicher kommt in Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihrem Verständnis ist völlig falsch. Sie sind verwirrend, virtueller Speicher mit swapping oder Seite-Dateien. Es gibt Systeme, die virtuellen Speicher und kein swap-oder page-Dateien und es gibt Systeme, die swap-ohne virtuellen Speicher.
Virtuellen Speicher bedeutet nur, dass ein Prozess hat einen Blick der Erinnerung, die ist anders als die physikalische Kartierung. Neben anderen Dingen erlaubt es Prozessen, Ihre eigenen virtuellen Adressraum.
Dass swapping (oder paging). Es hat nichts zu tun mit den virtuellen Speicher, außer, dass die meisten modernen Betriebssysteme implementieren swapping virtuellen Speicher nutzen. Swapping tatsächlich existierte vor virtuellen Speicher.
Ich glaube, du bist wahrscheinlich falsch über diese Geräte ausführen von code direkt aus dem flash-Speicher. Die Lesegeschwindigkeit der flash ist ziemlich niedrig und die RAM ist sehr Billig. Meine Wette ist, dass die meisten Systeme, die Sie erwähnen, nicht das ausführen von code direkt aus dem flash und verwenden Sie stattdessen den virtuellen Speicher Fehler-code in den RAM, wie gebraucht.
embedded-Systeme, der Begriff selbst hat eine Breite Palette von Anwendungen. Sie nennen könnte ein kleiner mikrocontroller mit flash-Programm, Raum, gemessen in Kb oder weniger und ram gemessen entweder in bits oder bytes (nicht genug, um eine kbytes) ein embedded-system. Ebenfalls ein tivo läuft einem ausgewachsenen Betriebssystem auf einem ziemlich ausgewachsenen computer-Hauptplatine (ersetzen tivo mit xbox als ein anderes Beispiel) als eingebettetes system. So müssen Sie weniger vage über Ihre Frage. virtueller Speicher hat das wenig zu tun, dass die Anwendungen cross Grenzen.
Gibt es viele Antworten, David hat ' S natürlich am besten, dass der virtuelle Speicher bedeutet einfach, die Speicheradresse auf die eine Seite des virtuellen Speichers Grenze anders ist als die physische Adresse, die verwendet wird, auf der anderen Seite der Grenze. Wo, wie, warum, etc gibt es eine Grenze variiert.
Eine beliebte Verwendung für den virtuellen Speicher, und ich könnte argumentieren, eine primäre Anwendungsfall ist für Betriebssysteme. Ein Vorteil ist, dass zum Beispiel alle Anwendungen kompiliert werden, um den gleichen Adressraum, alle Anwendungen kompiliert werden könnte, so dass aus den Programmen Perspektive, die Sie starten alle sagen Adresse 0x8000, und wie weit das Programm, wenn es ausgeführt wird und auf Speicher zugreift, greift er auf Sachen, basierend auf dieser Adresse. Eine Kombination der hardware und dem Betriebssystem ändern, die der virtuellen Adresse, die das Programm verwendet, um eine physikalische Adresse. Wenn das Betriebssystem ermöglicht multitasking, dann ist jede Aufgabe, die vielleicht denken, Sie sind in den gleichen Adressraum, aber die physikalischen Adressen unterscheiden sich für jede dieser Aufgaben. Ich werde nicht näher auszuführen, warum mit einer angenommenen, festen Adressraum, ist ein Vorteil. Ein weiterer Aspekt, der Betriebssysteme memory management. Viele MMU ' s wird Ihnen das segment der Speicher aber. Wenn ein Benutzer möchte, um zu reservieren, 100 MB Speicher, die das Programm zugreifen kann, in seinen virtuellen Adressraum, 100 meg, als wenn es linear wäre und in diesem Adressraum ist es linear, aber das 100 meg sein könnte, aufgegliedert sagen 4Kbyte-Blöcken, die verstreut sind über die physikalischen Adressraum, die nicht immer wahrscheinlich, aber sicherlich technisch möglich, dass keine zwei Stücke von, dass der physische Speicher ist neben anderen Stück, dass 100 meg. Ihre Speicherverwaltung nicht unbedingt haben, um zu versuchen, um große physikalische Speicher für Anwendungen zu reservieren. Hinweis: nicht alle MMUs sind genau die gleichen und 4Kbytes ist nur ein Beispiel. Eine Dritte große Vorteil von virtuellen Adressraums eines Betriebssystems ist der Schutz. Wenn die Anwendung gebunden ist, um die virtuelle Adresse Speicherplatz, oft ist es ganz einfach zu verhindern, dass die Anwendung durch berühren der Speicher von einer anderen Anwendung oder das Betriebssystem. die Anwendung würde in diesem Fall betreiben/ausführen auf eine proection-Ebene, so dass alle Zugriffe werden als virtuelle und gehen durch die übersetzung in die physische, die Tabellen, die verwendet werden, um zu definieren, die von virtuellen und physischen enthalten kann, die Schutz-flags. Wenn die Anwendung adressiert einen Speicher-Adresse in Ihrer virtuellen Raum, dass es keine business-Zugriff auf die hardware abfangen können, und lassen das Betriebssystem handeln, wie Sie es handhaben (virtualisieren einige hardware -, pop-up-Fehler und killt die app, pop-up eine Warnung und nicht töten die app aber zur gleichen Zeit füttern die app falsche Daten für Ihr Geschäft, etc).
Gibt es viele Möglichkeiten, dies kann verwendet werden, in einem eingebetteten system. first off viele embedded Systeme laufen Betriebssysteme, so dass alle der oben genannten, einfache Erstellung von Programm-Adressraum, relativ einfache Speicher-management und Schutz von den anderen Anwendungen und dem Betriebssystem und andere Leistungen nicht erwähnt. (Virtualisierung als einer, in der Lage zu aktivieren/deaktivieren Instruktion/Daten-caching auf einen block, von block-basis ist ein anderer)
Dem Strich aber ist das, was David S hingewiesen. virtueller Speicher bedeutet einfach, die virtuelle Adresse, die nicht notwendigerweise gleich der physikalischen Adresse, es kann aber nicht sein, es gibt eine gewisse Grenze, einige hardware, in der Regel tabellengesteuert, dass übersetzt die virtuelle Adresse in eine physikalische Adresse. Viele Gründe, warum würden Sie wollen, dies zu tun, da einige embedded-Systeme sind nicht zu unterscheiden von nicht-embedded-Systeme irgendeinem Grund für eine nicht-embedded-system anwenden, um ein eingebettetes system.
So viel wie Leute wollen, dass Sie glauben, dass ein system hat einen flachen Adressraum, es ist oft eine illusion. In einem mikrocontroller zum Beispiel könnten Sie mehrere flash Banken und ein oder mehrere ram-Bänke. Jede dieser Banken hat einen körperlichen, in der Regel null-basiert Anschrift. Auch wenn es keine mmu oder etwas anderes wie, dass es ein Ort irgendwo zwischen den Adressbus auf den Prozessor und die bus-Adresse auf den flash oder ram-Speicher, dekodiert die Adresse auf dem Prozessor, und benutzt diese, um die Adresse in die bestimmte Speicherbank. Oft werden die unteren bits entsprechen und die oberen bits sind verantwortlich für die bank-Auswahl (dies ist Häufig der Fall mit einer mmu auch) also in diesem Sinne der Prozessor ist das Leben in einem virtuellen Adressraum. (nicht beschränkt auf mikrocontroller, dies ist in der Regel, wie Prozessoren Adresse Bussen behandelt werden) Mit mikrocontroller je nach pin-gezogen, hohe oder niedrige oder einem anderen Mechanismus haben Sie vielleicht eine chip-Funktion, mit der man flash-bank genutzt werden, um die boot-der Prozessor oder eine andere. Sie könnte Band eine pin Eingabe hoch und die Prozessoren in den bootloader ermöglicht Ihnen den Zugriff und die debug-system zum Beispiel Programmieren Sie die Anwendung flash. Oder vielleicht, Band, Linie, niedrig, und starten Sie die Anwendung flash-anstelle der Anbieter-debugger/flash Booten. einige chips bekommen sogar noch komplizierter, so dass Sie starten einen flash dann das Programm schreibt ein register, irgendwo sofort ändern die Speicher-Architektur beweglichen Sachen, zum Beispiel so dass ram verwendet werden für die interrupt-Vektor-Tabelle, so dass Ihre Anwendung kann geändert werden, wenn der boot eher als ein Vektor-Tabelle im flash, die nicht so einfach zu ändern.
nun, wenn Sie sprechen über den virtuellen Speicher so weit wie swapping zu und von einer Festplatte, das ist ein trick, oft eingesetzt von Betriebssystemen zu geben, die illusion von mehr ram. Ich erwähnte oben, dass unter die Kategorie der Virtualisierung. virtueller Speicher in dem Sinne, dass es nicht wirklich da, ich habe X Byte, sondern lassen die software denke, es gibt Y-bytes (wobei Y größer als X) zur Verfügung. Das Betriebssystem durch die virtuellen Tische von der hardware benutzt wird, verwaltet die Speicher-chunks sind gebunden an physikalische ram und erlaubt sind, so ist durch die hardware, oder sind als nicht verfügbar gekennzeichnet in irgendeiner Weise, verursacht eine Ausnahme an das Betriebssystem, der bei der Untersuchung das Betriebssystem feststellt, dass dies eine gültige Adresse für diese Anwendung, aber die Daten hinter dieser Adresse wurde auf die Festplatte ausgelagert. Das Betriebssystem findet dann durch einige Algorithmus ein weiteres Stück von ram gehören zu wem (Teil des Algorithmus) und kopiert dieses Stück des ram auf die Festplatte, markiert die Tabelle im Zusammenhang mit der virtuellen zu physischen als nicht gültig sind, kopiert dann die gewünschten chunk von der Festplatte in den ram, kennzeichnet das Stück als gültig und ermöglicht die komplette hardware der Speicher-Zyklus.
Nicht anders, als sagen, wie vmware oder andere virtuelle Maschinen arbeiten. Können Sie Anweisungen ausführen, die nativ auf der hardware mit virtuellen Speicher so lange, bis Sie zu einer Ausnahme führen, wird die virtuelle Maschine möglicherweise denken, Sie haben ein xyz-Netzwerk-Schnittstelle und kann über einen Treiber, der Zugriff auf ein register, in das xyz-Netzwerk-Schnittstelle, aber die Realität ist, Sie haben kein xyz-hardware und/oder Sie nicht wollen, die virtuelle Maschine Anwendungen Zugriff auf die hardware, so dass Sie virtualisieren Sie es, Sie Falle, registrieren, Zugang, und mit software simuliert, dass die hardware, die Sie vortäuschen, einen Zugang und lassen Sie das Programm auf der virtuellen Maschine fortzufahren. Dies ist offensichtlich nicht der einzige Weg, um virtuelle Maschinen, aber es ist eine Möglichkeit, wenn die hardware unterstützt es, damit eine virtuelle Maschine sehr schnell laufen als ein Prozentsatz der Zeit, es ist tatsächlich ausgeführten Anweisungen an die hardware. Die langsamste Art und Weise zu virtualisieren ist natürlich zu virtualisieren alles, einschließlich der Prozessor jede Anweisung in diesem Fall würde simuliert werden, das ist ziemlich langsam, aber hat seine eigenen Besonderheiten (Virtualisierung ein arm-system auf x86-oder x86 auf einem arm, xyz auf abc, füllen Sie die Lücken). Und wenn, dass ist die Art von virtuellem Speicher, Sie werden reden über in ein eingebettetes system, auch wenn das embedded system ist zum größten Teil nicht zu unterscheiden von einem nicht-embedded-system (eine xbox oder tivo zum Beispiel), dann auch aus den gleichen Gründen konnten Sie so etwas zulassen. Wenn Sie auf einem mikrocontroller, sowie die use-cases es würde in der Regel bedeuten, wenn Sie benötigt mehr Speicher, den Sie kaufen würde, einen größeren mikrocontroller, oder fügen Sie mehr Speicher, um das system zu ändern ,oder den Anforderungen der Anwendung, so dass es braucht nicht so viel Speicher. möglicherweise gibt es Ausnahmen, aber meistens kommt es auf Ihre Anwendung und Anforderungen, für Allgemeine Zwecke oder Allgemeine Zwecke, wie-system, das für Anwendungen oder Ihre Daten größer als der verfügbare Arbeitsspeicher benötigen irgendeine Art von Lösung. der mikrocontroller in Ihrer keyless-entry-Schlüssel-Uhrkette Sache oder in Ihrer tv-Fernbedienung oder clock radio oder was auch immer würde in der Regel nicht haben müssen, um "Anwendungen", um mehr Ressourcen benötigt als physisch vorhanden.
Wichtiger Vorteil der Verwendung von virtuellem Speicher ist, dass jeder Prozess erhält einen eigenen Adressraum, die isoliert von jedem anderen Prozess. So virtueller Speicher hilft, die Fehler enthalten und verbessert die Sicherheit und Stabilität. Ich sollte anmerken, dass es noch möglich ist zwei Prozesse teilen sich ein bit des Speichers, um die Kommunikation zu erleichtern (shared mem IPC).
Sie können auch andere tricks wie das einsparen von Speicher, die via mapping freigegebenen Teile in mehr als einem Prozess (libc kommt in den Sinn für den embedded-Einsatz) Adresse Raum, sondern nur darum, es einmal in der physischen mem. Auch dies gibt es einen speed-boost, Sie können sogar verbessern Sie es weiter die Möglichkeit, dass sich linux cheapen
fork/clone
nur durch kopieren der in der kernel-Deskriptoren und verlassen der Speicher-Bild allein bis zum ersten Schreibzugriff wird mit einer ähnlichen Idee.Als letzten Vorteil, in modernen Systemen ist es üblich, zu tun, Datei-I/O über ein mapping der Datei, in der Prozess-Speicherplatz (cf.
mmap
zum Beispiel).Es ist interessant zu beachten, dass man einige der Vorteile der "virtual memory", ohne dass Sie einen vollwertigen MMU. Die Anforderungen an die hardware kann manchmal erstaunlich leicht. Der PIC 16C505 hat eine 5-bit-Adressraum und 40 bytes RAM; Adressen 0x10 bis 0x1F zuordnen können entweder zwei Gruppen zu je 16 bytes RAM. Wenn eine Anwendung schreiben, die benötigt werden, um das verwalten von zwei verschiedenen Daten-streams, die ich so angeordnet, dass alle Variablen, die mit einem data-stream würde in der ersten Gruppe der 16 "schaltbare" memory locations, und diese in Verbindung mit den anderen wäre, an die entsprechenden Adressen in die zweite Gruppe. Ich könnte dann mit dem gleichen code für die Verwaltung der Datenströme. Legen Sie einfach die banking-bit eine Möglichkeit, rufen Sie die routine, setzen Sie es in die andere Richtung, und rufen Sie die routine wieder.
Einer der Gründe, Virtueller Speicher vorhanden ist, so dass das Gerät Multitasking kann. Es kann auch als RAM hat, damit unter der Last Ihres physischen RAM und ein vertauschen der Last hin und her.