1 / 32

5.6 Segmentierte Prozesse im virtuellen Speicher

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.

Download Presentation

5.6 Segmentierte Prozesse im virtuellen Speicher

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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 !

  2. 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

  3. 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

  4. ! 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

  5. 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

  6.  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

  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)

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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)

  13. 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

  14. 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:

  15. 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

  16. Quelle: Intel Architecture Software Developer‘s Manual Vol. 3: System Programming

  17. 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.).

  18. 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)

  19. 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.)

  20. 3 Idee der Intel-Architekten: 2 1 Mikrokern Kern Bibliotheken Benutzerprogramme 0

  21. 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

  22. 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)

  23. 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

  24. Seitenverzeichnis enthält Deskriptoren für • auslagerbare Seitentabellen: 1 KB Deskriptoren à 4 Bytes . . . . . . cr3 control register Page Directory Seitentabellen Seiten . . .

  25. Gemeinsame Nutzung von Segmenten erfolgt über gemeinsam genutzte Teiltabellen: Prozess A Prozess B . . . . . . . . .

  26. 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)

  27. 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.

  28. Segmentierung ignorieren:

  29. 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)

  30. Eine Seitentabelle für jedes Segment:

More Related