systeme 1 kapitel 9.1 betriebssysteme auf aktueller hardware kapitel 9.2 interaktion von hardware...

43
Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/10 1

Upload: bardawulf-laible

Post on 05-Apr-2015

107 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

1

Systeme 1

Kapitel 9.1 Betriebssysteme auf aktueller Hardware

Kapitel 9.2 Interaktion von Hardware und Betriebssystem

Linux-Kernel und x86 SystemeWS 2009/10

Page 2: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

2

Letzte VorlesungBeispiel: Hash-Tabelle

Bei diesem einfachen Beispiel hat das Hinzufügen von weiteren CPUs sogar negative Effekte.

In diesem Beispiel wird hauptsächlich lesend auf die Tabelle zugegriffen, dennoch muss dieser Zugriff vor potentiell (seltenen) schreibenden Zugriffen geschützt werden.

Frage: Wie kann man solche Zugriffsmuster ausnutzen ?

WS 2009/10

01 2 3 4

5

10

15

20

25

30

35

Has

h Ta

ble

Sear

ches

per

Mic

rose

cond

# CPUs

„ideal“„global“

Quelle: Paul E. McKenney„Exploiting Deferred Destruction: An Analysis of Read-Copy-Updates Techniquesin Operating System Kernels“, Dissertation Oregon State University, July 2004.

Page 3: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

3

Read-Copy-Update (RCU)

• Read-Copy-Update (RCU) verbindet die Idee von nichtblockierender Synchronisation und symmetrischer Synchronisation.

• Erlaubt lesenden Zugriff ohne Synchronisationsoverhead:– Ohne Locks– Ohne atomaren Instruktionen Erreicht damit nahezu ideale Skalierung für

lesenden Zugriff.

WS 2009/10

Page 4: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

4

Read-Copy-Update (RCU)

WS 2009/10 Vergleich des Overheads zwischen Reader-Writer-Locks und RCU

Page 5: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

5

Read-Copy-Update

• Synchronisationsoverhead ausschließlich beim schreibenden Zugriff:

• Schreibender Zugriff auf eine Datenstruktur (Update) erfolgt in drei Schritten:1. Entferne alle Referenzen auf Daten, so dass keine

neuen lesenden Zugriffe mehr möglich sind.2. Warte bis alle lesenden Zugriffe beendet wurden.3. Wenn keine lesenden Zugriffe vorhanden, lösche

nicht mehr referenzierte Daten.

WS 2009/10

Page 6: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

6

Read-Copy-Update (RCU)

• Schreibender Zugriff (Update):– Für den lesenden Zugriff gibt es keine Synchronisierung,

somit muss sichergestellt werden, dass es zu keinem Lesefehler kommen kann.

WS 2009/10

Zeiger

Zeiger

Version 1

Version 1

Version 2

Ausgangssituation

Alte Version bleibt erhalten solange noch lesende Zugriffe stattfinden.

Update auf Version 2

Page 7: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

7

Read-Copy-Update (RCU)

• Schreibender Zugriff (Update):

WS 2009/10

Zeiger Version 1

Version 2

Alte Version bleibt erhalten –noch lesende Zugriffe.

Update auf Version 2

Zeiger Version 1

Version 2

Alte Version bleibt erhalten –noch lesende Zugriffe.Alte Version bleibt erhalten –noch lesende Zugriffe.

Update auf Version 3Version 3

Page 8: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

8

Read-Copy-Update (RCU)

• Schreibender Zugriff (Update):

WS 2009/10

Zeiger Version 1

Version 2

Keine lesenden Zugriffe mehr.

Alte Version bleibt erhalten –noch lesende Zugriffe.

Aktuelle VersionVersion 3

Zeiger

Version 2 Alte Version bleibt erhalten –noch lesende Zugriffe.

Aktuelle VersionVersion 3

Page 9: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

9

Read-Copy-Update (RCU)

• Problem: Wann sind alle lesenden Zugriffe auf einer bestimmten Version beendet?– Lesende Zugriffe sind synchronisations- und kommunikationsfrei

• Voraussetzungen für den lesenden Zugriff– Kein lesender Thread/Prozess darf während des Zugriffs auf

RCU geschützte Daten blockieren.– Kein lesender Thread/Prozess darf während des Zugriffs

unterbrochen werden. Wenn auf allen CPUs ein Context-Switch durchgeführt

wurde, sind garantiert alle lesenden Zugriffe der letzten Periode abgeschlossen. (Quiescent State)

WS 2009/10

Page 10: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

10

Read-Copy-Update (RCU)

• Wegen der speziellen Voraussetzungen für den lesenden Zugriff ist RCU besonders für Betriebssysteme interessant, da innerhalb des Betriebssystems diese Bedingungen garantiert bzw. kontrolliert werden können.

• Skalierung wird für Betriebssysteme immer wichtiger.– Moderne PCs werden praktisch nur noch als Mehrkernvariante

verkauft.• In Betriebssystemen kommen lesende Zugriffsmuster sehr

häufig vor. Meist werden Datenstrukturen einmal initialisiert, nur selten verändert und sehr häufig gelesen. – Z.B.: Einstellungen und Konfigurationen.– Adressauflösung von Netzwerkpaketen

• Gbit Geschwindigkeit / mehrere Netzwerkkarten / mehrere CPUsWS 2009/10

Page 11: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

11

RCU Zusammenfassung

• RCU bietet lock-freien lesenden Zugriff auf geteilte Daten. Dadurch ergibt sich kaum CPU Overhead und Lock-Contention wird vermieden.

• Eine fast optimale Skalierung wird erreicht.• Der Overhead wird auf Schreiboperation (Update)

übertragen.• Aufgrund der speziellen Anforderungen an den

lesenden Thread/Prozess ist eine Implementierung von RCU meist nur betriebssystemintern möglich.

WS 2009/10

Page 12: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

12

Systeme 1

Kapitel 9.2 Interaktion von Hardware und Betriebssystem

Linux-Kernel und x86 Systeme

WS 2009/10

Page 13: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

13

Speicherzugriffe auf x86 Systemen

• Auf x86 Systemen existieren drei Arten von Speicheradressen:– Logische Adresse– Lineare Adresse (Virtuelle Adresse)– Physikalische Adresse

• Übersetzung der Adressen erfolgt mit Hilfe von Hardware.

Segmentation-Unit Paging-Unit

LogischeAdresse

Lineare Adresse PhysikalischeAdresse

WS 2009/10

Page 14: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

14

Speichersegmente

• Die x86 Architektur unterteilt Speicher in einzelne Segmente. • Eine logische Speicheradresse besteht aus zwei Teilen,

– dem Segmentbezeichner (segment selector)– und der relativen Speicheradresse innerhalb des Segments (offset).

• X86 Prozessoren besitzen sechs eingebaute Register für einen schnellen Segmentzugriff, insbesondere drei spezielle Register:– cs (Code Segment Register)– ss (Stack Segment Register)– ds (Data Segment Register).Die weiteren Register ef, fs und gs sind unspezifisch und können für den Zugriff auf beliebige Datensegmente verwendet werden.

WS 2009/10

Page 15: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

15

Segment Deskriptoren

• Jedes Segment wird durch einen 8-Byte großen Segment-Deskriptor beschrieben.

• Unter anderem sind das:– die lineare Adresse des ersten Bytes– die Größe des Segments– die Art des Segments (Code, Daten, Task State)– der minimale CPU-Privilegienlevel (Ring), der für den

Zugriff notwendig ist.• Eine globale Segment Deskriptoren Tabelle (GDT)

beinhaltet alle definierten Segmente.WS 2009/10

Page 16: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

16

Segmentierung und Linux• Die Einführung von Speicher-Segmenten sollte

Programmierer dazu animieren, Programme in einzelne logische Einheiten zu unterteilen.

• Linux verwendet Segmentierung nur sehr eingeschränkt, da– die Speicherverwaltung komplexer wird– die Portierung auf andere Architekturen dadurch erschwert

wird.• Linux nutzt lediglich:

– jeweils ein Segment für Kernel-Code und -Daten – jeweils ein Segment für Prozess-Code und -Daten– vier spezielle Segmente für BIOS und Powermanagement (APM)– ein Task State Segment (TSS) für jede CPU

• In diesem Segment werden alle Prozessorzustände bei einem Context-Switch zwischengespeichert.

WS 2009/10

Page 17: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

17

Paging in Hardware

• x86-Prozessoren können Paging in Hardware lösen– Paging wird aktiviert durch Setzen des PG-Flags im Kontrollregister

(cr0).– Ein weiteres Kontrollregister (cr3) enthält die physikalische Adresse

des Page Directory.

Directory Table OffsetLineare Adresse31 22 21 12 11 0

cr3

Page Directory

Page TablePage

WS 2009/10

Page 18: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

18

Paging in Hardware

• Die Page Directory und Page Table haben die gleiche Struktur:– Present Flag zeigt an, ob sich eine Seite im Hauptspeicher

befindet.– Die oberen (signifikanten) 20-Bits der physikalischen Adresse.– Accessed Flag wird gesetzt, falls auf eine Seite zugegriffen

wurde (wichtig für die Implementierung eines Seitenverdrängungsalgorithmus).

– Dirty Flag wird gesetzt, wenn die Seite verändert wurde.– User/Supervisor Flag gibt an, welche CPU-Privilegien

notwendig sind, um auf die Seite zuzugreifen.

WS 2009/10

Page 19: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

19

Paging in Hardware• Die maximale Größe des physikalischen Speichers ist beschränkt

durch die Anzahl der Adressleitungen, die mit dem Prozessor verbunden sind.

• Bei 32 (Bit) Adressleitungen sind das theoretisch 4 GB.• Mit der Einführung des Pentium Pro Prozessors wurde die Physical

Address Extension (PAE) eingeführt, die 36-Bit physikalische Adressen erlaubt und damit die Nutzung von theoretisch 64 GB RAM.

• Dadurch wird die Umsetzung von 32-Bit linearen Adressen in 36-bit physikalische Adressen komplizierter:– 64 GB werden in 224 Seitenrahmen aufgeteilt.– Die Einträge in den Seitentabellen wachsen von 32-Bit auf 64-Bit, da jetzt

24-Bit der physikalischen Adresse benötigt werden und weiterhin 12-Bits für Flags.

– Eine weitere Seitentabelle (Page Directory Pointer Table (PDPT)) wurde eingeführt. WS 2009/10

Page 20: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

20

Paging in Hardware mit PAE

• Eine 32-Bit lineare Adresse wird dann wie folgt interpretiert:– Cr3 enthält die Adresse des PDPT (Page Directory Pointer

Table).– Bits 31-30 enthalten einen von vier möglichen Einträgen im

PDPT.– Bits 29-21 enthalten einen von 512 möglichen Einträgen im

Page Directory.– Bits 20-12 enthalten einen von 512 möglichen Page Table

Einträgen.– Bits 11 - 0 enthalten das Offset innerhalb einer 4 KB Seite.

WS 2009/10

Page 21: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

21

Paging in Linux

• Der Linux Kernel verwendet allgemein ein auf 64-Bit Plattformen übliches 3-stufiges Paging.

WS 2009/10

Middle Directory Table Offset

cr3

Page MiddleDirectory

Page TablePage

Global Directory

Page GlobalDirectory

Lineare Adresse

Page 22: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

22

Paging in Linux

• Auf 32-Bit Architekturen muss das 3-stufige Paging Modell angepasst werden:– Ist keine PAE Erweiterung vorhanden, so wird die Page Middle

Directory Tabelle nicht genutzt.– Ist die PAE Erweiterung verfügbar, so entspricht die Page Global

Directory Tabelle der x86-Page Directory Pointer Table (PDPT).• Weitere Designkriterien:

– Jedem Prozess werden unterschiedliche physikalische Adressbereiche zugeordnet. Zusätzlicher Schutz gegen Adressierungsfehler.

– Trennung von Seiten (Daten) und Seitenrahmen. So lassen sich Seiten auslagern und in einen anderen Rahmen zurückladen.

WS 2009/10

Page 23: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

23

Bootprozess• Beim Einschalten des Computers ist dieser noch nicht

gebrauchsfertig:– Die Speicherchips enthalten zufällige Daten.– Kein Betriebssystem ist geladen.

• Beim Einschalten wird Spannung an den Reset-Pin der CPU gelegt.– Die CPU wird in den initialen Zustand versetzt.

• Ein spezielles ROM (read only memory) ist mit Programmcode bestückt und an einer speziellen Speicheradresse (physikalische Adresse 0xff ff ff f0) verfügbar.– Das Programm im ROM wird i.d.R. als BIOS (Basic Input/Output System)

bezeichnet und enthält spezielle hardwarenahe Programmroutinen. • Die CPU beginnt mit der Ausführung der Instruktionen ab 0xff ff ff

f0.

WS 2009/10

Page 24: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

24

Bootprozess

• x86 Real-Mode– Beim Start des Computers ist Paging deaktiviert und bietet nur

eingeschränkte Segmentierung.– Real-Mode Adressen haben das Format segment:offset. Beide

Felder sind 16-Bit breit.– Die physikalische Adresse errechnet sich dann:

• segment * 16 + offset, was einem 20-Bit Adressraum entspricht.

• Das BIOS sucht zunächst nach einem gültigen Boot-Medium.– Der erste Sektor des gefundenen Boot-Mediums wird an die

physikalische Adresse 0x00 00 7c 00 geladen.– Die CPU springt zu dieser Adresse und führt die dort liegenden

Instruktionen aus.

WS 2009/10

Page 25: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

25

Bootprozess• Im Bootsektor befindet sich ein Bootloader – Programm.

– Dieses Programm lädt den Betriebssystem-Kern von der Platte in den Speicher (0x00 10 00 00).

– Dann werden Routinen zur Hardwareinitialisierung gestartet.• Zu den ersten Schritten eines Betriebssystemkerns gehört der

Aufbau des Speichermanagements.– Eine initiale Seitentabellenstruktur mit 8 MB Adressraum wird

initialisiert, und zwar so, dass die linearen Adressen• sowohl im Real-Mode • als auch später mit Paging

auf die gleichen physikalischen Adressen übersetzt werden.• Anschließend kann Hardware-Paging aktiviert und die endgültige

Seitentabellenstruktur aufgebaut werden.

WS 2009/10

Page 26: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

26

Bootprozess

• x86 – Protected Mode– Speicherschutz

• Mittels Paging und durch Zugriffskontrolle auf Speicherseiten (user/superviser Flag)

• Read-Only Seiten• Nur Code-Segmente können ausgeführt werden.

– Privilegierte Instruktionen• Spezielle Ein-/Ausgabe Zugriffe (z.B. Hardware-Bus)

• Der Linux-Kernel definiert zwei lineare Adressbereiche:– 0x00 00 00 00 bis 0x bf ff ff ff (Zugriff privilegiert und unprivilegiert).– 0xc0 00 00 00 bis 0x ff ff ff ff (Zugriff ausschließlich privilegiert).

WS 2009/10

Page 27: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

27

Interrupts und Exceptions

• Definition Interrupt– Ereignis, das die von einem Prozessor ausgeführte Befehlsfolge

unterbricht.– Diese Ereignisse entsprechen elektrischen Signalen, die von

Schaltkreisen innerhalb oder außerhalb der CPU erzeugt werden.– Es werden synchrone und asynchrone Interrupts unterschieden.

• Synchrone Interrupts (hier Exceptions genannt):– Werden von der CPU Kontrolleinheit erzeugt.– Entstehen nur nach vollständiger Abarbeitung einer

Maschineninstruktion.• Asynchrone Interrupts:

– Werden durch andere Hardware zu einem beliebigen Zeitpunkt (jedoch Verwendung CPU-Takt) erzeugt.

– Beispiel: Ein Benutzer hat die Maus bewegt.WS 2009/10

Page 28: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

28

IRQs und Interrupts

• Jede Hardware-Kontrolleinheit, die einen Interrupt auslösen kann (Interrupt ReQuest), hat eine Verbindung zu einer Interrupt-Kontrolleinheit.

• Die (programmierbare) Interrupt-Kontrolleinheit (PIC)– Überwacht alle IRQ Verbindungen.– Wird ein Signal an einer IRQ Verbindung festgestellt:

• Erfolgt die Umwandlung des Signals in einen Interrupt-Vektor,• Hält Interrupt-Vektor am I/O-Ausgang für die CPU zum Lesen bereit,• Sendet ein Signal an den INTR-Pin der CPU,• Warte bis CPU Interrupt bestätigt.

– Die Kontrolleinheit ist „programmierbar“: • IRQs können selektiv abgeschaltet werden.

WS 2009/10

Page 29: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

29

Exceptions

• Prozessor-Exceptions– Diese Unterbrechungen werden direkt durch den

Prozessor generiert und können in drei Unterarten untergliedert werden:• Faults können im Allgemeinen behoben werden. Wenn behoben,

kann das Programm i.d.R. ohne Einschränkung weiterlaufen. Die Instruktion die den Fault verursacht hat wird wiederholt.

• Traps erzeugt einen Sprung in den Kernel. Sobald dieser die Kontrolle wieder abgibt, läuft der Prozess ohne Einschränkung mit der nächsten Instruktion weiter.

• Aborts werden bei schweren Fehlern ausgelöst. Das System befindet sich möglicherweise in einem inkonsistenten Zustand, so dass der laufende Prozess abgebrochen werden muss.

WS 2009/10

Page 30: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

30

Exceptions x86 Architektur mit Fehlercode (Signal)

0. Devide Error (fault) [SIGFPE]1. Debugs (trap/fault) [SIGTRAP]2. unbenutzt

[None]3. Breakpoint (trap) [SIGTRAP]4. Overflow (trap) [SIGSEGV]5. Bounds check (fault)

[SIGSEGV]6. Invalid Opcode (fault)

[SIGILL] 7. Device not available (fault) [SIGSEGV]8. Double fault (abort)

[SIGSEGV]9. Coprocessor segment

overrun (abort) [SIGFPE]

10. Invalid TSS (fault) [SIGSEGV]

11. Segment not present (fault) [SIGBUS]

12. Stack exception (fault) [SIGBUS]

13. General protection (fault) [SIGSEGV]

14. Page fault (fault) [SIGSEGV]

15. Intel reserved [None]

16. Floting point error (fault) [SIGFPE]

17. Alignment check (fault) [SIGBUS]

18. Machine check (abort) [None]

19. SIMD floating point (fault) [SIGFPE]

WS 2009/10

Page 31: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

31

Bootprozess Fortsetzung

• Eine Interrupt Descriptor Table (IDT) ordnet jedem Interrupt-Vektor und jeder Exception eine logische Sprungadresse zu einem– Interrupt-Handler: Eine Software-Routine zur Behandlung

einer Unterbrechung.– Exception-Handler: Eine Software-Routine zur Behandlung

einer Ausnahme.• Die IDT kann überall im Speicher abgelegt werden; das

idtr Register beinhaltet dessen Adresse.• Die IDT muss vollständig initialisiert werden, bevor

Interrupts angeschaltet werden.WS 2009/10

Page 32: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

32

Hardware Behandlung von Interrupts und Exceptions• Nach dem Ausführen einer Instruktion enthält das

Instruktionsregister (eip) die Adresse der nächsten auszuführenden Instruktion.

• Vor dessen Ausführung wird überprüft, ob ein Interrupt vorliegt (Signal an INTR-Pin der CPU).

• CPU liest Interrupt-Vektor (i) und liest den i-ten Eintrag der IDT.• Der Segment-Deskriptor der logischen Sprungadresse wird

geladen.• Vergleich des aktuellen Privilegien-Levels mit dem notwendigen

Level des Speichersegments:– Falls notwendig erhöhe Privilegien-Level.

• Sichere aktuellen CPU-Zustand (insbesondere Instruktionspointer).• Beginne mit der Ausführung des Interrupt- / Exception-Handlers.WS 2009/10

Page 33: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

33

Interrupt-Handler

• Bearbeitung eines Interrupts durch das Betriebssystem– Sicherung des aktuellen Prozesskontexts– Bestätige Interruptbehandlung – Ausführung des interruptspezifischen Codes (Interrupthandlers)

WS 2009/10

PICIRQn_interrupt()

do_IRQ(n)

Interrupt serviceroutine 1

Interrupt serviceroutine 2

IDT[32+n]

Software(Interrupt Handler)

Hardware

INT

Device 1 Device 2

IRQn

Page 34: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

34

Interrupt-Handler– Interrupt-Handler sollten so schnell wie möglich bearbeitet

werden.• Z.B. Tastatureingabe sollte möglichst verzögerungsfrei erfolgen.

– Daher Aufteilung der Interruptbehandlung in:• Top-half – Antwort auf Interrupt wird generiert, IRQ-Signal wird

gelöscht. Ziel: möglichst schnelle Abarbeitung des Interrupthandlers.• Bottom-half, soft-irq – Große und aufwändige Routinen werden, soweit

möglich, in den normalen Schedule aufgenommen.

– Beispiel: Netzwerk• Netzwerkkarte löst beim Empfang eines neuen Pakets ein Interrupt aus. • Interrupt-Handler übernimmt Paketdaten und ermöglicht sofort den

weiteren Empfang von Paketen. Markiert ausstehende Paketbehandlung.

• Die Bearbeitung des Pakets (IP -> TCP, UDP, ICMP …) später, da u.U. aufwändig.

WS 2009/10

Page 35: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

35

Bootprozess Fortsetzung

• Zusammenfassung– Start der BIOS-Routinen– Laden des Kernels in den Speicher– Initialisierung der Speicherverwaltung

• Segment-Deskriptoren werden initialisiert.• Kernel Seitentabellen werden angelegt.

– Initialisierung von Interrupt- und Exception-Handler– Interrupts können eingeschaltet werden.

• Was noch fehlt– Start des Prozesses 1: /sbin/init

WS 2009/10

Page 36: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

36

Timer

• Eine besondere Art von Interrups sind Timer.• IBM-compatible PC-Systeme besitzen einen

Programmable Interval Timer (PIT).– Dieser löst periodisch (z.B. alle 10 ms) einen Interrupt aus

(IRQ0).• Die Timer-Interrupt Routine

– Aktualisiert die Systemzeit.– Überprüft auf allen CPUs, ob der aktuell laufende Prozess,

sein Zeit-Quantum aufgebraucht hat. Falls dies der Fall ist, wird der Prozess unterbrochen und der Scheduler aktiviert.

– Überprüft, ob ein schlafender Prozess geweckt werden muss.

WS 2009/10

Page 37: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

37

System-Aufrufe

• System-Aufrufe sind spezielle Anfragen von Benutzer-Prozessen an das Betriebssystem.

• Beispiel:– Anfrage und Freigabe von Speicher (free() und malloc())– Öffnen, Lesen und Schreiben einer Datei (open(), read(), write())

• Für die Bearbeitung des System-Aufrufs muss– der aktuell laufende Prozess unterbrochen werden.– in den Kernel-Kontext gewechselt werden.– die Anfrage ausgeführt und der Prozess fortgesetzt werden.

Software-Interrupt– Analog zu Hardware-Interrupts– Maschinenbefehl int 0x80 löst Interruptroutine 128 aus.

WS 2009/10

Page 38: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

38

Kernel-User Context

• Zusammenfassung: • Ein Wechsel zwischen Kernel- und User-Context kann

durch drei Ereignisse erfolgen:– Hardware-Interrupt / Exception– Timer-Interrupt– Software-Interrupt (System Aufruf)

WS 2009/10

Process 1 Process 1 Process 2 Process 2

System call handler Scheduler Interrupt

handler

System call Timer Interrupt Device Interrupt

USER MODEKERNEL MODE

Page 39: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

39

Evaluation Systeme 1 WS09/2010Zur Veranstaltung Systeme 1 haben 27 Studierende ihre Meinung abgegeben.

Allgemeines:• 15 Studenten/Studentinnen schlagen Herrn Prof. Schneider für den

Lehrpreis vor, da seine Vorlesung sehr interessant und witzig ist. Er vermittelt den Lehrstoff sehr verständlich und lässt viele praktische Beispiele einfließen. Die Weihnachtvorlesung kam bei den Studenten/Studentinnen sehr gut an.

• 24 Studenten/Studentinnen sind deutsch, ein Student stammt aus Luxemburg.

• Alle Studenten besuchen das 1. Semester mit der Studienrichtung „Informatik als Bachelor of Science“.

WS 2009/10

Page 40: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

40

Evaluation Systeme 1 WS09/2010Fragen zur Veranstaltung:

1. Alle Studenten/Studentinnen sprechen die Sprache deutsch.2. In der Lehrveranstaltung fühlen sich die Studierenden weder über-

noch unterfordert.3. Auch die Stoffmenge wird überwiegend als nicht zu groß, aber auch

nicht als zu klein beurteilt.

WS 2009/10

Investierte Wochenstunden (inkl. Vorlesung, Übung etc.)

Begleitmaterial (Folien, Aufzeichnungen)

Strukturierung des vermittelten Lehrstoffs

Leistung Prof. Schneider (Vorbereitung, Motivation, Vortragsstil etc.)

6 15 6

14 12

17

24

10

3sehr gut gut sehr hilfreich hilfreich 9-12 und mehr Stunden 5-8 Stunden

1-4 Stunden

Page 41: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

41

Evaluation Systeme 1 WS09/2010Fragen zur Veranstaltung:4. Was gefällt den Studenten/Studentinnen besonders gut an der Vorlesung?

– Die Vorlesung ist sehr praxisnah und eine gute Ergänzung zur praktischen und theoretischen Übung.

– Die Folien sind verständlich und sehr ausführlich. Außerdem wird gelobt, dass die Folien auch online stehen.

– Prof. Schneider vermittelt den Lehrstoff verständlich, interessant, strukturiert und sehr ausführlich und bringt sehr viele Beispiele.

5. Kritikpunkte seitens der Studierenden: – „Langweilige“ Themen werden zum Teil zu ausführlich behandelt. – Eine Beschränkung auf das Wesentliche wäre ab und zu hilfreich. – Einem Studenten/einer Studentin war die Bearbeitungszeit der

Zwischenklausur zu kurz, drei Studenten/Studentinnen fanden die Korrekturdauer der Zwischenklausur zu lang.

– Zwei Studenten bedauern es, dass es nur eine Vorlesung in der Woche gibt. WS 2009/10

Page 42: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

42

Evaluation Systeme 1 WS09/2010Fragen zur Veranstaltung:6. Anregungen bzw. Verbesserungsvorschläge der Studierenden:

– Mehr Zeit in der Klausur oder weniger Aufgaben,– Umfangreicheres Themengebiet, – Die Verzahnung zwischen Vorlesung und Praktischer Übung ist grundsätzlich gut,

könnte aber noch deutlicher hervorgehoben werden,– In der praktischen Übung wären andere Themen wünschenswert.

Fragen zu den Übungen:• Die Übungsaufgaben werden von den Studenten/Studentinnen überwiegend (17)

weder als zu schwierig noch als zu leicht eingestuft. 7 Studenten empfinden die Übungsaufgaben als schwierig, drei empfinden die Übungsaufgaben als leicht.

• Außerdem werden die Übungen von der Hälfte der Studenten/Studentinnen als sinnvolle Ergänzung zur Vorlesung angesehen. 4 Studenten/Studentinnen halten die Übungen sogar für sehr sinnvoll, 6 Studenten stehen den Übungen neutral gegenüber und 4 Studenten/Studentinnen halten die Übungen als Ergänzung zur Vorlesung als nicht so sinnvoll.WS 2009/10

Page 43: Systeme 1 Kapitel 9.1 Betriebssysteme auf aktueller Hardware Kapitel 9.2 Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme WS 2009/101

43

Evaluation Systeme 1 WS09/2010Fragen zu den Übungen:• Die Erklärungen der Tutoren werden von einem Drittel der Studierenden als

verständlich, von einem Drittel als gut verständlich und von einem weiteren Drittel als sehr gut verständlich bewertet.

• Die Größe der Übungsgruppen wird beinahe einstimmig als optimal angesehen.

• Die praktische Übung an sich sollte nach Meinung von zwei Studierenden ohne Anwesenheitspflicht durchgeführt werden. Nach Meinung eines Studenten sogar ganz abgeschafft werden.

• Ein Student/eine Studentin findet die praktische Übung gut, aber leider das Themengebiet langweilig, da er/ sie sich schon sehr gut auskennt.

• Ein Studierender findet Linux Befehle für Systeme eher irrelevant, dies sollte theoretisch vermittelt werden.

• Ein Student/eine Studentin findet es schade, dass die praktische Übung nicht so viel mit der Vorlesung zu tun hat.

WS 2009/10