Virtuelles Gedächtnis

In der Computerwissenschaft ist virtuelles Gedächtnis eine Speicherverwaltungstechnik, die entwickelt ist, um Kerne stark mehrzubeanspruchen. Diese Technik virtualizes ein Computer die verschiedenen Formen der Architektur der Computerdatenlagerung (wie Gedächtnis des zufälligen Zugangs und Plattenlagerung), einem Programm erlaubend, entworfen zu werden, als ob es nur eine Art des Gedächtnisses, "virtuellen" Gedächtnisses gibt, das sich wie direkt addressable Lesen/Schreiben-Gedächtnis (RAM) benimmt.

Die meisten modernen Betriebssysteme, die virtuelles Gedächtnis auch unterstützen, führen jeden Prozess in seinem eigenen hingebungsvollen Adressraum. Jedes Programm scheint so, alleinigen Zugang zum virtuellen Gedächtnis zu haben. Jedoch sind einige ältere Betriebssysteme (wie OS/VS1 und OS/VS2 SVS) und sogar moderne (wie IBM i) einzelner Adressraum Betriebssysteme, die alle Prozesse in einem einzelnen aus dem virtualized Gedächtnis zusammengesetzten Adressraum führen.

Virtuelles Gedächtnis macht Anwendung, die leichter durch das Verbergen der Zersplitterung des physischen Gedächtnisses programmiert; durch das Beauftragen an den Kern der Last, die Speicherhierarchie zu führen (das Bedürfnis nach dem Programm beseitigend, um Bedeckungen ausführlich zu behandeln);

und wenn jeder Prozess in seinem eigenen hingebungsvollen Adressraum, geführt wird

durch das Verhindern des Bedürfnisses, Programm-Code umzusiedeln oder auf Gedächtnis mit dem Verhältniswenden zuzugreifen.

Speichervirtualisierung ist eine Generalisation des Konzepts des virtuellen Gedächtnisses.

Virtuelles Gedächtnis ist ein integraler Bestandteil einer Computerarchitektur; alle Durchführungen (Emulatoren und virtueller Maschinen ausschließend), verlangen Hardware-Unterstützung normalerweise in der Form einer in die Zentraleinheit eingebauten Speicherverwaltungseinheit. Folglich haben ältere Betriebssysteme, wie diejenigen für die Großrechner der 1960er Jahre und derjenigen für Personalcomputer des frühen zur Mitte der 1980er Jahre (z.B DOS), allgemein keine virtuelle Speicherfunktionalität, obwohl bemerkenswerte Ausnahmen für Großrechner der 1960er Jahre einschließen:

  • der Atlas-Oberaufseher für den Atlas
  • MCP für den Burroughs B5000
  • MTS, TSS/360 und BEDIENUNGSFELD/CM für IBM System/360 Model 67
  • Multics für den GE 645
  • das Time-Sharing-Betriebssystem für die RCA Spektren 70/46

Der Apple Lisa ist ein Beispiel eines Personalcomputers der 1980er Jahre, der virtuelles Gedächtnis zeigt.

Eingebettete Systeme und andere Computersysteme des speziellen Zwecks, die sehr schnelle und/oder sehr konsequente Ansprechzeiten verlangen, können sich dafür entscheiden, virtuelles Gedächtnis wegen des verminderten Determinismus nicht zu verwenden; virtuelle Speichersysteme lösen unvorhersehbare Unterbrechungen aus, die unerwünschten "Bammel" während Eingabe/Ausgabe-Operationen erzeugen können. Das ist, weil eingebettete Hardware-Kosten häufig niedrig durch das Einführen aller dieser Operationen mit der Software (eine Technik genannt Bit-Schlagen) aber nicht mit der hingebungsvollen Hardware behalten werden.

Geschichte

In den 1940er Jahren und 1950er Jahren mussten alle größeren Programme Logik enthalten, um primäre und sekundäre Lagerung wie das Überziehen zu führen. Virtuelles Gedächtnis wurde deshalb nicht nur eingeführt, um primäres Gedächtnis zu erweitern, aber solch eine Erweiterung so leicht zu machen, wie möglich für Programmierer zu verwenden. Um Mehrprogrammierung und das Mehrbeschäftigen zu berücksichtigen, haben viele frühe Systeme Gedächtnis zwischen vielfachen Programmen ohne virtuelles Gedächtnis wie frühe Modelle des PDP-10 über Register geteilt. Paginierung wurde zuerst an der Universität Manchesters als eine Weise entwickelt, das Arbeitsgedächtnis des Computers des Atlasses durch das Kombinieren seiner sechzehntausend Wörter des primären Kerngedächtnisses mit zusätzlichen sechsundneunzigtausend Wörtern des sekundären Trommel-Gedächtnisses zu erweitern. Der erste Atlas wurde 1962 beauftragt, aber Arbeitsprototypen der Paginierung waren vor 1959 entwickelt worden. 1961 hat Burroughs Corporation unabhängig den ersten kommerziellen Computer mit dem virtuellen Gedächtnis, dem B5000, mit der Segmentation aber nicht Paginierung veröffentlicht.

Bevor virtuelles Gedächtnis in der Hauptströmung Betriebssysteme durchgeführt werden konnte, mussten viele Probleme gerichtet werden. Dynamische Adressumrechnung hat teuer und schwierig verlangt, spezialisierte Hardware zu bauen; anfängliche Durchführungen haben Zugang zum Gedächtnis ein bisschen verlangsamt. Es gab Sorgen, dass neue weites System Algorithmen, die sekundäre Lagerung verwerten, weniger wirksam sein würden als vorher verwendete anwendungsspezifische Algorithmen. Vor 1969 war die Debatte über das virtuelle Gedächtnis für kommerzielle Computer zu Ende; eine von David Sayre geführte Forschungsmannschaft von IBM hat gezeigt, dass ihr virtuelles Speicherbedeckungssystem durchweg besser gearbeitet hat als die besten manuell kontrollierten Systeme. Der erste Minicomputer, um virtuelles Gedächtnis einzuführen, war der norwegische NORD-1; während der 1970er Jahre haben andere Minicomputer virtuelles Gedächtnis, namentlich VAX Modelle durchgeführt, die VMS führen.

Virtuelles Gedächtnis wurde in die x86 Architektur mit der geschützten Weise des Verarbeiters von Intel 80286, aber seine Segment-Tauschen-Technik erklettert schlecht zu größeren Segment-Größen eingeführt. Intel 80386 hat Paginierungsunterstützung unter der vorhandenen Segmentationsschicht eingeführt, die Seitenschuld-Ausnahme zur Kette mit anderen Ausnahmen ohne doppelte Schuld ermöglichend. Jedoch war das Laden von Segment-Deskriptoren eine teure Operation, Betriebssystementwerfer veranlassend, sich ausschließlich auf die Paginierung aber nicht eine Kombination der Paginierung und Segmentation zu verlassen.

Paginiertes virtuelles Gedächtnis

Fast alle Durchführungen des virtuellen Gedächtnisses teilen einen virtuellen Adressraum in Seiten, Blöcke von aneinander grenzenden virtuellen Speicheradressen. Seiten sind gewöhnlich mindestens 4 Kilobytes in der Größe; Systeme mit großen virtuellen Adressbereichen oder Beträgen des echten Gedächtnisses verwenden allgemein größere Seitengrößen.

Seitentische

Seitentische werden verwendet, um die virtuellen Adressen zu übersetzen, die durch die Anwendung in physische durch die Hardware verwendete Adressen gesehen sind, um Instruktionen zu bearbeiten; solche Hardware, die diese spezifische Übersetzung behandelt, ist häufig als die Speicherverwaltungseinheit bekannt. Jeder Zugang im Seitentisch hält eine Fahne, die anzeigt, ob die entsprechende Seite im echten Gedächtnis ist oder nicht. Wenn es im echten Gedächtnis ist, wird der Seitentabellenzugang die echte Speicheradresse enthalten, an der die Seite versorgt wird. Wenn eine Verweisung zu einer Seite durch die Hardware gemacht wird, wenn der Seitentabellenzugang für die Seite anzeigt, dass es nicht zurzeit im echten Gedächtnis ist, erhebt die Hardware eine Seitenschuld-Ausnahme, den Paginierungsoberaufseher-Bestandteil des Betriebssystems anrufend.

Systeme können Ein-Seite-Tisch für das ganze System, getrennte Seitentische für jede Anwendung und Segment, einen Baum von Seitentischen für große Segmente oder eine Kombination von diesen haben. Wenn es nur eine Seite Tisch gibt, verwenden verschiedene Anwendungen, die zur gleichen Zeit laufen, verschiedene Teile einer einzelnen Reihe von virtuellen Adressen. Wenn es vielfache Seite oder Segment-Tische gibt, gibt es vielfache virtuelle Adressräume, und gleichzeitige Anwendungen mit getrennten Seitentischen adressieren zu verschiedenen echten Adressen um.

Paginierungsoberaufseher

Dieser Teil des Betriebssystems schafft und führt Seitentische. Wenn die Hardware eine Seitenschuld-Ausnahme, die Paginierungsoberaufseher-Zugänge sekundäre Lagerung erhebt, gibt die Seite zurück, die die virtuelle Adresse hat, die auf die Seitenschuld hinausgelaufen ist, die Seitentische aktualisiert, um die physische Position der virtuellen Adresse zu widerspiegeln, und dem Übersetzungsmechanismus erzählt, die Bitte wiederanzufangen.

Wenn das ganze physische Gedächtnis bereits im Gebrauch ist, muss der Paginierungsoberaufseher eine Seite in der primären Lagerung befreien, um das getauschte - in der Seite zu halten. Der Oberaufseher verwendet eine einer Vielfalt von Seitenersatzalgorithmen solcher, wie am wenigsten kürzlich verwendet, der Seite zum freien zu bestimmen.

Befestigte Seiten

Betriebssysteme haben Speicherbereiche, die befestigt werden (nie hat zur sekundären Lagerung getauscht). Zum Beispiel verlassen sich Unterbrechungsmechanismen auf eine Reihe von Zeigestöcken ihren Dressierern, wie Eingabe/Ausgabe-Vollziehung und Seitenschuld. Wenn die Seiten, die diese Zeigestöcke oder den Code enthalten, den sie anrufen, auslagerbar wären, würde Unterbrechungsbehandlung viel komplizierter und zeitraubend besonders im Fall von Seitenschuld-Unterbrechungen werden. Folglich ist ein Teil der Seitentabellenstrukturen nicht auslagerbar.

Einige Seiten können seit kurzen Zeitspannen befestigt werden, andere können seit langen Zeitspannen befestigt werden, und dennoch müssen andere eventuell dauerhaft befestigt werden. Zum Beispiel:

  • Der Paginierungsoberaufseher-Code und die Fahrer für sekundäre Speichergeräte, auf denen Seiten wohnen, müssen dauerhaft befestigt werden, weil sonst Paginierung nicht sogar arbeiten würde, weil der notwendige Code nicht verfügbar sein würde.
  • Vom Timing abhängige Bestandteile können befestigt werden, um variable Paginierungsverzögerungen zu vermeiden.
  • Datenpuffer, auf die direkt durch peripherische Geräte zugegriffen wird, die direkten Speicherzugang oder Eingabe/Ausgabe-Kanäle verwenden, müssen in befestigten Seiten wohnen, während die Eingabe/Ausgabe-Operation im Gange darin besteht, weil solche Geräte und die Busse, denen sie beigefügt werden, annehmen, Datenpuffer gelegen an physischen Speicheradressen zu finden; unabhängig von, ob der Bus eine Speicherverwaltungseinheit für die Eingabe/Ausgabe hat, können Übertragungen nicht angehalten werden, wenn eine Seitenschuld vorkommt und dann wiederangefangen hat, als die Seitenschuld bearbeitet worden ist.

Multics hat dauerhaft befestigte "angeschlossene" Seiten genannt.

In den Betriebssystemen von IBM für das System/370 und die Nachfolger-Systeme wird der Begriff "befestigt", und Seiten können befestigt sein langfristig, oder können befestigt sein kurzfristig. Kontrollstrukturen sind häufig befestigt langfristig (gemessen in der Wanduhr-Zeit, d. h., Zeit, die in Sekunden, aber nicht Zeit gemessen ist, die in den weniger als einem zweiten Zwischenräumen gemessen ist), wohingegen Eingabe/Ausgabe-Puffer gewöhnlich befestigt (gewöhnlich gemessen in bedeutsam weniger kurzfristig sind als Wanduhr-Zeit, vielleicht für einige Millisekunden). Tatsächlich hat der OS eine spezielle Möglichkeit für das "schnelle Befestigen" dieser festen Kurzzeitdatenpuffer (befestigend, der durchgeführt wird, ohne eine zeitraubende Oberaufseher-Anruf-Instruktion aufzusuchen). Zusätzlich hat der OS noch eine andere Möglichkeit, für eine Anwendung davon umzuwandeln, befestigt zum befestigen seit einer unbestimmten Periode, vielleicht seit den Tagen, Monaten oder sogar Jahren zu sein langfristig (jedoch, diese Möglichkeit verlangt implizit, dass die Anwendung erstens, vielleicht vom bevorzugten Gedächtnis, oder einer Mischung von bevorzugten - und nichtbevorzugten Gedächtnis getauscht wird, und zweitens - in zum nichtbevorzugten Gedächtnis getauscht werden, wo es für die Dauer jedoch lange wohnt, der sein könnte; diese Möglichkeit verwertet eine dokumentierte Oberaufseher-Anruf-Instruktion).

Virtuell-echte Operation

In OS/VS1 und ähnlichem OSes werden einige Teile des Systemgedächtnisses in der virtuell-echten Weise geführt, wo jede virtuelle Adresse einer echten Adresse entspricht, unterbrechen Sie spezifisch Mechanismen, Paginierungsoberaufseher und Tabellen in älteren Systemen und Anwendungsprogramme mit dem Sondereingabe/Ausgabe-Management. Zum Beispiel hat der z/OS von IBM 3 Weisen (virtuell-virtuell, virtuell-echt und virtuell befestigt).

Dresche

Wenn Paginierung verwendet wird, hat ein Problem gerufen "Dresche" kann vorkommen, in dem der Computer ein unpassendes Zeitdauer-Tauschen Seiten zu und von einem sich rückwärts bewegenden Laden ausgibt, folglich nützliche Arbeit verlangsamend. Das Hinzufügen echten Gedächtnisses ist die einfachste Antwort, aber sich verbesserndes Anwendungsdesign, Terminplanung und Speichergebrauch können helfen.

Segmentiertes virtuelles Gedächtnis

Einige Systeme, wie der Burroughs B5500, verwenden Segmentation statt der Paginierung, virtuelle Adressräume in Segmente der variablen Länge teilend. Eine virtuelle Adresse hier besteht aus einer Segment-Zahl und einem Ausgleich innerhalb des Segmentes. Intel 80286 unterstützt ein ähnliches Segmentationsschema als eine Auswahl, aber er wird selten verwendet. Segmentation und Paginierung können zusammen durch das Teilen jedes Segmentes in Seiten verwendet werden; Systeme mit dieser Speicherstruktur, wie Multics und IBM System/38, sind gewöhnlich, Segmentation mit der Paginierung vorherrschend, die Speicherschutz zur Verfügung stellt.

In Intel 80386 und später IA-32 Verarbeitern wohnen die Segmente in einem paginierten, geradlinigen 32-Bit-Adressraum. Segmente können in und aus diesem Raum bewegt werden; Seiten dort können in und aus dem Hauptgedächtnis "paginieren", zwei Niveaus des virtuellen Gedächtnisses zur Verfügung stellend; wenige, wenn irgendwelche Betriebssysteme so stattdessen mit nur die Paginierung tun. Früh "hat nicht Hardware" x86 geholfen Virtualisierungslösungen haben Paginierung und Segmentation verbunden, weil x86 Paginierung nur zwei Schutzgebiete anbietet, wohingegen ein VMM / Gast OS / Gast-Anwendungsstapel drei braucht. Der Unterschied zwischen Paginierungs- und Segmentationssystemen ist nicht nur über die Speicherabteilung; Segmentation ist zu Benutzerprozessen als ein Teil der Speichermustersemantik sichtbar. Folglich statt des Gedächtnisses, das wie ein einzelner großer Vektor aussieht, wird er in vielfache Räume strukturiert.

Dieser Unterschied hat wichtige Folgen; ein Segment ist nicht eine Seite mit der variablen Länge oder einer einfachen Weise, den Adressraum zu verlängern. Segmentation, die ein einstufiges Speichermodell zur Verfügung stellen kann, in dem es keine Unterscheidung zwischen Prozess-Gedächtnis und Dateisystem gibt, besteht aus nur einer Liste von Segmenten in den potenziellen Adressraum des Prozesses kartografisch dargestellte (Dateien).

Das ist nicht dasselbe als die Mechanismen, die durch Anrufe wie mmap und Win32's MapViewOfFile zur Verfügung gestellt sind, weil Zwischendateizeigestöcke nicht arbeiten, wenn sie Dateien in halbwillkürliche Plätze kartografisch darstellen. In Multics wird eine Datei (oder ein Segment von einer Mehrsegment-Datei) in ein Segment im Adressraum kartografisch dargestellt, so werden Dateien immer an einer Segment-Grenze kartografisch dargestellt. Eine Verbindungsabteilung einer Datei kann Zeigestöcke enthalten, für die ein Versuch, den Zeigestock in ein Register zu laden oder dadurch anzuspielen, eine Falle verursacht. Der ungelöste Zeigestock enthält eine Anzeige des Namens des Segmentes, auf das sich der Zeigestock bezieht und ein Ausgleich innerhalb des Segmentes; der Dressierer für die Falle stellt das Segment in den Adressraum kartografisch dar, stellt die Segment-Zahl in den Zeigestock, ändert das Anhängsel-Feld im Zeigestock, so dass es nicht mehr eine Falle verursacht, und zum Code zurückkehrt, wo die Falle vorgekommen ist, die Instruktion wiederdurchführend, die die Falle verursacht hat. Das beseitigt das Bedürfnis nach einem linker völlig und arbeitet, wenn verschiedene Prozesse dieselbe Datei in verschiedene Plätze in ihren privaten Adressräumen kartografisch darstellen.

Siehe auch

  • Computergedächtnis
  • Speicheradresse
  • Adressraum
  • Virtueller Adressraum
  • Zentraleinheitsdesign
  • Seite, (rechnend)
  • Seitentisch
  • Paginierung
  • Arbeitssatz
  • Speicherverwaltungseinheit
  • Algorithmen des geheimen Lagers
  • Seitenersatzalgorithmus
  • Segmentation (Gedächtnis)
  • System/38
  • Speichermanagement
  • Speicherzuteilung
  • Geschützte Weise, eine x86 Weise, die virtuelles Gedächtnis berücksichtigt.

Referenzen

Weiterführende Literatur

  • Hennessy, John L.; und Patterson, David A.; Computerarchitektur, Eine Quantitative Annäherung (internationale Standardbuchnummer 1-55860-724-2)

Links


Virtuelle Maschine / Lästige Streitigkeit
Impressum & Datenschutz