320 likes | 466 Views
5.6 Segmentierte Prozesse im virtuellen Speicher. Zur Erinnerung: Virtueller Speicher ermöglicht effiziente und komfortable Nutzung des realen Speichers; Sharing ist problematisch. Segmentierung erleichtert Sharing, auch mit unterschiedlichen Zugriffsrechten.
E N D
5.6 Segmentierte Prozesse im virtuellen Speicher • Zur Erinnerung: • Virtueller Speicher ermöglicht effiziente und • komfortable Nutzung des realen Speichers; • Sharing ist problematisch. • Segmentierung erleichtert Sharing, • auch mit unterschiedlichen Zugriffsrechten. • Kombination bietet sich an !
5.6.1 Grobkörnige Segmentierung Jedes Segment umfasst eine oder mehrere Seiten: Segmentdeskriptor beschreibt nicht Bytefolge im Arbeitsspeicher, sondern Seitenfolge im virtuellen Speicher, d.h. Seitentabelle (!) des Segments Virtuelle Adresse besteht aus Segmentnummer, Seitennummer, Distanzadresse
Prozessor/MMU Kontextregister Assoziativregister base limit w Virtuelle Adresse s p o s p frame w d base limit frame d c Speicher w Segmentliste des aktiven Prozesses Segmenttabelle page backup Seitentabelle des virtuellen Speichers Seite (s,p) Rahmentabelle Auslagerungsbereich
! Unterscheide: • Verwaltung des virtuellen Speichers: • Neues Segment mit n Seiten einrichten • bedeutet: im virtuellen Speicher n konsekutive Seiten finden • d.h. in der Seitentabelle n konsekutive freie Zellen finden • ( “externer Verschnitt“ – aber nur virtuelle Adressen!) • Verwaltung des realen Speichers • = Verwaltung der Rahmen
Früher Pionier dieses Ansatzes: MULTICS (MIT 1967) auf Hardware GE 645: 256 K Segmente (!) à 64 Seiten à 1 K (36-Bit-)Worte Jeder Prozess hat eigene Segmenttabelle, die selbst „gepaged“ ist; statt mehrerer Kontextregister gibt es ein descriptor base register, das auf die Segmenttabelle verweist Segmentdeskriptor beschreibt Seitentabelle des Segments; Sharing durch gemeinsam benutzte Seitentabelle
BS-Segmente sind permanent in die Adressräume aller Prozesse eingeblendet (!), allerdings speziell zugriffsgeschützt: Segmente haben unterschiedliche Schutzstufen(rings of protection) 0,1,2,...,7, zwischen denen Übergriffe nur begrenzt möglich sind. am höchsten geschützt 0 1 2 3 4 5 6 7
5.6.2 Feinkörnige Segmentierung Segment ist beliebiger Bereich im virtuellen Speicher: 20 K 24 K 28 K 32 K 36 K ... ... Motivation: kleine gemeinsame Objekte feinkörniger Schutz eines Programms vor sich selbst (entbehrlich bei sicheren Programmiersprachen) ! Spezielle Hardware erforderlich ! Pioniere (ohne Paging): Plessey 250 (1975) CAP (Cambridge 1977)
Adressierung über Berechtigungen(capabilities): • Segmentdeskriptor = Basisadresse + Länge (im virt. Sp.) • Segmenttabelle enthält alle Segmentdeskriptoren • Berechtigung = Index in Segmenttabelle + Zugriffssrecht, • vor Manipulation geschützt (s.u.), • durch Berechtigungsverweis identifiziert • Berechtigungsregister(capability registers) können wie • normale Register unter Bezugnahme auf eine Berechtigung • mit zugehörigem Segmentdeskriptor geladen werden • Adressierung einer Speicherzelle durch Angabe von • Berechtigungsregister + Distanzadresse
Beachte: ein Berechtigungsregisterähnelt einem Segmentregister, seine Benutzung erfordert aber keinen privilegierten Modus • ? Was ist der „Adressraum eines Prozesses“ ? • 2 mögliche Antworten: • die über die Berechtigungsregister • erreichbaren Segmente • die über die jeweils verfügbaren Berechtigungen • erreichbaren Segmente – • direkt adressierbar ist jeweils nur der über die • Berechtigungsregister erreichbare Ausschnitt
Geschützte Ralisierung der Berechtigungen mittels Berechtigungsliste(capability list), entweder per Prozess, bei den vom BS geführten Daten, Berechtigungen durchnumeriert, Berechtigungsverweis = Nummer oder per Segment in Schattenregion (shadow region) des Segments (vor der Basisadresse), Berechtigungsverweis = Berechtigungsregister (für Segment) + Nummer
Prozessor/MMU Assoziativregister Berechtigungsregister base limit w Programmadresse b o page frame w d base limit frame d c Speicher w Segmenttabelle Berechtigungsliste des aktiven Prozesses page backup Seitentabelle des virtuellen Speichers Seite (s,p) Rahmentabelle Auslagerungsbereich
5.6.3 Aktuelle Hardware: Intel IA-32 Terminologie der zweistufigen Adressumsetzung: Programm- virtuelle reale adresse Adresse Adresse segmentation unit paging unit logical linear physical address address address Paging Unit ist abschaltbar virtuelle = reale Adresse (80286 hatte nur Segmentierung, kein Paging)
5.6.3.1 Segmentierung • Aktueller Kontext des Prozessors wird bestimmt durch • 6 Segmentregister-Paare (Selektor,Deskriptor): • CS für Code-Segment • SS für Stack-Segment • DS für Daten-Segment • ES für sonstige Datensegmente • FS für sonstige Datensegmente • GS für sonstige Datensegmente
Adressenangabe im Maschinenbefehl besteht aus • Segmentregister + Distanzadresse, z.B. MOV DS:0,EAX • außer: Befehlelokalisieren: stets im Code-Segment; • Keller-Befehle ausführen: stets im Stack-Segment; • Zeichenketten-Befehle: stets im ES-Segment. • Benutzerprogramm (! vgl. 5.6.2) • kann Segmentregister beliebig laden, z.B. MOV DS,AX , • und damit seinen Adressraum beliebig verschieben • - im Rahmen der ihm zur Verfügung stehenden Segmente:
als Operand dient ein Segmentselektor: • dieser Selektor wird ins Selektorregister geladen; • er identifiziert einen Segmentdeskriptor in der • LDT(local descriptor table) oder • GDT(global descriptor table), • und dieser wird ins Deskriptorregister geladen. GDT oder LDT privilege level (s.u.) index 13 1 2
Quelle: Intel Architecture Software Developer‘s Manual Vol. 3: System Programming
Beachte: • Segmentarten sind weitgehend festgelegt • private und gemeinsame Segmente werden über • verschiedene Tabellen verwaltet (LDT versus GDT) • Besonderheit beim Code-Segment:CS kann nicht • beliebig geladen werden, sondern wird als Folge • eines CALL/RET-Befehls oder einer Unterbrechung • geladen (s.u.).
Segmentdeskriptor enthält u.a. • base Adresse des ersten Bytes des Segments, • (32 Bits)„lineare Adresse“ (4 GB Adressraum) • = reale Adresse bei abgeschaltetem Paging, • virtuelle Adresse sonst • limit Länge des Segments • (20 Bits) in Bytes, falls G = 0, • in Seiten à 4 KB, falls G = 1 • G(granularity) Einheit der Segmentlänge • (1 Bit) • DPL (descriptor privilege level)Privilegierungsstufe • (2 Bits) für Zugriffsschutz: 0,1,2 oder 3 (niedrigste Stufe)
Zugriffsschutz, insbesondere für globale Segmente: • Zugriff auf ein Segment wird untersagt, • wenn dessen Privilegierungsstufe höher als diejenige • im Selektorregister des aktuellen Code-Segments ist. • Beispiel: auf ein Segment der Stufe 3 • kann man immer zugreifen. • Ausnahme: kontrollierter Übergang in ein höher • privilegiertes Code-Segment mit CALL, • z.B. für Systemaufruf (s.u.)
3 Idee der Intel-Architekten: 2 1 Mikrokern Kern Bibliotheken Benutzerprogramme 0
3 Idee der Intel-Architekten: 2 1 Mikrokern Kern Bibliotheken Benutzerprogramme 0 Aber Linux ... Minix ... Kern Bibliotheken und Benutzerprogramme Mikrokern Tasks Systemprozesse, Bibliotheken und Benutzerprogramme
BefehlCALL operand (Rücksprung mit RET) • mit operand = Segmentselektor + Distanzadresse • erlaubt Wechsel des Code-Segments • mit Sprung in dieses neue Code-Segment – • sofern dessen Privilegierungsstufe nicht höher ist. • mit operand = Selektor eines Call Gate • erlaubt Wechsel mit Erhöhung der Privilegierungsstufe: • Call Gate Descriptor verweist auf Code-Segment • und dortige Einsprungstelle; • beim Sprung wird auch das Keller-Segment ausgetauscht • (gemäß Information im TSS – Task State Segment)
5.6.3.2 Paging • Jeder Prozess hat eigenes • Seitenverzeichnis (page directory) für die Umsetzung der • virtuellen 32-Bit-Adressen • seines 4-GB-Adressraums • mittels 4-K-Seiten • in reale Adressen Seitenverzeichnis des aktuellen Prozesses ist erreichbar über control register cr3
Seitenverzeichnis enthält Deskriptoren für • auslagerbare Seitentabellen: 1 KB Deskriptoren à 4 Bytes . . . . . . cr3 control register Page Directory Seitentabellen Seiten . . .
Gemeinsame Nutzung von Segmenten erfolgt über gemeinsam genutzte Teiltabellen: Prozess A Prozess B . . . . . . . . .
Interpretation der virtuellen Adresse: table page offset 10 10 12 Seitendeskriptoren verfügen über die üblichen Daten frame, flags: accessed, dirty, present, ... ..... • Assoziativspeicher beschleunigt Adressumsetzung: • Seitendeskriptor wird identifiziert über (table,page)
5.6.3.3 Nutzungsmöglichkeiten sind vielfältig, lassen dem BS-Entwickler viele Freiheiten! Beispiele: Segmentierung ignorieren Paging ignorieren (abschaltbar über PG Bit in cr0) große versus kleine Segmente Realisierung von Sharing u.a.
Beispiel Linux : • 4 Segmente – Code/Daten für Kern/Benutzer – • haben unterschiedliche Privilegien für Kern und Benutzer, • werden aber alle auf die gleichen virtuellen Adressen • 0 – 1 MB abgebildet. • (Motivation: System soll ohne große Änderungen • auch für RISC-Prozessoren ohne • Segmentierung einsetzbar sein)