"Speichermodell" ist sowohl ein Konzept auf niedriger als auch (relativ) hoher Ebene.
Früher herrschte ein gewisser "Krieg" zwischen Prozessoren mit einem segmentierten Speichermodell und solchen mit einem "ausgelagerten" oder "abgebildeten" Speichermodell. Die Maschinen der Burroughs B5000-Serie und die Plessey 250 verwendeten ein segmentiertes Speichermodell mit "Fähigkeiten" (oder "Deskriptoren"). Das heißt, der physische Speicher wurde nicht als konzeptionelle Seiten mit fester Größe verwaltet, sondern als Segmente mit variabler Länge, wobei jedes Segment einer logischen Entität (z. B. einer Prozedur oder einem Objekt) entspricht. Zur Adressierung zwischen Segmenten wurden "Fähigkeitsregister" verwendet, die nur geschützt geladen werden konnten und die die physikalische Adresse eines Segments, die Länge des Segments und die Berechtigungen (z. B. Lesen / Schreiben / Ausführen) enthielten, die ausgeführt wurden Programm wurde gegeben, um das Segment zu verweisen.
Diese Systeme liefen zufrieden, als "ausgelagerte" Systeme immer noch Probleme hatten, den Boden zu erreichen.
Der ursprüngliche PC basierte auf dem 8086-Prozessor, der die segmentierte Architektur eines armen Mannes unterstützen sollte. Es gab IIRC, vier Segmentregister, die ausgewählt werden konnten, um zu einem allgemeinen 16-Bit-Registerwert hinzugefügt zu werden, um eine 20-Bit-Adresse zu erzeugen. Die Theorie war, dass diese Register in einer Software verwaltet werden, die der Verwaltung der Burroughs- und Plessey-Systeme mit etwas mehr Hardwareunterstützung ähnelt. Bevor jedoch eine gute Software zur Nutzung dieser Funktion erstellt werden konnte, wurde DOS auf den 8086 gekludert, so dass die Funktion nie wirklich effektiv genutzt wurde.
Was nun besser ist, spielt keine Rolle mehr, da das segmentierte Modell in keiner "realen" (nicht experimentellen) Umgebung existiert. Aber damals schnitt das segmentierte Modell im Allgemeinen besser ab und ermöglichte es dem Betriebssystem, robuster zu sein. Der größte negative Faktor war, dass es den Compilern und in gewissem Umfang den Programmierern Beschränkungen auferlegte, die den Einstellungen vieler Programmierer im "Wilden Westen" damals und heute nicht entsprachen.
Das "ausgelagerte" Modell
Bei einem "ausgelagerten" Modell wird davon ausgegangen, dass der Adressraum in "Seiten" einer bestimmten Größe unterteilt ist (obwohl in einigen Fällen mehrere verschiedene Seitengrößen unterstützt werden). Im Allgemeinen liegt die Seitengröße irgendwo zwischen 256 Byte und 64 KB (immer eine Potenz von 2). Es wird auch angenommen, dass die Hardware irgendeine Art von Unterstützung für die Adressumsetzung enthält, so dass "logische" Adressen (Adressen im "Adressraum" des Programms) "physikalischen" Adressen (Adressen im RAM) zugeordnet werden können.
Ein ausgelagertes Modell kann aus zwei Hauptgründen implementiert werden:
- Mehrere unterschiedliche Threads / Prozesse können unterschiedliche Adressräume haben, wobei jeder mit "Null" (oder einer anderen Standardadresse) beginnt, ohne dass das Betriebssystem den gesamten möglichen Adressraum für einen Thread / Prozess als einen zusammenhängenden Block vorbelegen muss .
- Aktivierung des "virtuellen Speichers", indem einzelne Seiten im logischen Adressraum auf die Festplatte "ausgelagert" werden und später neu geladen werden, wenn das Programm versucht, auf sie zu verweisen.
Es gibt auch kleinere Funktionen der Hardware für die Seitenübersetzung, die verwendet werden können, z. B. das Festlegen von Lese- / Schreib- / Ausführungsberechtigungen, damit einige Seiten von Prozessen / Threads usw. "gemeinsam genutzt" werden können.
Das "flache" Modell
Ohne das Harvard-Modell zu berücksichtigen, das wohl das allererste Computerspeichermodell war, war das flache von Neumann-Speichermodell das erste Modell, das allgemeine Verwendung fand. Dies ist im Grunde genommen das - ein "flacher" Adressraum von nicht unterscheidbaren Wörtern (erst sehr spät im Spiel bytes), der an der Adresse Null begann und sich nach oben bis zur "Spitze" des verfügbaren Speichers fortsetzte. Ein Teil des Speichers am "unteren" oder "oberen" Ende des Speichers wäre für eine Art "Lader" reserviert, der Rest steht dem einzelnen ausführenden Programm zur Verfügung. Es wurde jeweils ein Programm ausgeführt, wobei das Programm alle bis auf diesen kleinen reservierten RAM-Bereich verwenden konnte.
Langsam änderten sich die Dinge, und der kleine reservierte Bereich wurde größer und enthielt eine Art Betriebssystem, aber immer nur ein Programm gleichzeitig. Im weiteren Verlauf der Zeit wurden verschiedene Tricks erfunden, die es beispielsweise bestimmten Spezialprogrammen ermöglichen, in einer "Ecke" des Speichers ausgeführt zu werden, Spool-Programme usw. mit den Programmen des Benutzers zu koexistieren.
Aber der Drang nach "Multiprogramming" übte Druck aus. Einige Systeme fügten grobe Adresszuordnungshardware hinzu, um zu ermöglichen, dass mehrere Programme jeweils ihren eigenen Adressraum haben. Andere Systeme erforderten, dass Programme "sich selbst verlagern", damit sie irgendwo im Speicher ausgeführt werden können und nicht mit einer bestimmten Adresse "verknüpft" werden.
Early Unix (unter anderem) handhabte den Multiprogramming-Job durch "Vertauschen" von Programmen: Ein Programm (geladen bei Adresse Null) würde so lange ausgeführt, bis es "blockiert" wird, um E / A zu erledigen, dann würde es "vertauscht" werden (in seinem Vollständig, einschließlich aller Codes und Daten) auf die Festplatte und ein anderes Programm "getauscht".
Zum größten Teil haben sich diese Techniken jedoch langsam zu verschiedenen Formen von Page-Mapping-Speichermodellen weiterentwickelt (oder vielleicht sogar weiterentwickelt).