Kapitel 3 - Speicherschutz und Multitasking
|
Inhalt
|
- Segmente und Speicherschutz
- Real- und Protected Modes
- Privilegebenen und Deskriptoren
- Wie werden die Adressen gebildet?
- Wie arbeitet Paging)
|
Um unberechtigte Zugriffe, Datenaufrufe oder Systemprozedurecalls zu vermeiden und Task-Isolation zu gewährleisten,
ist ein ausgeklügeltes Speicherschutzsystem notwendig.
Segmente zum schützen von Speicherbereichen
Segmente sind logische Speicherbereiche variabler Länge (Pages sind normalerweise gleich groß und ergeben zusammengesetzt ein Segment).
In einem Segment ist wiederum eine Aufteilung in Code-, Daten- und Speichersegment zu finden. Jedes Segment definiert ein Objekt, welches
eindeutig über einen Deskriptor mit Basisadresse, Zugriffsrechten und Limit beschieben wird.
Auf Basis dieser Segmente arbeitet die komplette Speicherverwaltung eines Rechners-
Wie wird auf Segmente zugegriffen?
Segmente werden über eine Deskriptortabelle indiziert. Die Tabellen enthalten Pointer auf die
Speicherbereiche der jeweiligen Segmente.
Was ist das besondere am segmentierten Adreßraum?
Adressen auf Basis von Segmenten sind im unterschied zu linearen Adressen zweidimensional. Sie bestehen aus Segment und Offset.
Berechnet werden sie durch einfache Addition von Segment und Offset. Vor der Addition ist das Segment um 4 Stellen nach
links zu verschieben.
0002 : 000F berechnet sich also aus 0020 + 000F = 0001F
Was sind die Nachteile des Realmodes?
- Begrenzung eines Segments auf maximal 64 KB, da Offsetadresse nur 16 Bit groß ist
- Es nur das erste MByte durch das Betriebssystem adressierbar
- kein Schutz des Speichers vor anderen Programmen
- Einträge aus der Interruptvektor-Tabelle sind leicht veränderbar
- nur ein Programm kann ausgeführt werden
Was hat Multitasking mit Protected Mode zu tun?
Multitasking kann nur durch Protected Mode arbeiten. Er ist sozusagen Grundlage für alle multitaskingfähigen Betriebssysteme.
nsbesondere geht es um
- gegenseitigen Schutz der laufenden Tasks
- Taskwechselunterstützung durch das Betriebssystem
- Privilegierungsmechanismen
- Betriebssystemfunktionen zur Verwaltung von virtuellen Speicher
- Getrennte Stacks für Parameterübergabe
- Lösung des "Trojanischen Pferd" Problems
Was sind Privilegebenen?
Im Protected Mode werden Anwendungen und Betriebssystem strikt getrennt. Es gibt vier Privilegstufen (null bis drei),
welche über die Ausführung verschiedener Maschinensprachebefehle entscheiden.
Befehle der Ebene Null sind z.B. das Laden der globalen Deskriptorentabelle oder des Maschinenstatuswortes.
Aus welchen zwei Teilen besteht eine Virtuelle Adresse?
Eine virtuelle Adresse beinhaltet den Segmentselektor, welcher auf einen Eintrag in der Deskriptortabelle zeigt.
Das Segment-Offset zeigt auf die dazugehörige Adresse in dem selektierten Segment.
Aus welchen drei Teilen setzt sich ein Segmentselektor zusammen?
Aus dem Index, der den Eintrag in der Deskriptortabelle referenziert, dem Table Indicator, welcher über globalem
oder lokalem Adressraum entscheidet und den Privelege Level.
TI - Table Indicator
0 = GDT (Global Deskriptor Table für den globalen Adreßraum)
1 = LDT (Local Deskriptor Table für den lokalen Adreßraum)
RPL - Requestor's Privilege Level
Privilegstufe des Segments, auf welches der Selektor verweist
Was ist ein Deskriptor?
Deskriptoren sind Abbildungen zwischen der virtuellen bzw. logischen Adresse (Segmentselektor:Offset) und der
linearen Adresse (Basisadresse und Offset). Aus der linearen Adresse wird dann die physikalische Adresse berechnet.
(bei i286 war die lineare Adresse noch gleich der physikalischen Adresse, da es noch keine Paging-Einheit gab)
Was steht alles in so einem Eintrag in der Deskriptortabelle?
Die "normalen" Deskriptoren, welche einen normalen Adressraum (Daten-, Code- oder Stacksegment) beschreiben, enthalten
- die Basisadresse des Segmentes im Speicher
- die Zugriffsrechte
- die Länge des Segmentes
Eine andere Klasse von Deskriptoren sind System-Segment-Deskriptoren und zur Ablaufsteuerung
notwendige Deskriptoren. Erstere definieren Einsprungpunkte in spezielle System-Unterroutinen
oder Gates. Letztere sind Deskriptoren für Task-State-Segmente oder Local-Deskriptor-Tables.
Aktiv sind aber immer nur eine globale, eine lokale Interrupt-Beschreibertabelle und eine Interrupt-Beschreibertabelle.
Was ist ein Gate?
Gates sind spezielle Eintritts-Deskriptoren in Segmente höherer Privilegstufe. (Interrupt- oder Trap-Gate-Deskriptoren)
Worin unterscheiden sich GDT und LDT?
Die Global Descriptor Table einhält Segmente des globalen Adressraums, welcher für alle Tasks zur Verfügung steht.
Dagegen sind mit Local Descriptor Table allokierte Segmente nur von den Host-Tasks selbst adressierbar. (privater Adressraum)
Lokale Deskriptortabellen sind Grundlage für die Task-Isolation und daher extrem wichtig für Sicherheit und Segmentschutz.
Beschreiben Sie den Aufbau einer Globalen Deskriptortabelle
| ... | ... |
| Globale C/D2 | Globale Code-/Daten-Deskriptoren |
| Globale C/D1 | Globale Code-/Daten-Deskriptoren |
| ... | ... |
| System D2 | Gates bzw. TSS-Deskriptoren |
| System D1 | Gates bzw. TSS-Deskriptoren |
| ... | ... |
| ... | ... |
| LDT 2 | Lokale Deskriptoren für individuellen Task |
| LDT 1 | Lokale Deskriptoren für individuellen Task |
| ... | ... |
| ... | ... |
| IDT 2 | Interrupt/Exeption Gates bzw. Deskriptoren |
| IDT 1 | Interrupt/Exeption Gates bzw. Deskriptoren |
| GTD_alias | ermöglicht dynamischen Zugriff auf die GDT |
| 0-Selektor | Zugriff auf 0-Selektor führt zu Exeption |
Was unterscheidet Real-Mode und Protected-Mode?
Im Real-Mode gibt es keine Deskriptoren und somit ist auch kein Segmentschutz möglich.
Die Basisadresse berechnet sich einfach aus dem Segment-Register, welches maximal 1 MByte adressieren kann,
da es nur 20 Bit breit ist. Im Protected-Mode werden die Basisadressen mittels Deskriptoren bestimmt.
Auf Grund dieser Unterschiede sind folgende Merkmale für den Protected-Mode
signifikant:
- Virtuelle Speicherverwaltung
- Speicherschutzmechanismen durch Segmentation (über Deskriptoren)
- Paging möglich
- echtes Multitasking möglich
- I/O-Privilegierung und privilegierte Befehle
Was ist Paging und wie funktioniert es?
Paging wird ab i386 vom Prozessor unterstützt und ist nichts weiter als eine Einteilung des Speichers in gleich große Seiten.
Vorteil des virtuellen Speichers, welcher durch Mapping oder Paging erst möglich ist, sind für Anwendungen theoretisch
unendlich großen Arbeitsspeicher. Grund dafür ist, dass der Tertiärspeicher als Zwischenspeicher für schlafende oder temporär
nicht notwendige Seiten ausgenutzt wird. Es gibt ausgeklügelte Seitenerstetzungsalgorithmen, welche das Austauschen von
Seiten übernehmen. Ein weiteres Problem was beim Paging gelöst werden muss, ist die eventuell entstehende Inkonsistenz. D
ieses Problem wird wie bekanntermaßen üblich durch Dirty-Bits in den Pages gelöst.
Verwirrend ist anfangs der Zusammenhang von Segmentierung und Paging. Letztendlich laufen beide Technologien gleichzeitig
auf einem modernen System und ergänzen sich gegenseitig. Paging ist hinter den Segmentierungsvorgang geschalten,
um Transparenz zu gewährleisten. Die durch die Segmentierung berechnete bzw. übergebene lineare Adresse
entspricht ohne Paging der physikalischen. Falls Paging aktiv ist, muss noch etwas mehr getan werden.
|
Die Umsetzung von Linearer in Physikalischer Adresse hängt vom verwendeten Paging ab.
Normalerweise wird über die ersten Bits die Page-Table referenziert und über die folgenden der Pagetable-Eintrag,
aus dem die Basisadresse geholt wird. Der Offset wird normalerweise beibehalten.
|
Beschreiben Sie was bei einem Page-Fault intern alles abläuft?
- Während Abarbeitung einer Befehlssequenz erfolgen mehrere Seitenzugriffe
- Es erfolgt ein Zugriff auf eine Seite.
- Prozessor prüft die Seite (ist sie im Speicher?).
- Seite gibt Page Not Present State zurück (d.h. Seite nicht im Speicher)
- CPU löst Page Fault Exception aus (Siehe System-Aufruf-Deskriptoren)
- Betriebssystem gibt in Auftrag die Seite von Platte zu holen
- Prozessor aktiviert Festplattenhardware und positioniert Leseköpfe
- Seite wird über DMA-Transfer von Disk-To-free Memory übertragen
- Betriebssystem aktualisiert Pagetable einschließlich des TLB (flush TLB)
- Betriebssystem startet den unterbrochenen Befehl neu
Nennen Sie Vorteile und Nachteile des Pagings gegenüber Segmentation-Only!
- Performanceerhöhung eines Multitasking-Betriebssystems
- Verwaltung der Swap-Datei wird durch die Verwendung konstanter Speicherblöcke einfacher
- nur die 4-KByte werden eingelagert, die tatsächlich benötigt werden und nicht das gesamte Segment
Nachteile:
- Ausführung verzögert sich, weil die Adresse erst dekodiert werden muß
- bei Zugriff auf eine Seite/Page evtl. erst Einlagerung dieser vom Sekundärspeicher notwendig (Present-Bit)
Wie kann man die Adressdekodierung beim Paging umgehen?
Durch Translation Lookaside Buffer. Ein TLB ist ein assoziativer Vierwege-Cache, welcher die 32
Page-Table-Einträge aufnimmt, auf die der Prozessor zuletzt zugegriffen hat (LRU-Strategie).
Ein TLB Eintrag besteht aus drei logischen Blöcken:
- Datenblock mit Page-Attributen und physikalische Basisadresse einer Page
- Tagblock enthält die oberen 17 Bit einer linearen Adresse und Schutz-Bits
- LRU-Block (Least Recently Used) zeigt letzten Zugriff an
Page- und Segmentschutz
Zuerst wirkt der Segmentschutz und danach Pageschutz. Pageschutz ist nur 2-stufig. Die inneren
drei Privilegebenen sind beim Paging als Supervisor-Code geschützt. Die äußere Ebene ist User-Code.
Ein Zugriffsversuch einer User-Page auf eine Supervisor-Page löst eine Exception aus.
Was unterscheidet kooperatives und preemtives Multitasking?
Beim kooperativen Multitasking entscheiden die Tasks selbst über die Umschaltung der Prozessorleistung.
(Naives und Gutgläubiges Verfahren, daß an die Vernunft aller Tasks und somit aller Programmierer glaubt : )
Preemptives Multitasking ist echtes Multitasking. Ein externer Timer steuert die Umschaltung der Tasks.
Die Tasks können somit keinen Einfluss auf die Betriebsmittelumschaltung nehmen.
|
|
|
|
|
| Kapitel 1 | Einleitung |
|
Befehlsschleife, Risc und Cisc...
|
| Kapitel 2 | Interrupts |
|
Interrupts, Polling, DMA...
|
| Kapitel 3 | Speicherschutz |
|
Segmentation, Paging, Mapping, Multitasking...
|
| Kapitel 4 | Caches |
|
Lokalität, Cache-Arten, Schreibstrategien...
|
| Kapitel 5 | Risc |
|
Risc-Architektur, Load/Store, Registerfenster...
|
| Kapitel 6 | Pipelining |
|
Prinzip, Datenkonflikte, Forwarding, Delayed Load
|
| Kapitel 7 | Branch Prediction |
|
Statische / Dynamische Brach-Prediction...
|
| Kapitel 8 | Superskalarität |
|
Out-Of-Order Execution, Scoreboard und Tomasulo, VLIW...
|
| Kapitel 9 | Parallelrechner |
|
SMP,Vektorrechner, Cache-Kohärenz
|
|
|
|
|
|
|
Quellen:
|
Andrew S. Tanenbaum
Computerarchitektur
|
Andrew S. Tanenbaum
Moderne Betriebssysteme
|
Petterson
Computer Architectur & Design
|
Christian Märtin
Rechnerarchitekturen
|
Rehm
Skript und Vorlesung
|
Word Wide Web
Verschiedenste Seiten
|
|
|
|
|
|
|