5.6 Segmentierte Prozesse im virtuellen Speicher

32
bs-5.6 1 5.6 Segmentierte Prozesse im virtuellen Speicher 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 !

description

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. - PowerPoint PPT Presentation

Transcript of 5.6 Segmentierte Prozesse im virtuellen Speicher

Page 1: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 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 !

Page 2: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 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

Page 3: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 3

base limit frame d c

page backup

Segmenttabelle

Seitentabelledes virtuellen Speichers

Rahmentabelle

base limit w

Kontextregister Assoziativregister

Virtuelle Adresses p o

Segmentliste desaktiven Prozesses

w

Seite (s,p)

s p frame w d

Auslagerungsbereich

Speicher

Prozessor/MMU

Page 4: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 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

Page 5: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 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 mehrererKontextregister gibt es eindescriptor base register, das auf die Segmenttabelle verweist

Segmentdeskriptor beschreibt Seitentabelle des Segments; Sharing durch gemeinsam benutzte Seitentabelle

Page 6: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 6

BS-Segmente sind permanent in die Adressräumealler Prozesse eingeblendet (!),

allerdings speziell zugriffsgeschützt:Segmente haben unterschiedlicheSchutzstufen (rings of protection) 0,1,2,...,7,zwischen denen Übergriffe nur begrenztmöglich sind.

am höchstengeschützt

0 1 2 3 4 5 6 7

Page 7: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 7

5.6.2 Feinkörnige Segmentierung

Segment ist beliebiger Bereich im virtuellen Speicher:

... ...

Motivation: kleine gemeinsame Objekte

feinkörniger Schutz eines Programmsvor sich selbst (entbehrlich beisicheren Programmiersprachen)

! Spezielle Hardware erforderlich !Pioniere (ohne Paging): Plessey 250 (1975)

CAP (Cambridge 1977)

20 K 24 K 28 K 32 K 36 K

Page 8: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 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 wienormale Register unter Bezugnahme auf eine Berechtigung

mit zugehörigem Segmentdeskriptor geladen werden Adressierung einer Speicherzelle durch Angabe von

Berechtigungsregister + Distanzadresse

Page 9: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 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

Page 10: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 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

Page 11: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 11

base limit frame d c

page backup

Segmenttabelle

Seitentabelledes virtuellen Speichers

Rahmentabelle

base limit wBerechtigungsregister Assoziativregister

Programmadresseb o

Berechtigungsliste desaktiven Prozesses

w

Seite (s,p)

page frame w d

Auslagerungsbereich

Speicher

Prozessor/MMU

Page 12: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 12

5.6.3 Aktuelle Hardware: Intel IA-32

Terminologie der zweistufigen Adressumsetzung:

segmentationunit

paging unitlogical linear physical

address address address

Programm- virtuelle realeadresse Adresse Adresse

Paging Unit ist abschaltbar virtuelle = reale Adresse

(80286 hatte nur Segmentierung, kein Paging)

Page 13: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 13

5.6.3.1 Segmentierung

Aktueller Kontext des Prozessors wird bestimmt durch

6 Segmentregister-Paare (Selektor,Deskriptor):

CS für Code-SegmentSS für Stack-SegmentDS für Daten-SegmentES für sonstige DatensegmenteFS für sonstige DatensegmenteGS für sonstige Datensegmente

Page 14: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 14

Adressenangabe im Maschinenbefehl besteht ausSegmentregister + Distanzadresse, z.B. MOV DS:0,EAX

außer: Befehle lokalisieren: 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:

Page 15: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 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.

indexGDT oder LDT

privilege level (s.u.)13 1 2

Page 16: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 16

Quelle: Intel Architecture Software Developer‘s ManualVol. 3: System Programming

Page 17: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 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.).

Page 18: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 18

Page 19: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 19

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)

Page 20: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 20

Page 21: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 21

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

Page 22: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 22

3

2

1

0

Idee der Intel-Architekten:

Mikrokern

Kern

Bibliotheken

Benutzerprogramme

Page 23: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 23

3

2

1

0

Idee der Intel-Architekten:

Mikrokern

Kern

Bibliotheken

Benutzerprogramme

Aber Linux ... Minix ...

Kern

Bibliotheken undBenutzerprogramme

Mikrokern

Tasks

Systemprozesse,Bibliotheken undBenutzerprogramme

Page 24: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 24

Befehl CALL operand (Rücksprung mit RET)

mit operand = Segmentselektor + Distanzadresseerlaubt Wechsel des Code-Segmentsmit Sprung in dieses neue Code-Segment – sofern dessen Privilegierungsstufe nicht höher ist.

mit operand = Selektor eines Call Gateerlaubt Wechsel mit Erhöhung der Privilegierungsstufe:

Call Gate Descriptor verweist auf Code-Segmentund dortige Einsprungstelle;

beim Sprung wird auch das Keller-Segment ausgetauscht (gemäß Information im TSS – Task State Segment)

Page 25: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 25

5.6.3.2 Paging

Jeder Prozess hat eigenes

Seitenverzeichnis (page directory) für die Umsetzung der virtuellen 32-Bit-Adressen seines 4-GB-Adressraumsmittels 4-K-Seitenin reale Adressen

Seitenverzeichnis des aktuellen Prozesses ist erreichbar über

control register cr3

Page 26: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 26

Seitenverzeichnis enthält Deskriptoren für

auslagerbare Seitentabellen:

Page Directory

Seitentabellen

Seiten

...

...

...

1 KB Deskriptorenà 4 Bytes

cr3control register

Page 27: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 27

Gemeinsame Nutzung von Segmenten

erfolgt über gemeinsam genutzte Teiltabellen:

...

...

...

Prozess A

Prozess B

Page 28: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 28

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)

Page 29: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 29

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.

Page 30: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 30

Segmentierung ignorieren:

Page 31: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 31

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)

Page 32: 5.6  Segmentierte Prozesse im virtuellen Speicher

bs-5.6 32

Eine Seitentabelle für jedes Segment: