Hinweise zum Betriebssystem – Speicherverwaltung

Hinweise zum Betriebssystem – Speicherverwaltung

3. Speicherverwaltung

3.1 Grundlagen der Speicherverwaltung

3.1.1 Übersicht über die Speicherverwaltung

Speicher ist ein wichtiger Teil des Computersystems und eine wertvolle und knappe Ressource im Computersystem.Die Speicherverwaltung im Betriebssystem bezieht sich auf die Verwaltung des Speichers (auch Hauptspeicher genannt. Standardmäßig bezieht sich der Speicher in diesem Kapitel auf Speicher), was eine der wichtigen Funktionen des Betriebssystems ist.

Speicherverwaltungsfunktionen

  • Speicherzuweisung und -freigabe. Das Betriebssystem übernimmt die Zuweisung und Verwaltung des Speicherplatzes, befreit Programmierer von der Mühe der Speicherplatzzuweisung und verbessert die Programmiereffizienz. Zu diesem Zweck sollte sich das System die Nutzung des Speicherplatzes merken: Speicherzuweisung implementieren; vom System oder Benutzer freigegebenen Speicherplatz zurückgewinnen.
  • Adresstransformation. In einer Multiprogrammierungsumgebung stimmt die logische Adresse im Programm normalerweise nicht mit der physischen Adresse im Speicher überein. Daher muss die Speicherverwaltung eine Adresskonvertierungsfunktion bereitstellen, um die logische Adresse in eine physische Adresse umzuwandeln.
  • Erweitern Sie den Speicher. Mithilfe der virtuellen Speichertechnologie oder anderer automatischer Overlay-Technologien wird Benutzern ein Adressraum zur Verfügung gestellt, der größer als der Speicherplatz ist, wodurch der Zweck der logischen Erweiterung der Speicherkapazität erreicht wird.
  • Lagerschutz. Es wird sichergestellt, dass jeder Job, der in den Speicher gelangt, in seinem eigenen Speicherplatz abläuft, ohne sich gegenseitig zu beeinträchtigen. Es muss verhindert werden, dass ein Vorgang aufgrund von Fehlern andere Vorgänge beschädigt, und es muss verhindert werden, dass er Systemprogramme beschädigt. Dieser Schutz wird im Allgemeinen durch eine Kombination aus Hardware und Software erreicht.

Anwendungen kompilieren, verknüpfen und laden

Der Anwendungsprozess von der vom Benutzer geschriebenen Quelldatei bis zum im Speicher ausgeführten Prozess ist grob in drei Phasen unterteilt: Erstens,Der Quellcode wird durch den Compiler (Compiler) in mehrere Objektmodule kompiliert. Zweitens werden die kompilierten Objektmodule und erforderlichen Bibliotheksfunktionen über den Linker (Linker) zu einem vollständigen Lademodul (LoadModule) verknüpft. Anschließend werden diese geladen Laden Sie Module über den Loader (Loader) in den Speicher und führen Sie sie aus. Einfach ausgedrückt durchläuft der Prozess vom Quellprogramm bis zur Ausführung drei Schritte : Kompilieren, Verknüpfen und Laden .

Fügen Sie hier eine Bildbeschreibung ein

Fügen Sie hier eine Bildbeschreibung ein

Es gibt drei Möglichkeiten, das Programm zu verknüpfen:

  • Statische Verlinkung.bevor das Programm läuftVerknüpfen Sie zunächst jedes Zielmodul und die erforderlichen Bibliotheken zu einem vollständigen ausführbaren Programm und zerlegen Sie es später nicht mehr.
  • Dynamische Verknüpfung beim Laden. Wenn eine Reihe von Zielmodulen, die nach dem Kompilieren eines Anwendungsprogramms erhalten wurden, in den Speicher geladen werden, wird eine dynamische Verknüpfungsmethode zum Laden und Verknüpfen verwendet.
  • Dynamische Verknüpfung zur Laufzeit. bisWährend das Programm läuftModule werden nur dann verknüpft, wenn sie benötigt werden. Diese Verknüpfungsmethode verschiebt die Verknüpfung einiger Module bis zur Ausführung. Das heißt, wenn während des Ausführungsprozesses festgestellt wird, dass ein aufgerufenes Modul nicht in den Speicher geladen wurde, wird das Modul sofort gefunden und in den Speicher geladen. , und verknüpfen Sie es dann mit dem Anrufermodul. Jedes Zielmodul, das während der Ausführung nicht verwendet wird, wird nicht in den Speicher übertragen und mit dem Lademodul verknüpft. Dies verkürzt nicht nur den Ladevorgang des Programms, sondern spart auch viel Speicherplatz und erleichtert so Änderungen und Aktualisierungen . , um die gemeinsame Nutzung von Zielmodulen zu erleichtern.

Es gibt drei Möglichkeiten, das Programm zu laden:

  • Auf jeden Fall geladen.Kennen Sie zur Kompilierungszeit die physische Adresse im Speicher, an der sich das Programm befinden wird, generiert der Compiler Objektcode, der physische Adressen enthält. Dieser Ansatz ist nicht für Multiprogramming geeignet.

  • Verschiebbare Halterungen.Je nach aktueller Speichersituation wird das Lademodul an die entsprechende Stelle im Speicher geladen. Die Adresstransformation wird in der Regel einmal beim Laden durchgeführt und ändert sich danach nicht mehr.Diese Methode wird auch als statische Verschiebung bezeichnet. Die Implementierung der statischen Verschiebung ist sehr einfach: Wenn das Betriebssystem einen fortlaufenden Hauptspeicherbereich mit einer bestimmten Adresse als Startadresse für das Programm zuweist, wird bei der Verschiebung die logische Adresse der Anweisung oder des Operanden im Programm zur Startadresse hinzugefügt Adresse. Habe die physische Adresse erhalten.

    Fügen Sie hier eine Bildbeschreibung ein

  • Führen Sie die Last dynamisch aus.Ermöglicht dem Programm, während der Ausführung Speicherorte im Speicher zu verschieben. Alle Adressen nach dem Laden des Lademoduls in den Speicher sind relative Adressen. Während der Programmausführung wird die relative Adresse des Programms oder der Daten, auf die zugegriffen werden soll, nur dann in eine physische Adresse umgewandelt, wenn auf die entsprechenden Anweisungen oder Daten zugegriffen wird.. Da der Verschiebungsprozess Schritt für Schritt durch die Ausführung von Anweisungen während der Programmausführung abgeschlossen wird, wird er auch als dynamische Verschiebung bezeichnet.Die Implementierung der dynamischen Verschiebung basiert auf dem Hardware-Adresskonvertierungsmechanismus. Die einfachste Implementierungsmethode ist die Verwendung eines Verschiebungsregisters. Wenn die Ausführung eines Jobs beginnt, ist das Betriebssystem dafür verantwortlich, die Startadresse des Jobs im Hauptspeicher in das Verschiebungsregister zu senden. Später, während der gesamten Ausführung des Jobs, wird das System bei jedem Zugriff auf den Speicher automatisch darauf zugreifen Übertragen Sie die Startadresse des Auftrags in das Verschiebungsregister. Der Inhalt des Standortregisters wird zur logischen Adresse hinzugefügt, um die physikalische Adresse zu erhalten, die der logischen Adresse entspricht.

    Fügen Sie hier eine Bildbeschreibung ein

Das Merkmal der statischen Verlagerung besteht darin, dass sie einfach zu implementieren ist, ohne dass ein Hardware-Adresskonvertierungsmechanismus hinzugefügt werden muss. Es ist jedoch erforderlich, dass jedem Programm ein zusammenhängender Speicherbereich zugewiesen wirdWenn der Speicherplatz nicht für das gesamte Programm ausreicht, kann er nicht zugewiesen werden und kann während der Ausführung des Programms nicht verschoben werden. Außerdem kann kein weiterer Speicherplatz beantragt werden, was die gemeinsame Nutzung von Programmen und Daten erschwert.

Das Merkmal der dynamischen Verschiebung besteht darin, dass das Programm diskontinuierlichen Speicherbereichen zugewiesen werden kann, ein Teil des Codes geladen werden kann, bevor das Programm ausgeführt wird, und dann der Speicher während der Ausführung des Programms nach Bedarf dynamisch zugewiesen werden kann., was die gemeinsame Nutzung von Programmsegmenten erleichtert und Benutzern einen Adressraum bieten kann, der viel größer ist als der Speicherplatz des Hauptspeichers. Die dynamische Verlagerung erfordert zusätzliche Hardwareunterstützung und der Softwarealgorithmus für die Speicherverwaltung ist relativ komplex.

Bei einem Umzug lautet die Umrechnungsformel von einer logischen Adresse in eine physische Adresse :

Physikalische Adresse = Inhalt des Basisadressregisters + logische Adresse

Logische Adresse und physische Adresse

Die logische Adresse bezieht sich auf den vom Programm generierten Offset-Adressteil, der sich auf das Segment bezieht (bezogen auf die Seite, da sie nur für den Benutzer sichtbar ist) .Nachdem der Quellcode kompiliert wurde, ist die im Zielprogramm verwendete Adresse die logische Adresse und der Bereich der logischen Adresse ist der logische Adressraum. Wenn der Compiler den Quellcode kompiliert, beginnt er immer mit der Adressierung ab Einheit 0. Die Adressen im Adressraum beginnen relativ zu 0, daher wird die logische Adresse auch als relative Adresse bezeichnet.. Mehrere im System laufende Prozesse haben möglicherweise dieselbe logische Adresse. Wenn diese logischen Adressen jedoch physischen Adressen zugeordnet werden, werden sie zu unterschiedlichen Standorten.

Die physische Adresse (Physical Address) bezieht sich auf das Adresssignal für den physischen Speicher, das auf dem externen Adressbus der CPU erscheint. Es handelt sich um die endgültige Ergebnisadresse nach der logischen Adresstransformation. Der physische Adressraum bezieht sich auf die Sammlung physischer Adresseinheiten im Speicher. Wenn ein Prozess während des Betriebs auf Zugriffsanweisungen oder Daten zugreifen muss, werden diese anhand der physischen Adresse aus dem Hauptspeicher abgerufen. Die physische Adresse ist für normale Benutzer völlig transparent, und Benutzer müssen sich nur um die logische Adresse des Programms kümmern.Der Konvertierungsprozess von der logischen Adresse in die physische Adresse wird automatisch von der Hardware abgeschlossen. Dieser Konvertierungsprozess wird als Adressverlagerung bezeichnet.

Speicherschutz

Der Speicherschutz soll verhindern, dass ein Job das Betriebssystem oder andere Jobs absichtlich oder unabsichtlich beschädigt.. Zu den häufig verwendeten Speicherschutzmethoden gehören die Limit-Register-Methode und die Speicherschutzschlüsselmethode .

  • Grenzen-Register-Methode

    Es gibt zwei Möglichkeiten , den Speicherschutz mithilfe der gebundenen Registermethode zu implementieren : der oberen gebundenen Registermethode, der unteren gebundenen Registermethode und der Basisadresse und der Registermethode mit begrenzter Länge .

    • Ober- und Untergrenzen-Registermethoden. Die Ober- und Untergrenzenregister werden zum Speichern der Endadresse bzw. der Startadresse des Jobs verwendet.Während der Ausführung des Jobs wird jede Adresse, die auf den Speicher zugreift, mit dem Inhalt dieser beiden Register verglichen. Liegt sie außerhalb des Bereichs, wird ein schützender Interrupt generiert.
    • Methoden für Basisadressen und Register mit begrenzter Länge. Die Basisadressen- und Grenzregister werden zum Speichern der Startadresse des Jobs bzw. der Adressraumlänge des Jobs verwendet. Das Basisadressregister wird auch als Verschiebungsregister bezeichnet, und das Grenzregister wird auch als Grenzadressregister bezeichnet.Während der Ausführung des Jobs werden die relative Adresse jedes Speichers, auf den zugegriffen wird, und der Wert im Relocation-Register addiert, um die physische Adresse des Jobs zu bilden; das Limit-Register wird mit der relativen Adresse verglichen. Wenn der Wert des Limit-Registers ist überschritten, wird eine Fehlermeldung ausgegeben. Unterbrechen Sie das Signal außerhalb der Grenzen und stoppen Sie den Auftrag.
  • Speicherschutzschlüsselmethode

    Weisen Sie jedem Speicherblock einen separaten Schutzschlüssel zu, der wie ein „Schloss“ wirkt.. Im Gegensatz zu Partitionsspeicherblöcken besteht eine Partition aus mehreren Speicherblöcken, wobei jeder Speicherblock die gleiche Größe hat und die Größe einer Partition ein ganzzahliges Vielfaches des Speicherblocks sein muss. Auch,Jedem Auftrag, der in das System gelangt, wird außerdem ein Schutzschlüssel zugewiesen, der einem „Schlüssel“ entspricht.Überprüfen Sie bei laufendem Job, ob „Schlüssel“ und „Schloss“ übereinstimmen. Wenn sie nicht übereinstimmen, gibt das System ein Schutzunterbrechungssignal aus und stoppt den Job.

3.1.2 Abdeckungs- und Vermittlungstechnik

Abdeckungstechnologie

Die Overlay-Technologie wurde hauptsächlich in frühen Betriebssystemen verwendet, da die Speicherkapazität in frühen Einzelbenutzersystemen im Allgemeinen gering und der verfügbare Speicherplatz begrenzt war. Einige große Jobs konnten nicht gleichzeitig in den Speicher geladen werden. Dies verursachte den Widerspruch zwischen groß Arbeitsplätze und kleine Speicher entstanden, und zu diesem Zweck wurde Abdeckungstechnologie eingeführt.

Die sogenannte Berichterstattungstechnologie besteht darin, ein großes Programm in eine Reihe von Berichterstattungen zu unterteilen, und jede Berichterstattung ist eine relativ unabhängige Programmeinheit. Eine Gruppe von Overlays, die beim Ausführen des Programms nicht gleichzeitig in den Speicher geladen werden müssen, wird als Abdeckungssegment bezeichnet. Dieses Overlay-Segment wird demselben Speicherbereich zugewiesen, und dieser Speicherbereich wird als Overlay-Bereich bezeichnet entspricht eins zu eins dem Overlay-Segment . Damit ein Abdeckungsbereich von jeder Abdeckung im entsprechenden Abdeckungssegment zu unterschiedlichen Zeiten gemeinsam genutzt werden kann, sollte seine Größe natürlich durch die maximale Abdeckung im Abdeckungssegment bestimmt werden.

Fügen Sie hier eine Bildbeschreibung ein

Die Module A und B bilden das Abdeckungssegment 1 und die Module C, D und E bilden das Abdeckungssegment 2.Um eine echte Abdeckung zu erreichen, sollte der entsprechende Abdeckungsbereich die Größe der größten Abdeckung in jedem Abdeckungssegment haben. Nach Verwendung der Overlay-Technologie werden nur 80 KB Speicher benötigt, um das Benutzerprogramm auszuführen.

Schalttechnik

Mittel tauschenVerschieben Sie einen Teil (oder alle) eines Programms und Daten, die vorübergehend nicht verwendet werden, aus dem Speicher in den externen Speicher, um den erforderlichen Speicherplatz freizugeben, oder lesen Sie das angegebene Programm oder die angegebenen Daten aus dem externen Speicher in den entsprechenden Speicher und übertragen Sie die Speichererweiterungstechnologie von Control A das ihm Rechte überträgt und die Ausführung auf dem System ermöglicht. Die Zwischenplanung zwischen der dreistufigen Planung des Prozessors nutzt Switching-Technologie.

Das Merkmal der Swap-Technologie besteht darin, dass sie die Einschränkung aufhebt, dass ein Programm, sobald es in den Hauptspeicher gelangt, bis zum Ende ausgeführt wird, die Größe des laufenden Prozesses jedoch weiterhin durch den tatsächlichen Hauptspeicher begrenzt ist.

  • Das Auslagern erfordert Backup-Speicher, in der Regel auf schnellen Festplatten. Es muss groß genug sein und einen direkten Zugriff auf diese Speicherbilder ermöglichen.
  • Um die CPU effizient zu nutzen, muss die Ausführungszeit jedes Prozesses länger sein als die Austauschzeit, und der Faktor, der die Austauschzeit beeinflusst, ist hauptsächlich die Übertragungszeit.
  • Wenn Sie einen Prozess auslagern, müssen Sie sicherstellen, dass der Prozess vollständig im Leerlauf ist.
  • Der Auslagerungsspeicher wird normalerweise als ganzer Festplattenblock behandelt und ist vom Dateisystem unabhängig.
  • Der Austausch beginnt normalerweise, wenn viele Prozesse ausgeführt werden und der Speicherplatz knapp ist, und wird angehalten, wenn die Belastung des Systems abnimmt.
  • Gewöhnlicher Austausch wird nicht häufig verwendet, aber einige Varianten der Austauschtechnologie spielen in vielen Systemen (z. B. UNIX-Systemen) immer noch eine Rolle.

3.1.3 Kontinuierliche Allokationsmanagementmethode

Was ist interne Fragmentierung im Vergleich zu externer Fragmentierung?

Abhängig von den Umständen, unter denen Fragmente auftreten, können Fragmente in interne Fragmente und externe Fragmente unterteilt werden.Interne Fragmentierung bezieht sich auf den Speicherplatz, der dem Job zugewiesen wurde, aber nicht genutzt werden kann. Externe Fragmentierung bezieht sich auf die Speicherblöcke im System, die dem Job nicht zugewiesen wurden, aber nicht neuen Prozessen zugewiesen werden können, die Speicherplatz beantragen Die Fragmente sind zu klein.Wie unten erwähnt, gibt es eine interne Fragmentierung bei der festen Partitionszuweisung und eine externe Fragmentierung bei der dynamischen Partitionszuweisung. Ein einfaches Verständnis ist:Wenn der von einem Job belegte Speicherbereich nicht voll ist, liegt eine interne Fragmentierung vor. Wenn zwischen Jobs ein Speicherbereich vorhanden ist, der keinem Job zugewiesen ist, aber keinem Job zugewiesen werden kann, handelt es sich um eine externe Fragmentierung.

einzelne zusammenhängende Zuordnung

Die einmalige kontinuierliche Zuweisung ist die einfachste Speicherverwaltungsmethode und kann normalerweise nur in Einzelbenutzer- und Einzeltask-Betriebssystemen verwendet werden.Diese Speicherverwaltungsmethode unterteilt den Speicher in zwei zusammenhängende Speicherbereiche. Ein Speicherbereich ist dem Betriebssystem fest zugewiesen und befindet sich normalerweise im Teil des Speichers mit niedriger Adresse. Der andere Speicherbereich wird von Benutzerjobs verwendet. Normalerweise nehmen Benutzerjobs nur einen Teil des gesamten zugewiesenen Speicherplatzes ein und der verbleibende Teil wird tatsächlich verschwendet.

Fügen Sie hier eine Bildbeschreibung ein

Es wird eine einzelne kontinuierliche Zuweisungsmethode verwendetstatische Zuordnung, geeignet für Einkanalprogramme, und Abdecktechnik einsetzbar.Sobald ein Job in den Speicher gelangt, muss er warten, bis er beendet ist, bevor der Speicher freigegeben werden kann.. Daher unterstützt diese Zuweisungsmethode nicht die Implementierung des virtuellen Speichers und kann keine gemeinsame Nutzung des Hauptspeichers durch mehrere Programme realisieren.

Der Vorteil einer einzigen kontinuierlichen Zuweisungsmethode besteht darin, dass sie einfach zu verwalten ist, wenig Software- und Hardwareunterstützung erfordert, für Benutzer leicht zu verstehen und zu verwenden ist und nicht das Problem der Beeinträchtigung durch andere Benutzer aufweist. Sein Nachteil besteht darin, dass es nur in einem Einzelbenutzer- und Einzeltask-Betriebssystem verwendet werden kann und nur ein Job zur Ausführung in den Speicher geladen wird, was zu einer geringen Auslastung verschiedener Ressourcen führt. Eine einzelne zusammenhängende Zuordnung führt zu interner Fragmentierung .

Feste Partitionszuordnung

Die Methode der festen Partitionszuweisung (auch als feste Partitionsspeicherverwaltung bezeichnet) ist die früheste Speicherverwaltungsmethode, mit der mehrere Programme ausgeführt werden können.Es unterteilt den Speicherplatz in mehrere Partitionen fester Größe und in jede Partition kann ein Programm geladen werden. Die Größe der Partition kann variieren, muss aber vorab festgelegt werden und kann zur Laufzeit nicht geändert werden. Wenn eine freie Partition vorhanden ist, wird ein Auftrag geeigneter Größe aus der Sicherungswarteschlange ausgewählt, der geladen und ausgeführt werden soll.. Bei der festen Partitionszuweisung werden Programme normalerweise durch statische Verschiebung in den Speicher geladen . Um eine feste Partitionszuweisung zu erreichen, muss das System eine Partitionsbeschreibungstabelle erstellen, um die für die Zuweisung verfügbaren Partitionsnummern, die Größe der Partition, die Startadresse und den Status der Partition aufzuzeichnen, normalerweise sortiert nach der Partitionsgröße.

Fügen Sie hier eine Bildbeschreibung ein

Wenn ein Benutzerprogramm in den Speicher geladen werden soll, ruft das Speicherzuordnungsprogramm die Partitionsbeschreibungstabelle ab, findet in der Tabelle eine nicht zugewiesene Partition, die die Anforderungen erfüllt, weist sie dem Programm zu und ändert dann den entsprechenden Partitionstabelleneintrag in der Partitionsbeschreibungstabelle. Status; Wenn keine Partition ausreichender Größe gefunden werden kann, wird die Speicherzuweisung für das Programm verweigert. Wenn die Programmausführung abgeschlossen ist und die Speicherressourcen nicht mehr benötigt werden, wird die vom Programm belegte Partition freigegeben und das Verwaltungsprogramm muss lediglich den Status der entsprechenden Partition auf nicht zugewiesen setzen. Die Größe der Partitionen kann gleich oder ungleich sein.

  • Die Partitionen sind gleich groß. Der Mangel an Flexibilität führt zu einer Verschwendung von Speicherplatz. Wenn ein Programm zu groß ist, reicht eine Partition nicht aus, um das Programm zu laden, was dazu führt, dass das Programm nicht ausgeführt werden kann.
  • Die Partitionen sind nicht gleich groß.Der Speicherbereich kann in mehrere kleinere Partitionen, eine entsprechende Anzahl mittlerer Partitionen und eine kleine Anzahl großer Partitionen unterteilt werden.. Je nach Größe des Programms können entsprechende Partitionen zugewiesen werden.

Der Vorteil der festen Partitionszuweisung besteht darin, dass sie für die einfachste Speicherzuweisung in Systemen mit mehreren Programmierungen verwendet werden kann. Der Nachteil besteht darin, dass sie einen Hauptspeicherbereich nicht mit mehreren Prozessen teilen kann, die Auslastungsrate niedrig ist und eine interne Fragmentierung auftritt .

Dynamische Partitionszuweisung

Die dynamische Partitionszuteilung, auch als variable Partitionszuteilung bekannt, ist eine Partitionierungsmethode, die den Speicher dynamisch aufteilt.Bei dieser Zuweisungsmethode wird der Hauptspeicher nicht im Voraus in Partitionen unterteilt. Stattdessen werden die Partitionen dynamisch entsprechend der Größe des Jobs erstellt, wenn der Job in den Hauptspeicher gelangt, und die Größe der Partition entspricht genau den Anforderungen des Jobs . Daher ist die Größe der Partitionen im System variabel und auch die Anzahl der Partitionen ist variabel.

  • Datenstrukturen bei der Partitionszuordnung

    Um eine dynamische Partitionszuordnung zu erreichen, müssen im System auch entsprechende Datenstrukturen zur Aufzeichnung der Speichernutzung eingerichtet werden. Häufig verwendete Datenstrukturen sind wie folgt.

    • Kostenlose Partitionstabelle. Richten Sie eine Tabelle mit freien Partitionen ein, um freie Partitionen im System zu registrieren. Jede freie Partition entspricht einem Tabelleneintrag. Jeder Tabelleneintrag enthält die Partitionsnummer, die Startadresse, die Größe und den Status.

      Fügen Sie hier eine Bildbeschreibung ein

    • Kostenlose Partitionskette. Verwenden Sie den Link-Head-Zeiger, um die freien Partitionen im Speicher zu verknüpfen und eine Kette freier Partitionen zu bilden. Abbildung 3-8 zeigt ein Beispiel einer freien Partitionskette.Die Implementierungsmethode besteht darin, die ersten paar Bytes jeder freien Partition zum Speichern von Steuerinformationen zu verwenden, die die Größe der freien Partition und den Zeiger auf die nächste freie Partition speichern.

      Fügen Sie hier eine Bildbeschreibung ein

  • Algorithmus zur Partitionszuweisung

    Um einen Job in den Speicher zu laden, sollte gemäß einem bestimmten Zuordnungsalgorithmus eine Partition, die die Jobanforderungen erfüllt, aus der Tabelle der freien Partitionen (oder der Kette der freien Partitionen) ausgewählt und dem Job zugewiesen werden.Wenn die Kapazität dieser freien Partition größer ist als die vom Job angeforderte Speicherplatzkapazität, wird ein Teil der Partition dem Job zugewiesen und der verbleibende Teil verbleibt weiterhin in der Tabelle der freien Partitionen (oder der Kette der freien Partitionen). Gleichzeitig werden die relevanten Informationen in der freien Partitionstabelle (oder freien Partitionskette) geändert

    • Erster Adaptionsalgorithmus. Verwenden Sie eine verknüpfte Liste, um eine Warteschlange in der Reihenfolge der aufsteigenden Adresse der freien Partitionen zu bilden. Jedes Mal, wenn Sie einem Prozess Speicher zuweisen müssen,Beginnen Sie mit der Suche am Anfang der Warteschlange und folgen Sie der verknüpften Liste, bis Sie eine ausreichend große freie Partition finden.Anschließend weisen Sie dem Anforderer entsprechend der Auftragsgröße einen Teil des Speicherplatzes von der Partition zu. Die verbleibenden freien Partitionen verbleiben weiterhin in der Tabelle der freien Partitionen (oder der Kette der freien Partitionen). Wenn von Anfang bis Ende keine qualifizierte Partition vorhanden ist, schlägt die Zuweisung fehl.
      • Vorteile: Priorisieren Sie die Verwendung freier Partitionen im Teil des Speichers mit niedriger Adresse, wodurch die großen freien Partitionen im Teil mit hoher Adresse ohne interne Fragmentierung erhalten bleiben.
      • Nachteile: Da der Teil mit niedriger Adresse kontinuierlich unterteilt ist, gibt es unter dem Ende mit niedriger Adresse viele kleine freie Partitionen (externe Fragmente), die schwer zu verwenden sind, und jede Suche beginnt mit dem Teil mit niedriger Adresse, was zweifellos die für die Suche erforderliche Zeit erhöht für verfügbare freie Partitionen. s Kosten.
    • Passen Sie den Algorithmus beim nächsten Mal an. Dieser Algorithmus wird auch als iterativer erster Adaptionsalgorithmus bezeichnet.Das heißt, auf der Grundlage des ersten Anpassungsalgorithmus wird die Warteschlange in eine kreisförmige Warteschlange umgewandelt (die freien Partitionen sind immer noch in der Reihenfolge aufsteigender Adressen angeordnet) und die freien Partitionen werden nicht jedes Mal vom Kopf der Warteschlange gefunden , aber von der zuletzt gefundenen freien Partition . Beginnen Sie mit der Suche nach der nächsten Partition von
      • Vorteile: Dadurch wird die Verteilung freier Partitionen gleichmäßiger und die Kosten für die Suche nach freien Partitionen sinken.
      • Nachteile: Dies führt dazu, dass keine großen freien Partitionen vorhanden sind.
    • Best-Fit-Algorithmus. Es ist erforderlich, dass die freien Partitionen in aufsteigender Reihenfolge ihrer Kapazität angeordnet werden . Jedes Mal, wenn Speicherplatz für einen Job zugewiesen wird,Weisen Sie einem Job immer die kleinste freie Partition zu, die den Platzbedarf decken kann. Dies führt zur kleinsten freien Speicherpartition.
      • Vorteile: Diese Methode weist dem Job immer die am besten geeignete Partition zu und behält große Partitionen bei.
      • Nachteile: Es entsteht viel fragmentierter Raum, der schwer zu nutzen ist.
    • Worst-Fit-Algorithmus. Die freien Partitionen müssen in absteigender Reihenfolge der Kapazität angeordnet werden . Jedes Mal, wenn Speicherplatz für einen Job zugewiesen wird,Weisen Sie einem Job immer den größten Speicherplatz zu, der den Anforderungen entspricht
      • Vorteile: Dadurch wird die verbleibende freie Partition nach der Zuweisung von Jobs relativ groß und reicht aus, um andere Jobs zu laden.
      • Nachteile: Da die größte freie Partition immer zuerst zugewiesen wird, wird die Speicherplatzanforderung eines großen Auftrags nicht erfüllt, wenn er eintrifft.
  • Partitionsrecycling

    Wenn die Jobausführung beendet ist, sollte das System die verwendeten Partitionen wiederherstellen. Basierend auf der Größe und der ersten Adresse der zurückgeforderten Partition prüft das System, ob in der Tabelle der freien Partitionen (oder der Kette der freien Partitionen) benachbarte freie Partitionen vorhanden sind. Wenn benachbarte freie Partitionen vorhanden sind, werden diese zu einem großen freien Bereich zusammengeführt und geändert die relevanten Partitionen. Statusinformationen. Es gibt die folgenden vier Situationen, in denen eine wiederhergestellte Partition an eine vorhandene freie Partition angrenzt:

    Fügen Sie hier eine Bildbeschreibung ein

    • Der Recyclingbereich grenzt an eine freie Trennwand, wie in Abbildung 3-9a dargestellt.Zu diesem Zeitpunkt sollten der Recyclingbereich und die obere angrenzende Trennwand F1 zu einer durchgehenden freien Trennwand zusammengeführt werden. Die erste Adresse der zusammengeführten Partition ist die erste Adresse der freien Partition F1 und ihre Größe ist die Summe der beiden.
    • Neben dem Recyclingbereich befindet sich eine ungenutzte Trennwand, wie in Abbildung 3-9b dargestellt.Zu diesem Zeitpunkt sollten der Recyclingbereich und die nächste Partition F1 zu einer durchgehenden freien Partition zusammengeführt werden. Die erste Adresse der zusammengeführten Partition ist die erste Adresse des Recyclingbereichs und ihre Größe ist die Summe der beiden.
    • Der obere und untere Teil des Recyclingbereichs grenzt an eine freie Trennwand, wie in Abbildung 3-9c dargestellt.Zu diesem Zeitpunkt sollten der Recyclingbereich und F1 F2 zu einer durchgehenden freien Partition zusammengeführt werden. Die erste Adresse der zusammengeführten Partition ist die erste Adresse von F1, und ihre Größe ist die Summe der drei. F2 sollte aus der Tabelle der freien Partitionen (freie Partition) gelöscht werden.
    • Der Rückgewinnungsbereich grenzt nicht an eine freie Trennwand,Erstellen Sie zu diesem Zeitpunkt einen separaten Tabelleneintrag, geben Sie die Partitionsgröße und -adresse sowie andere Informationen ein und fügen Sie sie an der entsprechenden Stelle der Tabelle der freien Partitionen (oder der Kette der freien Partitionen) hinzu., wie in Abbildung 3-9d dargestellt.
  • Dynamische Verwaltung der Partitionszuordnung

    Bei der Partitionsspeicherverwaltungsmethode muss der Job in einen kontinuierlichen Speicherbereich geladen werden.. Wenn im System mehrere kleine Partitionen vorhanden sind, deren Gesamtkapazität größer ist als der zu ladende Job, die aber nicht zusammenhängend sind, kann der Job nicht in den Speicher geladen werden. Beispielsweise gibt es im Speicher 4 leere Partitionen, die nicht benachbart sind. Ihre Größe beträgt 20 KB, 30 KB, 15 KB bzw. 25 KB und die Gesamtgröße beträgt 90 KB. Wenn jedoch ein 40-KB-Auftrag eintrifft, kann der Auftrag nicht in den Speicher geladen werden, da die Kapazität aller freien Partitionen im System weniger als 40 KB beträgt. Daher ist eine dynamische Verwaltung der Partitionszuweisung erforderlich.

    • Spleißtechnik. Die sogenannten Fragmente (auch Brüche genannt) sindBezieht sich auf den Speicherplatz im Speicher, der nicht genutzt werden kann. Im Partitionsspeicherverwaltungsmodus belegen Fragmente im Speicher nach längerem Betrieb des Systems eine beträchtliche Menge an Speicherplatz.

      Eine Möglichkeit, das Fragmentierungsproblem zu lösen, besteht darin,Verschieben Sie alle zugewiesenen Partitionen im Speicher an ein Ende des Hauptspeichers, sodass mehrere kleine freie Bereiche, die ursprünglich verstreut waren, zu einem großen freien Bereich verbunden werden. Diese Methode zum Zusammenfügen mehrerer verstreuter kleiner Partitionen zu einer großen Partition durch Bewegung wird als Spleißen oder Verdichten bezeichnet und kann auch als Verdichtung bezeichnet werden.

      Zusätzlich zu dem technischen Problem, wie das Spleißen durchgeführt wird, gibt es bei der Implementierung der Spleißtechnologie auch das Problem des Spleißzeitpunkts . Für dieses Problem gibt es zwei Lösungen.

      • Die erste Option istSofort verbinden, wenn eine Partition recycelt wird, sodass im Hauptspeicher immer nur ein zusammenhängender freier Bereich vorhanden ist. Das Spleißen ist jedoch zeitaufwändig und eine zu hohe Spleißfrequenz erhöht den Systemaufwand.
      • Die zweite Option istSplice, wenn keine ausreichend große freie Partition gefunden werden kann und die Gesamtkapazität die Jobanforderungen erfüllen kann. Die Häufigkeit des Spleißens auf diese Weise ist viel geringer als bei der ursprünglichen Lösung, die Verwaltung freier Partitionen ist jedoch etwas komplizierter.
    • Dynamische Partitionszuweisungstechnologie für die Verschiebung.Der dynamische Relocation-Partitionszuteilungsalgorithmus ist grundsätzlich derselbe wie der dynamische Partitionszuteilungsalgorithmus. Der einzige Unterschied zwischen den beiden besteht darin, dass die Spleißfunktion zu diesem Zuteilungsalgorithmus hinzugefügt wird . Normalerweise kann keine freie Partition gefunden werden, die groß genug ist, um die Jobanforderungen zu erfüllen , und das System-Splicing wird durchgeführt, wenn die Gesamtkapazität der mittleren und freien Partitionen größer ist als die Jobanforderungen.

  • Vor- und Nachteile der dynamischen Partitionszuweisung

    • Vorteil
      • Es erkennt, dass mehrere Programme den Hauptspeicher gemeinsam nutzen (Teilen bedeutet, dass mehrere Prozesse gleichzeitig an verschiedenen Orten im Hauptspeicher vorhanden sind).
      • Die Verwaltungslösung ist relativ einfach und erfordert keinen weiteren Aufwand.
      • Die Mittel zum Erreichen eines Speicherschutzes sind relativ einfach.
    • Mangel
      • Der Hauptspeicher wird nicht vollständig ausgenutzt und es kommt zu einer externen Fragmentierung.
      • Es ist unmöglich, die gemeinsame Nutzung von Speicherinformationen durch mehrere Prozesse zu erreichen (gemeinsame Nutzung bedeutet, dass mehrere Prozesse dasselbe Hauptspeichersegment verwenden).
      • Eine Erweiterung des Hauptspeichers ist nicht möglich und der Prozessadressraum ist durch den tatsächlichen Speicherplatz begrenzt.

3.1.4 Methode der diskontinuierlichen Zuteilungsverwaltung

Durch die nicht zusammenhängende Zuweisung kann ein Programm auf nicht zusammenhängende Speicherpartitionen verteilt werden. Bei der kontinuierlichen Zuordnungsverwaltungsmethode haben wir festgestellt, dass ein Job, der 1 GB Speicherplatz erfordert, immer noch nicht ausgeführt werden kann, selbst wenn der Speicher über mehr als 1 GB freien Speicherplatz verfügt und kein kontinuierlicher Speicherplatz von 1 GB vorhanden ist: AberWenn eine diskontinuierliche Zuordnung verwendet wird, kann der für den Job benötigte 1-GB-Speicherplatz verteilt auf verschiedene Bereiche des Speichers verteilt werden. Dies erfordert natürlich auch zusätzlichen Speicherplatz zum Speichern der Indizes (verteilte Bereiche), wodurch die Speicherdichte erhöht wird diskontinuierliche Zuordnungsmethode niedrig. bei kontinuierlicher Lagerung

Die nichtkontinuierliche Zuordnungsverwaltungsmethode wird in eine Paging-Speicherverwaltungsmethode und eine segmentierte Speicherverwaltungsmethode unterteilt, je nachdem, ob die Partitionsgröße festgelegt ist. Die Paging-Speicherverwaltungsmethode wird in eine grundlegende Paging-Methode unterteilt, je nachdem, ob alle Seiten des Auftrags geladen werden müssen in den Speicher, bevor der Job ausgeführt wird. Speicherverwaltungsmethode und Anforderungs-Paging-Speicherverwaltungsmethode

Grundlegende Methode zur Paging-Speicherverwaltung

Bei der Partitionsspeicherverwaltung müssen Jobs in einem kontinuierlichen Speicherbereich platziert werden, was zu Fragmentierungsproblemen führt (externe Fragmentierung). Obwohl das Fragmentierungsproblem durch Spleißtechnologie gelöst werden kann, sind die Kosten höher. Wenn Sie zulassen, dass ein Job auf viele nicht zusammenhängende Partitionen verteilt wird, kann das Spleißen vermieden werden, wodurch das Problem der externen Fragmentierung effektiv gelöst wird. Basierend auf dieser Idee wurde die Paging-Speicherverwaltungstechnologie (oder Seitenspeicherverwaltungstechnologie) eingeführt.

  • Paging-Prinzip

    Bei der Paging-SpeicherverwaltungDer Adressraum eines Benutzerauftrags ist in mehrere gleich große Bereiche unterteilt, die als Seiten oder Seiten bezeichnet werden.. Entsprechend ist dieDer Speicherplatz des Hauptspeichers ist ebenfalls in Bereiche unterteilt, die der Seitengröße entsprechen und als Blöcke oder physische Blöcke bezeichnet werden. Bei der Zuweisung von Speicherplatz für einen Job erfolgt die Zuweisung immer in Blöcken, und jede Seite im Job kann in jedem Block des Hauptspeichers abgelegt werden .

    Ein physischer Block im Hauptspeicher, der der Größe einer Seite entspricht, kann auch als Seitenrahmen bezeichnet werden.

    Wenn der geplante Job ausgeführt wird,Alle seine Seiten müssen auf einmal in den Hauptspeicher geladen werden;Der Job wartet, wenn nicht genügend physische Blöcke im Hauptspeicher vorhanden sind. Diese Art der Speicherverwaltung wird als einfaches Paging oder reines Paging bezeichnet.

    Die Größe der Seite wird durch die Adressstruktur der Maschine bestimmt. Wenn Sie bei der Bestimmung der Adressstruktur eine kleinere Seite auswählen, können Sie die Fragmente innerhalb der Seite verkleinern und den Gesamtspeicherplatz der Speicherfragmente reduzieren, was sich positiv auf die Speichernutzung auswirkt, aber auch dazu führt, dass jeder Prozess mehr Seiten benötigt Dies führt dazu, dass eine zu lange Seitentabelle mehr Speicher beansprucht und die Effizienz beim Ein- und Auslagern von Seiten verringert. Wenn die ausgewählte Seite größer ist, kann zwar die Länge der Seitentabelle reduziert und die Effizienz beim Ein- und Auslagern von Seiten verbessert werden, es erhöht jedoch die Fragmentierung innerhalb der Seite.

    Daher sollte die Seitengröße moderat gewählt werden (normalerweise eine ganzzahlige Potenz von 2), um die Adresskonvertierung zu erleichtern, im Allgemeinen 512 B ~ 4 KB.

    Die logische Adresse im Paging-Speicherverwaltungssystem (siehe Abbildung 3-10) besteht aus zwei Teilen: Der erste Teil ist die Seitennummer P und der zweite Teil ist die Intra-Page-Verschiebung W (auch Intra-Page-Offset genannt).

    Fügen Sie hier eine Bildbeschreibung ein

    In der obigen Adressstruktur beträgt die aus zwei Teilen zusammengesetzte Adresslänge 32 Bit. InDie Bits 0 bis 11 sind die Bitadressen innerhalb der Seite, d. h. die Größe jeder Seite beträgt 2 12 B = 4 KBDie Bits 12 bis 31 sind Seitenzahlen, d. h. die maximale Anzahl von Seiten, die ein Prozess ausführen kann, beträgt 2 20 = 1 Mio. Seiten

    Angenommen, die logische Adresse ist A und die Seitengröße ist L, dann ist die Seitennummer P= (int)(A/L) und das Seitenbit W=A%L. Unter diesen ist „(int)“ eine erzwungene Typkonvertierung in einen Ganzzahltyp, „/“ eine Quotientenoperation und „%“ eine Restoperation.

  • Seitentabelle

    Um die aufeinanderfolgenden Seitennummern der logischen Adresse dem physischen Speicher in mehreren diskreten physischen Blöcken zuzuordnen, ist es erforderlich, jede Seite jedem physischen Block eins zu eins zuzuordnen. Diese Zuordnungsbeziehung spiegelt sich in der Seitentabelle wider.. Jeder Seitentabelleneintrag in der Seitentabelle besteht aus einer Seitennummer und einer Blocknummer. Gemäß dem Seitentabelleneintrag kann die Blocknummer des physischen Blocks im physischen Speicher gefunden werden, der jeder Seitennummer entspricht. Seitentabellen werden normalerweise im Speicher gespeichert.

    Fügen Sie hier eine Bildbeschreibung ein

    Angenommen, ein Benutzerprogramm ist im grundlegenden Paging-Speicherverwaltungsmodus in n Seiten unterteilt, wie in Abbildung 3-11a dargestellt. Die entsprechende Beziehung zwischen seiner Seitennummer und der Blocknummer im Speicher ist in der Seitentabelle in Abbildung 3 dargestellt -11b. Gemäß der entsprechenden Beziehung in der Seitentabelle wird jede Seite des Benutzerprogramms im Speicherbereich in Abbildung 3-11c gespeichert.

  • grundlegender Adressübersetzungsmechanismus

    Fügen Sie hier eine Bildbeschreibung ein

    Der gesamte Adresskonvertierungsprozess wird automatisch von der Hardware abgeschlossen.

    Seitentabellenregister (PTR): Wird zum Speichern der Startadresse der Seitentabelle im Speicher und der Länge der Seitentabelle verwendet

    Angenommen, die Seitengröße ist L, die Seitentabellenlänge ist M, die Adresse ist A und die Adresse ist E. Die Schritte zum Erhalten der physischen Adresse E aus der logischen Adresse A und zum Zugriff auf den Speicher sind unten aufgeführt.

    • Berechnen Sie die Seitennummer P=(int)(A/L); das Bit in der Seite W=A%L.
    • Vergleichen Sie die Seitennummer P und die Seitentabellenlänge M. Wenn P>=M, wird ein Out-of-bounds-Interrupt generiert, andernfalls fahren Sie mit 3) fort, um die Ausführung fortzusetzen.
    • Die Startadresse F der Seitentabelle wird zum Produkt aus der Seitennummer P und der Länge des Seitentabelleneintrags addiert und der erhaltene Adresswert wird verwendet, um die in der Speichereinheit gespeicherte Nummer b aus dem Speicher abzurufen. Dies b ist die physische Blocknummer.
    • Das Produkt aus der physischen Blocknummer b und der physischen Blockgröße sowie der Intra-Page-Verschiebung W synthetisiert die physische Adresse E.
    • Verwenden Sie die erhaltene physikalische Adresse E, um auf den Speicher zuzugreifen.
  • Adressübersetzungsmechanismus mit Blocktabelle

    **Wenn die Seitentabelle vollständig im Hauptspeicher abgelegt ist, ist ein mindestens zweimaliger Zugriff auf den Hauptspeicher erforderlich, um auf ein Datum oder eine Anweisung zuzugreifen. In,Das erste Mal besteht darin, die physische Adresse der Daten oder Anweisungen, auf die zugegriffen wird, durch Zugriff auf die Seitentabelle zu ermitteln, und das zweite Mal besteht darin, auf die Daten oder Anweisungen basierend auf der erhaltenen physischen Adresse zuzugreifen.**Offensichtlich ist diese Methode halb so langsam wie die normale Ausführung von Anweisungen.

    Um die Geschwindigkeit der Adressübersetzung zu verbessern, kann dem Adressübersetzungsmechanismus ein Cache-Speicher mit paralleler Suchfunktion (auch assoziativer Speicher oder schnelle Tabelle genannt) hinzugefügt werden, und einige Seitentabelleneinträge können in diesem Cache-Speicher (TLB) abgelegt werden. .Es wird im Allgemeinen durch Halbleiterspeicher implementiert und sein Arbeitszyklus ist ungefähr der gleiche wie der der CPU, aber die Kosten sind höher. Um die Kosten zu senken,Normalerweise werden die Seitentabelleneinträge, auf die der laufende Job gerade zugreift, in der Schnelltabelle gespeichert, während der Rest der Seitentabelle weiterhin im Speicher gespeichert ist.

    Fügen Sie hier eine Bildbeschreibung ein

    • Entsprechend der logischen Adresse werden die Seitennummer P und die Seitenverschiebung W erhalten.
    • Vergleichen Sie zunächst die Seitennummer mit allen Seitennummern in der Schnelltabelle. Wenn eine übereinstimmende Seitennummer vorhanden ist, wird die entsprechende Blocknummer direkt ausgelesen und mit der Intra-Page-Verschiebung verkettet, um die physische Adresse zu erhalten. Wenn keine übereinstimmende Seite vorhanden ist Der Zugriff ist weiterhin erforderlich. Die Seitentabelle im Speicher entnimmt der Seitentabelle die physische Blocknummer, verkettet sie mit der Intra-Page-Verschiebung, um die physische Adresse zu erhalten, und speichert diesen Seitentabelleneintrag in der schnellen Tabelle.
    • Verwenden Sie die erhaltene physische Adresse, um auf den Speicher zuzugreifen.Da es sich bei der Schnelltabelle um ein Register handelt und der Speicherplatz begrenzt ist, kann sie häufig nicht einige Seitentabelleneinheiten aufnehmen. Daher ist es nicht immer möglich, die Blocknummer zu finden, die der erforderlichen Seitennummer in der Schnelltabelle entspricht. Vor jeder Suche in der Seitentabelle wird zuerst die schnelle Tabelle durchsucht. Wenn die erforderliche Seitennummer gefunden wird, wird die Blocknummer direkt gelesen, und dann muss nur einmal auf den Speicher zugegriffen werden. Wenn die erforderliche Seitennummer nicht gefunden wird, Dann kann die Blocknummer nur aus der Seitentabelle gelesen werden. Um die Blocknummer zu finden, muss zweimal auf den Speicher zugegriffen werden, und die für den Zugriff auf die schnelle Tabelle erforderliche Zeit ist länger als wenn keine schnelle Tabelle vorhanden ist. Daher sollten wir unser Bestes geben, um sicherzustellen, dass häufig verwendete Seitennummern und entsprechende Blocknummern in der Schnelltabelle platziert werden, um die Zugriffszeit wirklich zu verkürzen.
  • Zweistufige Seitentabelle und mehrstufige Seitentabelle

    • Berechnung der Seitentabellengröße. In einfachen Paging-Systemen wird die Seitentabellenlänge M Seiten durch die Anzahl der Ziffern in der Seitennummer bestimmt. Die Größe der Seitentabelle kann als Fläche eines Rechtecks ​​verstanden werden. Die Länge dieses Rechtecks ​​​​ist die Seitentabellenlänge M, und die Breite ist die Größe jedes Seitentabelleneintrags, dh die Anzahl der Ziffern in die Blocknummer.

    • Zweistufige Seitentabelle. Aus der Berechnungsformel der Seitentabellengröße ist ersichtlich, dass die Seitentabellengröße proportional zur Seitentabellenlänge ist und die Seitentabellenlänge exponentiell mit zunehmender Anzahl von Seitenzahlen zunimmt. Wenn daher die logische Adresse des Systems eine große Anzahl von Ziffern aufweist, ist die Seitentabelle sehr groß und die gesamte Seitentabelle muss kontinuierlich im Speicher gespeichert werden. Dies ist eine sehr schwierige Sache, daher gibt es zwei Ebenen Seitentabelle.

      Fügen Sie hier eine Bildbeschreibung ein

      Ein zweistufiges Seitentabellensystem unterteilt logische Adressen in Außenseitennummern, Außenseiten-Innenadressen und Innenseitenadressen .Verwenden Sie zunächst die äußere Seitennummer P1, um in der externen Seitentabelle zu suchen. Der gefundene Einheitsinhalt ist die erste Adresse der sekundären Seitentabelle. Die erste Adresse der Seitentabelle plus die innere Seitenadresse P2 der äußeren Seite ist die Adresse von Nehmen Sie den Seitentabelleneintrag heraus. Nehmen Sie den Wert von (dh die physische Blocknummer) heraus. Die physische Adresse wird durch Kombination der physischen Blocknummer mit der Seitenadresse d erhalten.. Beim zweistufigen Seitentabellenmechanismus sind sowohl die Anzahl der Ziffern in der äußeren Seitennummer als auch die Anzahl der Ziffern in der Adresse auf der äußeren Seite viel geringer als beim einstufigen Seitentabellenmechanismus. Auf diese Weise ist die Länge Die Größe der Seitentabelle kann stark reduziert werden, und die entsprechende Seite Die Größe der Tabelle wird ebenfalls stark reduziert.

    • mehrstufige Seitentabelle

      Für eine 32-Bit-Maschine (die Anzahl der logischen Adressen beträgt 32 Bit) ist die Verwendung eines zweistufigen Seitentabellenmechanismus angemessen, für ein 64-Bit-System wird jedoch die Größe durch den zweistufigen Seitentabellenmechanismus bestimmt Die Seitentabelle ist inakzeptabel. Sie können die Größe der Seitentabelle verringern, indem Sie die Anzahl der Seitentabellenebenen weiter erhöhen. Dadurch wird jedoch die Anzahl der Seitentabellen erheblich erhöht. Der Hauptnachteil mehrstufiger Seitentabellen besteht darin, dass sie mehrere Zugriffe auf den Speicher erfordern und jede Adressänderung Zeitverschwendung ist.

  • Seitenfreigabe und -schutz

    In Multiprogrammierungssystemen ist der Datenaustausch sehr wichtig.In einem ausgelagerten Speicherverwaltungssystem wird die gemeinsame Nutzung dadurch erreicht, dass Seiten im gemeinsam genutzten Benutzeradressraum auf denselben physischen Block verweisen.

    Die gemeinsame Nutzung ist in einem ausgelagerten Speicherverwaltungssystem schwieriger als in einem segmentierten System. Denn im Paging-Speicherverwaltungssystem ist die Aufteilung des Adressraums des Jobs in Seiten für den Benutzer transparent und der Adressraum des Jobs linear kontinuierlich.Wenn das System den Adressraum des Auftrags in Seiten gleicher Größe aufteilt, sind die gemeinsam genutzten Teile nicht unbedingt in einer vollständigen Seite enthalten. Auf diese Weise werden auch Daten gemeinsam genutzt, die nicht gemeinsam genutzt werden sollten, was der Vertraulichkeit nicht förderlich ist.. Darüber hinaus kann es während der Aufteilung des Adressraums jedes Jobs in Seiten dazu kommen, dass die Startadresse des gemeinsam genutzten Teils auf jeder Seite unterschiedliche Verschiebungen innerhalb der Seite aufweist, was die gemeinsame Nutzung ebenfalls erschwert.

    Das Paging-Speicherverwaltungssystem kann zwei Schutzmethoden für den Speicher bereitstellen:

    • Einer davon ist der Schutz vor Adressüberschreitungen, der durch den Vergleich der Seitentabellenlänge im Adressübersetzungsmechanismus mit der Seitennummer in der logischen Adresse, auf die zugegriffen werden soll, erreicht wird.
    • Die andere besteht darin, Speicherinformationen durch Zugriffskontrollinformationen in der Seitentabelle zu schützen. Legen Sie beispielsweise ein Zugriffskontrollfeld in der Seitentabelle fest und definieren Sie das Feld als Lese-, Schreib-, Ausführungsberechtigungen und andere Berechtigungen entsprechend der Seitennutzung. Wenn die Adresse Bei der Konvertierung muss nicht nur die der Seite entsprechende Blocknummer aus dem entsprechenden Eintrag in der Seitentabelle ermittelt werden, sondern auch, ob die Operation mit den im Zugriffskontrollfeld zulässigen Operationen übereinstimmt. Wenn nicht, erfasst die Hardware sie und einen Schutz ausstellen Sexuelle Störung.
  • Vor- und Nachteile der einfachen ausgelagerten Speicherverwaltung

    • Vorteil
      • Hohe Speicherauslastung
      • Diskrete Zuordnung implementiert
      • Erleichtert die Speicherzugriffskontrolle
      • Keine äußeren Ablagerungen.
    • Mangel
      • Erfordert Hardwareunterstützung (es ist ein schneller Tisch)
      • Die Effizienz des Speicherzugriffs nimmt ab
      • Schwierigkeiten beim Teilen
      • Es gibt interne Fragmente

Grundlegende segmentierte Speicherverwaltungsmethoden

Die segmentierte Speicherverwaltung bietet im Vergleich zur Paging-Speicherverwaltung folgende Vorteile:

  1. Komfortable Programmierung: Anwender unterteilen ihre Aufgaben nach logischen Zusammenhängen in mehrere Segmente.Jedes Segment wird beginnend bei 0 adressiert und hat einen eigenen Namen und eine eigene Länge.
  2. Für den Informationsaustausch ist eine Seite eine physische Einheit zum Speichern von Informationen und hat keine vollständige Bedeutung, während ein Segment eine logische Informationseinheit ist. Benutzer können einen Teil des Codes und der Daten, die gemeinsam genutzt werden müssen, in dasselbe Segment einfügen, um die Informationen zu erleichtern Teilen.
  3. Informationsschutz: Da jedes Segment relativ unabhängige Informationen enthält, kann der Informationsschutz durch Segmentschutz erfolgen. Informationsschutz ist viel bequemer als Paging.

  • Segmentiertes Speicherprinzip

    In einem segmentierten SpeicherverwaltungssystemDer Adressraum eines Jobs besteht aus mehreren logischen Segmenten. Jedes Segment ist im logischen Sinne ein relativ vollständiger Satz von Informationen. Jedes Segment hat seinen eigenen Namen. Jedes Segment wird beginnend bei 0 adressiert und verwendet einen zusammenhängenden Adressraum. Daher ist der Adressraum des gesamten Jobs zweidimensional (die Segmentklassifizierung ist eine Dimension und die Verschiebung innerhalb des Segments ist eine andere Dimension).. Bei der segmentierten Speicherverwaltung wird der Speicher in Segmenteinheiten zugewiesen, und jedem Segment wird ein kontinuierlicher Speicherbereich zugewiesen, die Segmente müssen jedoch nicht kontinuierlich sein . Die Zuweisung und Wiederverwendung von Speicher ähnelt der dynamischen Partitionszuweisung.

    Die logische Adressstruktur des segmentierten Speicherverwaltungssystems besteht aus der Segmentnummer S und dem internen Bit W (auch Intra-Segment-Offset genannt).

    Fügen Sie hier eine Bildbeschreibung ein

    Die Segmentnummer S ist normalerweise eine fortlaufende positive ganze Zahl, beginnend bei 0. Wenn die Anzahl der von der Segmentnummer und der Intra-Segment-Verschiebung in der logischen Adressstruktur belegten Bits bestimmt wird, werden auch die maximal zulässige Anzahl von Segmenten in einem Job-Adressraum und die maximale Länge jedes Segments bestimmt.

    In Abbildung 3-15 belegt beispielsweise die Segmentnummer 16 Bit und die Intra-Segment-Verschiebung 16 Bit. Daher kann eine Operation bis zu 2 16 = 65536 Segmente haben und die große Segmentlänge beträgt 64 KB .

    Der Adressraum des Paging-Speicherverwaltungssystems ist eindimensional, während der Adressraum des segmentierten Speicherverwaltungssystems zweidimensional ist.

  • Segmenttabelle und Adresskonvertierungsprozess

    Ähnlich wie bei der Paging-Speicherverwaltung erstellt das System für jeden Prozess eine Segmenttabelle, in der jeder Tabelleneintrag die Informationen eines Segments beschreibt, um die Umwandlung von einer logischen in eine physische Adresse zu realisieren. Der Tabelleneintrag enthält die Segmentnummer und das Segment Länge und die Speicherstartadresse des Segments.

    Fügen Sie hier eine Bildbeschreibung ein

    Nach der Konfiguration der Segmenttabelle kann der ausführende Prozess den jedem Segment entsprechenden Speicherbereich finden, indem er die Segmenttabelle durchsucht, um eine Zuordnung von logischen Segmenten zu physischen Speicherbereichen zu erreichen.

    Fügen Sie hier eine Bildbeschreibung ein

    Der Adressübersetzungsprozess wird automatisch von der Hardware abgeschlossen.

    Fügen Sie hier eine Bildbeschreibung ein

    Holen Sie sich die physikalische Adresse E von der logischen Adresse A und greifen Sie dann wie folgt auf den Speicher zu:

    • Nehmen Sie die ersten paar Ziffern der logischen Adresse A als Segmentnummer S und die letzten paar Ziffern als Intra-Segment-Verschiebung W.
  • Vergleichen Sie die Segmentnummer S und die Segmenttabellenlänge M. Wenn S>=M, wird ein Out-of-bounds-Interrupt generiert, andernfalls fahren Sie mit 3) fort, um die Ausführung fortzusetzen.

    • Nehmen Sie die Startadresse F und die Segmentnummer S der Segmenttabelle heraus, addieren Sie sie und rufen Sie mit dem erhaltenen Adresswert die in der Speichereinheit gespeicherte Nummer aus dem Speicher ab. Die ersten paar Ziffern der herausgenommenen Zahl sind die Segmentlänge C und die letzten paar Ziffern sind die Startadresse (Basisadresse) b des Segments. Wenn die Verschiebung innerhalb des Segments W>=C ist, wird ein Out-of-bounds-Interrupt generiert, andernfalls fahren Sie mit 4) fort, um die Ausführung fortzusetzen.
    • Die Basisadresse b des Segments und die Intra-Segment-Verschiebung W werden addiert, um die physikalische Adresse E zu erhalten.
    • Die physische Adresse E, die für den Zugriff auf den Speicher verwendet wird.
  • Segmente teilen und schützen

    In einem segmentierten Speicherverwaltungssystem wird die Segmentfreigabe dadurch erreicht, dass entsprechende Einträge in den Segmenttabellen mehrerer Jobs auf dieselbe physische Kopie des gemeinsam genutzten Segments verweisen.

    Ähnlich wie bei der Paging-Verwaltung,Es gibt zwei Hauptschutzarten für das Segmentierungsmanagement: grenzüberschreitenden Schutz und Zugriffskontrollschutz.

  • Vor- und Nachteile des einfachen segmentierten Speichermanagements

    • Vorteil
      • Datenstrukturen, die die Programmmodularisierung und die Verarbeitung von Transformationen erleichtern
      • Ermöglicht dynamisches Verknüpfen und Teilen
      • Keine inneren Ablagerungen.
    • Mangel
      • Ähnlich wie beim Paging ist Hardwareunterstützung erforderlich
      • Um dem dynamischen Wachstum der Segmente gerecht zu werden und die externe Fragmentierung zu reduzieren, wird die Spleißtechnologie eingesetzt
      • Die maximale Größe eines Segments wird durch den verfügbaren Platz im Hauptspeicher begrenzt, bei externer Fragmentierung.
  • Der Unterschied zwischen Segmentierung und Paging

    Paging-Speicherverwaltung und segmentierte Speicherverwaltung weisen viele Ähnlichkeiten auf. Beispielsweise verwenden beide diskrete Zuordnungsmethoden und beide implementieren die Adresskonvertierung über einen Adresskonvertierungsmechanismus. Es gibt aber auch viele konzeptionelle Unterschiede zwischen den beiden

    Fügen Sie hier eine Bildbeschreibung ein

Grundlegende Speicherverwaltungsmethode für Segmentseiten

Wie aus der obigen Einführung ersichtlich ist, kann das Paging-System die Speichernutzung effektiv verbessern und das Fragmentierungsproblem lösen, während das Segmentierungssystem die logische Struktur des Programms widerspiegeln und die gemeinsame Nutzung von Segmenten erleichtern kann. Wenn diese beiden Speicherverwaltungsmethoden kombiniert werden, wird eine segmentierte Seitenspeicherverwaltungsmethode gebildet.

In einem segmentierten Seitenspeicherverwaltungssystem wird der Adressraum eines Jobs zunächst in mehrere logische Segmente unterteilt, wobei jedes Segment eine eigene Segmentnummer hat und dann jedes Segment in mehrere Seiten fester Größe unterteilt wird. Die Verwaltung des Hauptspeicherplatzes ist immer noch dieselbe wie die Paging-Verwaltung. Sie unterteilt ihn in mehrere physische Blöcke mit der gleichen Größe wie die Seite, und die Zuweisung des Hauptspeichers basiert auf physischen Blöcken.

Die logische Adressstruktur des Segmentseitenspeicherverwaltungssystems besteht aus drei Teilen: Segmentnummer S, Seitennummer innerhalb des Segments P und Seitenverschiebung D

Fügen Sie hier eine Bildbeschreibung ein

Um die Adresskonvertierung zu implementieren, müssen Segmenttabellen und Seitentabellen gleichzeitig im Segmentseitenspeicherverwaltungssystem eingerichtet werden. Das System erstellt für jeden Prozess eine Segmenttabelle und jedes Segment verfügt über eine Seitentabelle. Der Eintrag in der Segmenttabelle sollte mindestens die Segmentnummer, die Startadresse der Seitentabelle und die Länge der Seitentabelle enthalten, wobei die Startadresse der Seitentabelle die Startposition der Seitentabelle des Segments im angibt Hauptspeicher; der Eintrag in der Seitentabelle sollte mindestens Seitennummer und Blocknummer enthalten. Um die Adresskonvertierung zu erleichtern, muss das System außerdem ein Segmenttabellenregister konfigurieren, um die Startadresse und die Segmenttabellenlänge der Segmenttabelle zu speichern.

Fügen Sie hier eine Bildbeschreibung ein

Die Schritte für die logische Adresse A, um die physische Adresse E zu erhalten und dann auf den Speicher zuzugreifen :

  • Die ersten Ziffern der Bearbeitungsadresse sind die Segmentnummer S, die mittleren Ziffern sind die Seitennummer P und die letzten Ziffern sind die Seitenverschiebung W.
  • Vergleichen Sie die Segmentnummer S und die Segmenttabellenlänge M. Wenn S>M, wird ein Out-of-bounds-Interrupt generiert, andernfalls fahren Sie mit 3) fort, um die Ausführung fortzusetzen.
  • Nehmen Sie die Startadresse F der Segmenttabelle heraus, addieren Sie sie zur Segmentnummer S und verwenden Sie den erhaltenen Adresswert, um die Nummer im Speicher zu speichern. Die ersten paar Ziffern der herausgenommenen Zahl sind die Seitentabellenlänge C und die letzten paar Ziffern sind die Seitentabellen-Startadresse d. Wenn die Seitennummer P>C ist, wird ein Out-of-Bounds-Interrupt generiert, andernfalls gehe zu 4) um die Ausführung fortzusetzen.
  • Die Seitentabellen-Startadresse d wird zum Produkt aus der Seitennummer P und der Länge des Seitentabelleneintrags addiert, um die physikalische Adresse des Seitentabelleneintrags im Speicher zu erhalten. Der an dieser Adresse gespeicherte Wert ist die physikalische Blocknummer B.
  • Verwenden Sie die physische Blocknummer b und das Seitenbit W, um die physische Adresse E zu bilden
  • Verwenden Sie die erhaltene physikalische Adresse E, um auf den Speicher zuzugreifen.

Aus den obigen Schritten ist ersichtlich, dass die Adresstransformation des segmentierten Seitenspeicherverwaltungssystems drei Zugriffe auf den Speicher erfordert, sodass das Cache-Register (schnelle Tabelle) auch verwendet werden kann, um die Anzahl der Zugriffe auf den Speicher zu reduzieren.

Der Segmentseitenstil kombiniert zwar die Vorteile des Segmentstils und des Seitenstils und überwindet das externe Fragmentierungsproblem des Segmentstils, aberDie interne Fragmentierung des Segmentseitentyps ist nicht so gering wie die des Seitentyps. Bei der Seitenspeicherverwaltungsmethode weist ein durchschnittliches Programm eine halbe Seitenfragmentierung auf, während bei der Segmentseitenspeicherverwaltungsmethode ein durchschnittliches Segment eine halbe Seitenfragmentierung aufweist und ein Programm häufig viele Segmente aufweist, sodass im Durchschnitt die interne Fragmentierung von Der Segmentseitentyp ist höher als der Seitentyp. Ich brauche mehr

3.2 Verwaltung des virtuellen Speichers

3.2.1 Grundkonzepte des virtuellen Speichers

Gründe für die Einführung des virtuellen Speichers

Mehrere zuvor vorgestellte Speicherverwaltungsmethoden analysieren alle, wie mehrere Programme parallel in den Speicher geladen werden. Diese Methoden weisen alle die folgenden zwei Merkmale auf: einmalig (der Job kann erst ausgeführt werden, nachdem alle Jobs in den Speicher geladen wurden) und resident (der Job bleibt bis zum Ende der Ausführung im Speicher). Es ist schwierig, größere Aufträge zu erfüllen oder mehr Aufträge zur Ausführung in den Speicher zu laden.

Während der Programmausführung werden einige Codes selten verwendet (z. B. zur Fehlerbehandlung), und einige Programme benötigen viel Zeit für die E/A-Verarbeitung, was zu einer großen Verschwendung von Speicherplatz führt. Zu diesem Zweck eingeführtEine Speicherverwaltungstechnologie, die es ermöglicht, Aufträge auch dann auszuführen, wenn sie teilweise geladen sind, also eine virtuelle Speicherverwaltungstechnologie

Lokalitätsprinzip

Bei der Ausführung der meisten Programme wird in kurzer Zeit nur ein Teil des Programmcodes genutzt. Dementsprechend ist auch der Speicherplatz, auf den das Programm zugreift, auf einen bestimmten Bereich beschränkt. Dies ist das Prinzip der Lokalität der Programmausführung.

  • Zeitliche Lokalität. Eine Ausführung und die nächste Ausführung einer Anweisung, ein Zugriff und der nächste Zugriff auf Daten konzentrieren sich alle auf einen kurzen Zeitraum.
  • räumliche Lokalität. Der aktuelle Befehl und mehrere angrenzende Befehle sowie die aktuell aufgerufenen Daten und angrenzenden Daten sind alle in einem kleineren Bereich konzentriert.

Die Definition und Eigenschaften des virtuellen Speichers

Basierend auf dem Lokalitätsprinzip kann beim Laden des Programms einerseits ein Teil des Programms in den Speicher und der Rest in den externen Speicher gelegt und dann das Programm gestartet werden (teilweises Laden). .Wenn sich die abgerufenen Informationen während der Programmausführung nicht im Speicher befinden, überträgt das Betriebssystem den erforderlichen Teil in den Speicher (Anforderungsübertragung). Andererseits ersetzt das Betriebssystem den vorübergehend ungenutzten Inhalt im Speicher durch den externen Speicher und schafft so Platz für die in den Speicher zu übertragenden Informationen (Ersatzfunktion). Unter dem Gesichtspunkt der Wirkung scheint das Computersystem dem Benutzer zwei Speicher zur Verfügung zu stellen, deren Speicherkapazität viel größer ist als der tatsächliche Speicher. Dieses Speichersystem, das die Speicherkapazität logisch erweitert, wird als virtueller Speicher (als virtueller Speicher bezeichnet) bezeichnet.

Er wird als virtueller Speicher bezeichnet, da dieser Speicher nicht tatsächlich vorhanden ist. Das System bietet nur Teillade-, Anforderungslade- und Ersetzungsfunktionen, sodass der Benutzer das Gefühl hat, dass ein Speicher vorhanden ist, der die Anforderungen des Jobadressraums erfüllen kann.

Die Bedeutung des virtuellen Speichers besteht darin, den Adressraum, in dem das Programm vorhanden ist, vom Speicherplatz zur Laufzeit zu trennen. Programmierer können Programme in den Adressraum schreiben, ohne die Größe des tatsächlichen Speichers zu berücksichtigen.Die Kapazität des virtuellen Speichers wird durch die Adressstruktur des Computers bestimmt und ist nicht unendlich.

Eigenschaften des virtuellen Speichers

  • Diskretion. Programme werden diskret im Speicher gespeichert (Diskretheit ist kein einzigartiges Merkmal des virtuellen Speichers, grundlegendes Paging und Segmentierung sind ebenfalls diskret).
  • mehrmals. Ein Job kann mehrfach aufgeteilt und in den Speicher geladen werden.
  • Kommutabilität (Austauschbarkeit). Jobs können während der Ausführung ein- und ausgewechselt werden.
  • Virtualität. Durch die logische Erweiterung der Speicherkapazität kann der für Benutzer verfügbare Speicherplatz viel größer sein als die tatsächliche Speicherkapazität.

Implementierung von Hardware- und Softwareunterstützung für virtuellen Speicher

  • Es muss ausreichend externer Speicher vorhanden sein, um Programme für mehrere Benutzer zu speichern.
  • Um über eine bestimmte Speichermenge zu verfügen, muss das auf dem Prozessor ausgeführte Programm einige Informationen im Speicher haben.
  • Der Interrupt-Mechanismus unterbricht die Programmausführung, wenn sich der vom Benutzer aufgerufene Teil nicht im Speicher befindet.
  • Adresskonvertierungsmechanismus zur dynamischen Implementierung der Adresskonvertierung von einer virtuellen Adresse in eine reale Adresse.
  • Verwandte Datenstrukturen, Segmenttabellen oder Seitentabellen.

Zu den häufig verwendeten virtuellen Speichertechnologien gehören die Anforderungs-Paging-Speicherverwaltung, die Anforderungssegment-Speicherverwaltung und die Anforderungssegment-Paging-Speicherverwaltung.

3.2.2 Paging-Speicherverwaltungsmethode anfordern

Obwohl die Paging-Speicherverwaltungsmethode das Problem der externen Fragmentierung im Speicher löst, erfordert sie, dass alle Seiten des Jobs gleichzeitig in den Hauptspeicher übertragen werden. Wenn der verfügbare Speicherplatz im Hauptspeicher nicht ausreicht oder die Jobs zu groß sind, wird die Ausführung einiger Jobs im Hauptspeicher eingeschränkt. Zu diesem Zweck wird die Speicherverwaltungsmethode „Request Paging“ (auch „Request Paging“ genannt) eingeführt.Laden Sie zunächst einen Teil des Programms zur Ausführung in den Speicher und laden Sie ihn dann in den Speicher, wenn andere Teile benötigt werden.. Offensichtlich basiert diese Methode auf dem Prinzip der Lokalität des Programms.

Anforderungs-Paging-Prinzip

Die Anforderungs-Paging-Speicherverwaltungsmethode ist in Bezug auf Konzepte wie Paging des Jobadressraums und Partitionierung des Speicherplatzes genau die gleiche wie die Paging-Speicherverwaltung.Es handelt sich um ein virtuelles Speichersystem, das auf der Grundlage des Paging-Speicherverwaltungssystems durch Hinzufügen von Anforderungs-Paging-Funktionen und Seitenersetzungsfunktionen gebildet wird.. Bei der Anforderungs-Paging-Speicherverwaltung kann der Job vor der Ausführung des Jobs gestartet werden, sofern ein Teil der aktuell benötigten Seiten in den Hauptspeicher geladen ist.Wenn sich während der Ausführung des Jobs die Seite, auf die zugegriffen werden soll, nicht im Hauptspeicher befindet, kann sie über die Paging-Funktion eingeholt werden. Gleichzeitig können die vorübergehend nicht verwendeten Seiten über die Ersetzungsfunktion in den externen Speicher ersetzt werden Speicherplatz freigeben.

Paging anfordern = grundlegendes Paging + Paging-Anforderungsfunktion + Seitenersetzungsfunktion

Seitenstruktur

Die im Anforderungs-Paging-System verwendete Hauptdatenstruktur ist immer noch die Seitentabelle, deren Grundfunktion darin besteht, logische Adressen im Programmadressraum in physikalische Adressen im Speicherraum umzuwandeln.Da das Anforderungs-Paging-System nur einen Teil des Auftrags in den Speicher überträgt und den anderen Teil auf der Festplatte speichert, müssen bei der Implementierung der Seitenlade- und -austauschfunktionen mehrere Elemente zur Seitentabelle hinzugefügt werden, damit das Betriebssystem darauf verweisen kann.

Fügen Sie hier eine Bildbeschreibung ein

  • Seitenzahl und physische Blocknummer. Diese beiden Felder wurden in der Paging-Speicherverwaltung definiert und sind für die Adressübersetzung erforderlich.
  • Statusbit (Präsenzbit). Wird verwendet, um festzustellen, ob sich die Seite im Hauptspeicher befindet. Immer wenn ein Hauptspeicherzugriff durchgeführt wird, wird dieses Bit verwendet, um festzustellen, ob sich die Seite, auf die zugegriffen werden soll, im Hauptspeicher befindet. Wenn nicht, wird ein Seitenfehler-Interrupt generiert.
  • Zugriffsfelder. Wird verwendet, um aufzuzeichnen, wie oft innerhalb eines bestimmten Zeitraums auf eine Seite zugegriffen wurde, oder wie lange in letzter Zeit nicht auf sie zugegriffen wurde, als Referenz für den Ersetzungsalgorithmus bei der Entscheidung, die Seite auszutauschen.
  • Ändern Sie das Bit. Wird verwendet, um anzuzeigen, ob die Seite nach dem Laden in den Speicher geändert wurde. Wenn der Prozessor im Schreibmodus auf eine Seite zugreift, setzt das System das Änderungsbit der Seite.Da die Seiten im Speicher über Kopien im externen Speicher verfügen, ist es nicht erforderlich, die Seite beim Ersetzen in den externen Speicher zu schreiben, wenn die Seite nicht geändert wurde, um die Anzahl der Schreibvorgänge auf die Festplatte zu verringern geändert, es muss sein Die Seite wird in den externen Speicher neu geschrieben
  • Externe Speicheradresse. Wird verwendet, um die Speicheradresse der Seite im externen Speicher anzugeben, die beim Laden der Seite verwendet werden soll.

Seitenfehlerunterbrechung und Adressübersetzung

Wenn sich im Anforderungs-Paging-Speicherverwaltungssystem die Seite, auf die zugegriffen wird, im Speicher befindet, ist der Adresstransformationsprozess derselbe wie bei der Paging-Speicherverwaltung. Wenn sich die Seite, auf die zugegriffen wird, nicht im Speicher befindet, sollte die Seite zuerst in den Speicher übertragen werden. und dann ist der Adresstransformationsprozess derselbe wie der des grundlegenden Paging-Speichers. Die Adressübersetzung wird auf die gleiche Weise verwaltet.

Fügen Sie hier eine Bildbeschreibung ein

Wenn das System feststellt, dass sich die Seite, auf die zugegriffen werden soll, nicht im Speicher befindet, generiert es ein Seitenfehler-Interrupt-Signal. Zu diesem Zeitpunkt wird das Benutzerprogramm unterbrochen und die Steuerung an den Seitenfehler-Interrupt-Handler des Betriebssystems übergeben. Der Seitenfehler-Interrupt-Handler lädt die Seite basierend auf ihrer Position im externen Speicher in den Speicher.Wenn während des Paging-Vorgangs freier Speicherplatz im Speicher vorhanden ist, muss der Seitenfehler-Interrupt-Handler nur die fehlende Seite in einen beliebigen freien Speicherblock laden und dann den entsprechenden Eintrag in der Seitentabelle ändern (z. B. den physischen Block ausfüllen). Anzahl, ändern Sie das Statusbit, legen Sie das Zugriffsfeld fest und ändern Sie den Anfangswert des Bits usw.). Wenn im Speicher kein freier Speicherplatz vorhanden ist, müssen zuerst einige Seiten im Speicher gelöscht werden. Wenn die gelöschten Seiten gelöscht wurden Wenn sie geändert werden, müssen sie zurück in den externen Speicher geschrieben werden

Der Seitenfehler-Interrupt ist ein relativ spezieller Interrupt. Er unterscheidet sich erheblich von allgemeinen Interrupts , hauptsächlich in den folgenden Aspekten:

  • Generieren und Behandeln von Seitenfehler-Interrupts während der Befehlsausführung. Normalerweise prüft die CPU nach der Ausführung des Befehls, ob eine Interrupt-Anfrage eingetroffen ist, und antwortet gegebenenfalls. Der Seitenfehler-Interrupt wird generiert und verarbeitet, wenn während der Ausführung eines Befehls festgestellt wird, dass sich der Befehl und die Daten, auf die zugegriffen werden soll, nicht im Speicher befinden.
  • Ein Befehl kann mehrere Seitenfehler-Interrupts erzeugen. Wenn eine Anweisung beispielsweise zwei Operanden hat und sich jeder Operand nicht im Speicher befindet, werden bei der Ausführung der Anweisung mindestens zwei Seitenfehler-Interrupts generiert.

Vor- und Nachteile der Anforderungspaginierungsverwaltung

  • Vorteil
    • Programme können diskret gespeichert werden, wodurch die Anzahl der Fragmente reduziert wird.
    • Bietet virtuellen Speicher, verbessert die Hauptspeicherauslastung, erleichtert die Ausführung mehrerer Programme und ist praktisch für Benutzer.
  • Mangel
    • Muss über Hardwareunterstützung verfügen.
    • In einigen Fällen kann es zu Jitter im System kommen.
    • Auf der letzten Seite des Programms ist noch etwas ungenutzter Platz.

3.2.3 Seitenersetzungsalgorithmus

Der Seitenersetzungsalgorithmus (auch Seiteneliminierungsalgorithmus genannt) ist ein Algorithmus, der zum Auswählen von auszutauschenden Seiten verwendet wird.. Da sich bei der Speicherverwaltungsmethode für Anforderungsseiten beim Ausführen eines Prozesses nicht alle Seiten im Speicher befinden, kommt es zu einer Seitenfehlerunterbrechung. Wenn zu diesem Zeitpunkt kein freier physischer Block im Speicher vorhanden ist, muss eine Seite im Speicher vorhanden sein ersetzt werden. Insbesondere wird durch den Seitenersetzungsalgorithmus bestimmt, welche Seite ersetzt werden soll. Es ist ersichtlich, dassDie Qualität des Seitenersetzungsalgorithmus wirkt sich direkt auf die Effizienz des Systems aus.

  • Die Einheit der Seitenersetzung ist die Seite und nicht der gesamte Prozess. Die Einheit des Austauschs ist der gesamte Prozess.
  • Wenn ein Seitenfehler auftritt, führt das System möglicherweise nicht unbedingt den Seitenersetzungsalgorithmus aus.. Denn das Auftreten eines Seitenfehler-Interrupts bedeutet nur, dass die Seite, die ausgeführt werden muss, nicht im Speicher ist. Wenn im Speicherbereich freie Blöcke vorhanden sind, müssen Sie nur den Seitenfehler-Interrupt-Handler verwenden, um die erforderlichen Seiten zu übertragen Der Seitenersetzungsalgorithmus wird nur benötigt, wenn keine freien Blöcke im Speicher vorhanden sind. Daher führt eine Seitenfehlerunterbrechung nicht unbedingt zur Ausführung des Seitenersetzungsalgorithmus.

optimaler Ersetzungsalgorithmus

Im Fall der Vorhersage der Seitenzahl-Referenzzeichenfolge eines Prozesses,Jedes Mal werden Seiten gelöscht, die nicht mehr verwendet werden oder spätestens verwendet werden. Dieser Algorithmus ist der beste Ersatzalgorithmus.

Offensichtlich ist der beste Ersetzungsalgorithmus optimal und weist die niedrigste Seitenfehlerrate auf. Da es im tatsächlichen Betrieb jedoch häufig unmöglich ist, die Informationen aller Seiten, auf die in Zukunft verwiesen wird, im Voraus zu kennen, ist dies der FallDer optimale Ersetzungsalgorithmus kann nicht implementiert werden und kann nur als Standard verwendet werden, um die Vor- und Nachteile anderer Ersetzungsalgorithmen zu messen.

Fügen Sie hier eine Bildbeschreibung ein

Seitenreihenfolge: 3,4,2,6,4,3,7,4,3,6,3,4,8,4,6

First-In-First-Out-Algorithmus

Der FIFO-Algorithmus ist der einfachste Seitenersetzungsalgorithmus.Die Seite, die zuerst in den Speicher gelangt, wird immer gelöscht, d. h. die Seite, die sich am längsten im Speicher befindet, wird gelöscht.

Dieser Algorithmus ist einfach zu implementieren und kann mithilfe einer Warteschlangendatenstruktur implementiert werden. Die Seiten werden der Reihe nach in einer Warteschlange angeordnet, und der Zeiger wird so eingestellt, dass er auf die zuerst eingegebene Seite zeigt. Jedes Mal, wenn eine Seite entfernt werden muss, wird die Seite gelöscht auf die der Zeiger zeigt, kann eliminiert werden. .

Der FIFO-Algorithmus kann jedoch produzierenBelady-Ausnahme (die Anzahl der Seitenfehler steigt mit der zugewiesenen physischen Blocknummer),Das istDa der FIFO-Algorithmus ein Phänomen ignoriert, sind die am frühesten geladenen Seiten häufig die am häufigsten verwendeten Seiten. Daher stimmt der FIFO-Algorithmus nicht mit den tatsächlichen Betriebsregeln des Prozesses überein. Die zur Eliminierung ausgewählten Seiten können häufig verwendete Seiten sein das Programm, und der tatsächliche Effekt ist nicht gut.

Fügen Sie hier eine Bildbeschreibung ein

Zuletzt verwendeter Algorithmus

Wählen Sie Seiten aus, die in letzter Zeit am längsten nicht verwendet wurden, und entfernen Sie sie. Die Idee besteht darin, frühere Seitenzitate zu verwenden, um zukünftige Seitenzitate vorherzusagen., das heißt, vorausgesetzt, dass eine Seite gerade aufgerufen wurde, wird die Seite bald erneut aufgerufen. Daher ist der optimale Ersetzungsalgorithmus „rückwärtsschauend“ undDie am wenigsten verwendete Regel ist „Schau nach vorne“.

Dieser Algorithmus kann mithilfe von Registerbänken und Stapeln implementiert werden und weist eine bessere Leistung auf.Unter den häufig verwendeten Seitenersetzungsalgorithmen kommt der LRU-Algorithmus dem optimalen Ersetzungsalgorithmus am nächsten.

Fügen Sie hier eine Bildbeschreibung ein

Algorithmus zum Ersetzen der Uhr

Der Taktersetzungsalgorithmus wird auch als Not-Recent-Used-Algorithmus (NRU) bezeichnet und ist eine Mischung aus LRU und FIFO. Als Näherungsalgorithmus für LRU,Der CLOCK-Algorithmus setzt für jede Seite ein Zugriffsbit, um zu identifizieren, ob kürzlich auf die Seite zugegriffen wurde.. CLOCK verwaltet eine zirkulär verknüpfte Liste aller Seiten im Speicher.Wenn das Programm auf eine Seite zugreifen muss, die in der verknüpften Liste vorhanden ist, wird das Zugriffsbit der Seite auf 1 gesetzt.;ansonsten,Wenn die Seite, auf die das Programm zugreifen möchte, nicht in der verknüpften Liste enthalten ist, muss eine Seite im Speicher entfernt werden, sodass ein Zeiger nacheinander die zirkulär verknüpfte Liste durchläuft, beginnend mit der nächsten Position der letzten entfernten Seite Seite, auf die der Zeiger zeigt. Wenn das Zugriffsbit 1 ist, wird das Zugriffsbit gelöscht und der Zeiger bewegt sich nach unten. Wenn das Zugriffsbit der Seite, auf die der Zeiger zeigt, 0 ist, wird die Seite gelöscht. Wenn sie nicht gefunden wird Nach dem Durchlaufen der verknüpften Liste kann dies der Fall sein Die eliminierten Seiten werden weiterhin durchquert.

Fügen Sie hier eine Bildbeschreibung ein

Verbesserter Taktalgorithmus

Es gibt auch einen verbesserten CLOCK-Algorithmus,Es berücksichtigt die Frage, ob die Seite nach dem Laden in den Speicher geändert wurde, und fügt ein Änderungsbit hinzu. Bei Prozessen, deren Zugriffsbits beide 0 sind, werden unveränderte Seiten zuerst gelöscht, da unveränderte Seiten direkt gelöscht werden können, während geänderte Seiten in den externen Speicher zurückgeschrieben werden müssen.. Im Vergleich zum einfachen CLOCK-Algorithmus reduziert dieser Algorithmus die Anzahl der Festplatten-E/As, erhöht aber die Anzahl der Scans.

Nachdem der modifizierte CLOCK-Algorithmus das Änderungsbit hinzugefügt hat, weist der Status jeder Seite die folgenden vier Situationen auf.

  • Es wurde in letzter Zeit nicht darauf zugegriffen und es wurde nicht geändert (Zugriffsbit=0, Änderungsbit=0).
  • Zuletzt aufgerufen und nicht geändert (Zugriffsbit = 1, Änderungsbit = 0).
  • Es wurde in letzter Zeit nicht darauf zugegriffen, es wurde jedoch geändert (Zugriffsbit = 0, geändertes Bit = 1).
  • Es wurde kürzlich darauf zugegriffen und es wurde geändert (Zugriffsbit = 1, Änderungsbit = 1).

Die Algorithmusschritte des verbesserten Taktalgorithmus sind wie folgt:

  • Scannen Sie ausgehend von der aktuellen Position des Zeigers die kreisförmige verknüpfte Liste. Während dieses Scanvorgangs werden die Zugriffsbits und Änderungsbits nicht geändert. Die erste gefundene Seite (Zugriffsbit = 0, Änderungsbit = 0) wird zum Ersetzen ausgewählt.
  • Wenn Schritt 1) ​​nicht gefunden wird, scannen Sie erneut und suchen Sie nach Seiten mit (Zugriffsbit = 0, Änderungsbit = 1) zum Ersetzen. Während dieses Scanvorgangs hat jede Nicht-Ersatzseite ihre Zugriffsposition 0.
  • Wenn Schritt 2) immer noch nicht gefunden wird, kehren Sie zur Ausgangsposition zurück. Zu diesem Zeitpunkt sind die Zugriffsbits aller Seiten 0. Wiederholen Sie die Schritte 1) und 2), und die Ersatzseite wird gefunden.

Andere Algorithmen zum Ersetzen von Seiten

  • LFU-Algorithmus (Least Frequently Used Permutation).

    Wählen Sie zur Eliminierung die Seite mit den wenigsten Besuchen zum aktuellen Zeitpunkt aus. Dieser Algorithmus erfordertLegen Sie für jede Seite einen Zugriffszähler fest. Bei jedem Zugriff auf die Seite wird der Zugriffszähler der Seite um 1 erhöht. Wenn ein Seitenfehler auftritt, wird die Seite mit dem kleinsten Zählwert gelöscht und alle Zähler werden gelöscht.

  • Algorithmus zur Seitenpufferung

    Der PBA-Algorithmus ist eine Weiterentwicklung des FIFO-Algorithmus. Durch die Einrichtung eines Puffers für Ersatzseiten ruft er die gerade ersetzten Seiten ab und reduziert so den E/A-Verbrauch des Systems.. Der PBA-Algorithmus verwendet den FIFO-Algorithmus zur Auswahl der zu ersetzenden Seite. Die ausgewählte Seite wird nicht sofort ausgelagert, sondern in eine der beiden verknüpften Listen aufgenommen. Wenn die Seite nicht geändert wurde, wird sie am Ende der Liste der freien Seiten platziert, andernfalls wird sie am Ende der Liste der geänderten Seiten platziert. Diese freien Seiten und geänderten Seiten bleiben einige Zeit im Speicher. Wenn auf diese Seiten erneut zugegriffen wird, müssen sie nur aus der entsprechenden verknüpften Liste entfernt und an den Prozess zurückgegeben werden, wodurch ein Festplatten-E/A reduziert wird. Wenn eine neue physische Seite übertragen werden muss, wird die neue Seite in die erste Seite der verknüpften Liste freier Seiten eingelesen und dann aus der verknüpften Liste entfernt. Wenn die Anzahl der geänderten Seiten eine bestimmte Anzahl erreicht, werden sie zusammen auf die Festplatte geschrieben und dann in die Liste der freien Seiten eingefügt. Dadurch kann die Anzahl der E/A-Vorgänge erheblich reduziert werden.

3.2.4 Arbeitssatz- und Seitenzuordnungsstrategie

Arbeitsmengentheorie

Um das Jitter-Phänomen zu lösen, wird das Konzept des Arbeitssatzes eingeführt.Der Arbeitssatz wird nach dem Lokalitätsprinzip angenommen. Wenn wir vorhersagen können, auf welche Seiten das Programm innerhalb eines bestimmten Zeitraums zugreifen wird, und diese im Voraus in den Speicher übertragen können, können wir die Seitenfehlerrate erheblich reduzieren, wodurch die Ersetzungsarbeit reduziert und die CPU-Auslastung verbessert wird.

Der Arbeitssatz ist die Sammlung von Seiten, auf die die letzten n Mal zugegriffen wurde. Die Zahl n wird als Arbeitssatzfenster bezeichnet und gibt die Größe des Arbeitssatzes an.. Häufig verwendete Seiten befinden sich im Arbeitssatz. Wenn eine Seite nicht mehr verwendet wird, wird sie im Arbeitssatz verworfen. Wenn ein Prozess eine Seite anspricht, die sich nicht im Arbeitssatz befindet, wird ein Seitenfehler-Interrupt generiert. Bei der Behandlung eines Seitenfehlers wird der Arbeitssatz aktualisiert und die Seite wird bei Bedarf von der Festplatte gelesen .

Das Prinzip des Arbeitssatzmodells besteht darin, dass das Betriebssystem den Arbeitssatz jedes Prozesses überwachen kann, wobei hauptsächlich die Größe jedes Arbeitssatzes überwacht wird. Wenn freie physische Blöcke vorhanden sind, können Sie einen anderen Prozess in den Speicher übertragen, um den Grad der Mehrkanaligkeit zu erhöhen. Wenn die Gesamtgröße des Arbeitssatzes um mehr als die Gesamtzahl aller verfügbaren physischen Blöcke zunimmt, kann das Betriebssystem eine Auswahl treffen ein Prozesspaar im Speicher. Verschieben Sie es auf die Festplatte, um die Anzahl der Prozesse im Speicher zu reduzieren und Thrashing zu verhindern.

Die richtige Auswahl der Arbeitssatzfenstergröße, also der Anzahl der dem Prozess zugewiesenen Seiten, hat einen wichtigen Einfluss auf die effektive Speichernutzung und die Verbesserung des Systemdurchsatzes.

  • Wenn das Fenster einerseits sehr groß gewählt wird, ist der Prozess zwar nicht anfällig für Seitenfehler, der Speicher wird jedoch nicht vollständig ausgenutzt.
  • Wenn das Fenster hingegen zu klein gewählt wird, erzeugt der Prozess während des Betriebs häufig Seitenfehler-Interrupts, was tatsächlich zu einer Verringerung der Systemdurchsatzrate führt.

Strategie zur Seitenzuordnung

Im Anforderungs-Paging-Speicherverwaltungssystem gibt es zwei Arten vonStrategie zur Seitenzuordnung, nämlich feste Zuteilung und variable Zuteilung . im GangeSeitenaustauschWenn , können auch zwei Strategien angewendet werden, nämlich globaler Ersatz und lokaler Ersatz . Wenn man sie kombiniert, gibt es die folgenden drei geeigneten Strategien (feste Zuteilung und globaler Ersatz sind unvernünftig, daher gibt es diese Strategie nicht).

  • feste Zuordnung lokaler Ersatz

    Weisen Sie jedem Prozess eine bestimmte Anzahl physischer Blöcke zu. Diese Anzahl ist festgelegt und ändert sich nicht, während der Prozess ausgeführt wird.. Auf diese Weise konkurrieren Prozesse nicht um physische Blöcke, was dazu führt, dass bei einigen Prozessen häufig Seitenfehler auftreten, weil zu wenige physische Blöcke vorhanden sind, und dass bei einigen Prozessen Speicherplatz verschwendet wird, weil zu viele physische Blöcke zugewiesen sind.Bei Verwendung einer lokalen Ersetzungsstrategie mit fester Zuweisung muss ein Algorithmus verwendet werden, um zu bestimmen, wie viele physische Blöcke jeder Prozess zuweist. Zu den häufig verwendeten Algorithmen gehören der durchschnittliche Zuweisungsalgorithmus, der proportionale Zuweisungsalgorithmus und der Zuweisungsalgorithmus, der die Priorität berücksichtigt.

  • Veränderliche Zuordnung globaler Permutationen.Das Betriebssystem unterhält eine Warteschlange für freie physische Blöcke. Jedes Mal, wenn ein Prozess einen Seitenfehler hat, nimmt es eine Warteschlange für freie physische Blöcke und weist sie ihr zu. Wenn im System keine freien physischen Blöcke vorhanden sind, ruft das System möglicherweise jeden Prozess auf . eine der Seiten

  • Variable Zuordnung lokaler Vertretungen.Nachdem jedem Prozess eine bestimmte Anzahl physischer Blöcke zugewiesen wurde, darf der Prozess jedes Mal, wenn ein Seitenfehler auftritt und kein freier physischer Block im Speicher vorhanden ist, nur eine seiner eigenen Speicherseiten auslagern Wenn ein Prozess auf Seitenfehler stößt, weist ihm das Betriebssystem zusätzliche physische Blöcke zu, bis die Seitenfehlerrate auf ein angemessenes Niveau reduziert ist. Wenn die Seitenfehlerrate eines Prozesses besonders niedrig ist, wird die Anzahl der ihm zugewiesenen physischen Blöcke entsprechend reduziert . Die lokale Ersetzungsstrategie mit variabler Zuordnung kann eine höhere Speicherplatzauslastung erreichen und gleichzeitig sicherstellen, dass jeder Prozess eine niedrigere Seitenfehlerrate aufweist.

Seitenladestrategie

  • Paging-Strategie anfordern.Eine Seite wird nur dann in den Speicher geladen, wenn sie verwendet wird, andernfalls wird sie im externen Speicher abgelegt.. Diese Paging-Methode führt häufig zu Seitenfehlern, wenn ein Prozess zum ersten Mal gestartet wird, da zu Beginn keine Seiten für den Prozess im Speicher vorhanden sind. Diese Strategie ist einfach zu implementieren, erzeugt jedoch tendenziell mehr Seitenfehler-Interrupts, nimmt viel Zeit in Anspruch und ist anfällig für Jitter.
  • Prepage-Strategie. Diese Strategie bezieht sich aufLaden Sie Seiten, die voraussichtlich in naher Zukunft verwendet werden, in den Speicher, auch wenn sie noch nicht verwendet werden. Wenn der Programmierer beim Start des Programms angeben kann, welche Seiten zuerst geladen werden sollen, und sie zusammenfügen kann, können sie durch die Pre-Paging-Strategie sofort in den Speicher geladen werden, was viel Zeit sparen kann. Hierbei handelt es sich um eine auf dem Lokalitätsprinzip basierende Vorhersage, die normalerweise beim ersten Laden eines Programms verwendet wird.

Von wo aus die Seite geladen werden soll

Paging-System anfordernDer externe Speicher ist in zwei Teile unterteilt: den Dateibereich zum Speichern von Dateien und den Auslagerungsbereich zum Speichern von Auslagerungsseiten.. Da der Auslagerungsbereich kontinuierlich und die Dateien diskret zugewiesen werden, ist die Festplatten-E/A-Geschwindigkeit des Auslagerungsbereichs im Allgemeinen höher als die des Dateibereichs. Auf diese Weise sollte das System bei jedem Auftreten einer Seitenfehleranforderung die fehlerhafte Seite in den Speicher laden.

  • Das System verfügt über ausreichend Swap-Area-Speicherplatz. Zu diesem Zeitpunkt können alle erforderlichen Seiten aus dem Swap-Bereich übertragen werden, um die Paging-Geschwindigkeit zu erhöhen. Aus diesem Grund sollten vor der Ausführung des Prozesses die zum Prozess gehörenden Dateien aus dem Dateibereich in den Auslagerungsbereich kopiert werden.
  • Dem System fehlt ausreichend Swap-Area-Speicherplatz. Zu diesem Zeitpunkt werden alle Dateien, die nicht geändert werden, direkt aus dem Dateibereich übertragen. Wenn diese Seiten ersetzt werden, ist es nicht erforderlich, sie auszulagern, da sie nicht geändert wurden. Wenn sie in der Zukunft erneut übertragen werden, Sie werden weiterhin direkt aus dem Dateibereich übertragen. Schalten Sie ein. Aber Teile, die geändert werden können, sollten beim Austausch in den Austauschbereich übertragen und bei Bedarf wieder aus dem Austauschbereich zurückübertragen werden.

3.2.5 Jitter-Phänomen und Seitenfehlerrate

BeladyException

FIFO-ErsetzungsalgorithmusDie Seitenfehlerrate kann mit zunehmender Anzahl zugewiesener physischer Blöcke ansteigen. Dieses seltsame Phänomen ist die Belady-Anomalie.. Beispielsweise treten für die Referenzzeichenfolge 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5, 9 Seitenfehler-Interrupts auf, wenn die Anzahl der physischen Blöcke im Speicher 3 beträgt und die Die Anzahl der physischen Blöcke beträgt 4. Stattdessen treten 10 Seitenfehler-Interrupts auf.

Der Grund für die Belady-Ausnahme liegt darin, dass die Ersetzungseigenschaften des FIFO-Algorithmus mit den dynamischen Eigenschaften des Speicherzugriffs des Prozesses in Konflikt stehen, d. h. der Prozess greift nicht auf die ersetzten Seiten zu .

Belady-Ausnahmen können im FIFO-Algorithmus auftreten, Belady-Ausnahmen treten jedoch niemals im LRU-Algorithmus und im optimalen Ersetzungsalgorithmus auf . Es ist auch unwahrscheinlich, dass Belady-Ausnahmen im als Stapelalgorithmus klassifizierten Seitenersetzungsalgorithmus auftreten .

Jitter-Phänomen

Wenn der ausgewählte Seitenersetzungsalgorithmus ungeeignet ist, kann dieses Phänomen auftreten:Die Seite, die gerade gelöscht wurde, wird kurz darauf wieder aufgerufen und kurz nach dem Aufruf wieder aufgerufen. Dies wiederholt sich, so dass das System die meiste Zeit mit dem Laden der Seite und dem Laden verbringt und diese kaum abschließen kann effektive Arbeit. Dieses Phänomen wird Jitter (oder Thrashing) genannt.

Die Ursache für Jitter istJedem Prozess in einem Demand-Paging-System wird nur ein Teil des insgesamt benötigten Speicherplatzes zugewiesen.

Seitenfehlerrate

Angenommen, ein Job hat insgesamt n Seiten und das System weist dem Job m Seiten Speicherplatz zu (m<=n). Wenn der Job während des Betriebs insgesamt A-mal auf eine Seite zugreifen muss (d. h. die Länge der Referenzzeichenfolge beträgt A) und sich die Seite, auf die zugegriffen werden soll, nicht im Speicher befindet, wird die erforderliche Anzahl an Malen ermittelt in den Speicher übertragen werden soll, ist F, dann ist die Seitenfehlerrate definiert als f= F /A, die Trefferrate ist 1-f.

Die Seitenfehlerrate ist ein wichtiger Indikator zur Messung des Seitenersetzungsalgorithmus. Normalerweise wird die Seitenfehlerrate durch Faktoren wie den Ersetzungsalgorithmus, die Anzahl der zugewiesenen Seiten und die Seitengröße beeinflusst. Die Seitenfehlerrate ist für das Anforderungs-Paging-Verwaltungssystem sehr wichtig. Wenn die Seitenfehlerrate zu hoch ist, führt dies direkt zu einer Erhöhung der durchschnittlichen Zeit zum Lesen von Seiten und verringert die Geschwindigkeit der Prozessausführung erheblich. Daher ist die Reduzierung der Seitenfehlerrate eine sehr wichtige Aufgabe.

3.2.6 Anfordern des Staging-Speicherverwaltungssystems

Das Anforderungssegmentierte Speicherverwaltungssystem stellt dem Benutzer wie das Anforderungsseitenspeicherverwaltungssystem einen virtuellen Speicher zur Verfügung, der viel größer ist als der verfügbare Platz im Hauptspeicher. Ebenso wird die tatsächliche Größe des virtuellen Speichers durch die Adressstruktur des Computers bestimmt. Im Speicherverwaltungssystem für Anforderungssegmente kann der Job vor der Ausführung des Jobs gestartet werden, solange die aktuell erforderlichen Segmente in den Hauptspeicher geladen sind. Wenn sich das Segment, auf das Sie zugreifen möchten, während der Ausführung des Jobs nicht im Hauptspeicher befindet, können Sie es mit der Segmentanpassungsfunktion übertragen. Gleichzeitig können Sie auch die Ersetzungsfunktion verwenden, um das vorübergehend nicht verwendete Segment zu ersetzen Segmente in den externen Speicher kopieren, um Speicherplatz freizugeben. . Dazu sollte die Segmenttabelle erweitert werden.

Fügen Sie hier eine Bildbeschreibung ein

Die drei Informationen Segmentnummer, Segmentlänge und Speicherstartadresse sind für die Adressübersetzung erforderlich. Die Bedeutung anderer Felder ist dieselbe wie bei der Anforderung der Paging-Speicherverwaltung.Wenn sich das Segment im Speicher befindet, ist der Adressübersetzungsprozess derselbe wie bei der segmentierten Speicherverwaltung. Wenn sich das Segment nicht im Speicher befindet, sollte das Segment zuerst in den Speicher übertragen werden, und dann wird die Adressübersetzung durchgeführt.

Wenn sich das Segment, auf das zugegriffen wird, nicht im Hauptspeicher befindet, wird ein Interrupt-Signal für fehlende Segmente generiert. Wenn das Betriebssystem den Interrupt verarbeitet, durchsucht es den Hauptspeicher, um festzustellen, ob eine Partition vorhanden ist, die groß genug ist, um das Segment zu speichern. Wenn keine solche Partition vorhanden ist, überprüfen Sie die Gesamtkapazität der freien Partitionen, um festzustellen, ob die Partitionen gespleißt werden müssen oder ob ein oder mehrere Segmente geladen werden müssen, bevor die erforderlichen Segmente geladen werden.

Ich denke du magst

Origin blog.csdn.net/pipihan21/article/details/129809005
Empfohlen
Rangfolge