wie schreibt man ein betriebssystem? · 2011-04-25 · privilege levels ring 3 ring 2 ring 1 ring 0...
TRANSCRIPT
![Page 1: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/1.jpg)
Wie schreibt man ein Betriebssystem?
Vom BIOS in den Userspace
Andreas GalaunerEasterhegg 2011
Sunday, April 24, 2011
![Page 2: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/2.jpg)
Democode
• Es gibt Democode:
• http://github.com/G33KatWork/SigInt10OSWorkshop
• git clone git://github.com/G33KatWork/SigInt10OSWorkshop.git
• Am besten direkt clonen und make eingeben, Toolchain (binutils, gcc, nasm, qemu) wird gebaut
• „make V=1“ macht verbose output, falls es Probleme gibt
• Happy Hacking!
Sunday, April 24, 2011
![Page 3: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/3.jpg)
• Was ist ein Betriebssystem
• Architekturen
• Allgemeine x86 Einführung
• 32 Bit Modus
• Virtueller Speicher
• Interrupts und Exceptions
• 64 Bit Modus
• Multitasking
Sunday, April 24, 2011
![Page 4: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/4.jpg)
Betriebssysteme
Sunday, April 24, 2011
![Page 5: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/5.jpg)
Was ist ein Betriebssystem?
• Etwas geekiger:
• Abstraktion der Hardware
• Schaffung einheitlicher Schnittstellen
• Gerechte Verteilung zur Verfügung stehender Resourcen unter den „Anwärtern“
Sunday, April 24, 2011
![Page 6: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/6.jpg)
Woraus besteht ein Betriebssystem?
• Kernel, evtl. mit abgespaltenem HAL
• Userspace Libraries
• Userspace Services
• Userspace Applikationen
Sunday, April 24, 2011
![Page 7: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/7.jpg)
Betriebssystemarchitekturen
Sunday, April 24, 2011
![Page 8: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/8.jpg)
Monolithischer KernelHardware
Kernel
Userspace Libraries
Syscalls
Userspace Programm
I/O Space oder Memory Mapped I/O
Ker
nel-
Mod
e
Werden eingeblendet in Adressräume
Use
r-M
ode
Userspace Programm Userspace Programm
Dateisystem Scheduling Memory Management IPC Netzwerk
Sunday, April 24, 2011
![Page 9: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/9.jpg)
MicrokernelHardware
Kernel
Userspace Libraries
Syscalls
Userspace Programm
I/O Space oder Memory Mapped I/O
Ker
nel-
Mod
eU
ser-
Mod
e
Userspace Programm Userspace Programm
Prozess Management
Scheduling Basis-IPC
Netzwerk Dateisystem
ATA Treiber Ethernet Treiber VGA Treiber
IPC
Sunday, April 24, 2011
![Page 10: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/10.jpg)
HybridkernelHardware
Kernel
Userspace Libraries
Syscalls
Userspace Programm
I/O Space oder Memory Mapped I/O
Ker
nel-
Mod
eU
ser-
Mod
e
Userspace Programm Userspace Programm
Scheduling IPC
Netzwerk
IPC
Memory ManagementDateisystem
GrafiktreiberGUI
Sunday, April 24, 2011
![Page 11: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/11.jpg)
Privilege Levels
Ring 3
Ring 2
Ring 1
Ring 0
• Einführung mehrerer Ebenen in Hardware
• Je niedriger die Ebene, umso mehr Rechte hat sie
• IA-32 hat 4 Ringe
• Instruktionen werden abhängig vom Ring, in demein Prozess läuft, ausgeführt oder blockiert
• Kernel darf alles
• Ring 0 ist Kernel, Ring 3 Userspace
• Userspace ist stark limitiert: Keindirekter Hardwarezugriff, etc.
• Betriebssysteme nutzen meist nur Ring 0 und 3aus Gründen der Kompatiblität zu anderenArchitekturen
Sunday, April 24, 2011
![Page 12: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/12.jpg)
Syscalls• Wechsel von höheren Ringen in tiefere nicht ohne weiteres
möglich, ist Sinn der Sache
• Ist aber nötig, um Kernelcode vom Usermode aus aufzurufen
• Wird über Syscalls geregelt
• Verschiedene Möglichkeiten: Trap, Software Interrupt, Sysenter/Sysexit
• Beispiel: open, mmap, fork, Berkley-Sockets
• Rootkits würden sich in die Syscalls klemmen und Ergebnisse „passend“ modifizieren
Sunday, April 24, 2011
![Page 13: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/13.jpg)
Allgemeine x86 Einführung
Sunday, April 24, 2011
![Page 14: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/14.jpg)
Intel x86 Geschichte• Mikroprozessor-Architektur
• Entworfen von Intel
• Erstmals im 8088/8086 im Jahre 1978 genutzt
• 8086 war 16 Bit
• Nachfolgemodelle: 80186, 80286, 80386 etc.
• 32 Bit ab 80386
• Virtueller Speicher mit MMU ab 80486
• AMD entwickelte x86_64 (EM64T bei Intel)
Sunday, April 24, 2011
![Page 15: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/15.jpg)
Bootvorgang• Ab 80386 startet Prozessor bei 0xFFFFFFF0 (reset vector)
• BIOS liegt aber in unteren 64KB (ca.)
• Lösung: Nach Reset wird BIOS vom Chipsatz meistens in die obersten paar MB gemappt
• Wenn BIOS läuft, wird Black-Initialisierungs-Voodoo ausgeführt (näheres dazu unter coreboot.org)
• Danach werden, je nach Bootdevice, 512 Byte nach 0x0:07C0 kopiert und hingesprungen, falls Bootsignatur in letzten zwei Byte stimmt (0x55AA oder 0xAA55 - Big Endinan oder Little Endian)
• CPU befindet sich hier im Real Mode (8086, 16 Bit)
Sunday, April 24, 2011
![Page 16: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/16.jpg)
Segmentierung
• 8086 hatte 20 Adressleitungen (A0 - A19)
• Physikalisch adressierbar waren somit 1MB RAM
• Register sind aber alle nur 16 Bit breit, womit 4 Bit im Adressbus brach lägen
• Segmentierung löst das Problem
Sunday, April 24, 2011
![Page 17: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/17.jpg)
Segmentierung
• Speicher wird in 16-Byte große Segmente (16 Byte = 64KB adressierbar) aufgeteilt
• Segmente können sich überlappen
• In 16 Bit Registern (CS, DS, ES, SS) kann für verschiedene Zwecke ein Segmentanfang ausgewählt werden
• Physikalische Adresse resultiert aus:
• Segmentregister * 16 + Offset
Sunday, April 24, 2011
![Page 18: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/18.jpg)
Real Mode
• Ist der „alte“ 16 Bit Modus eines 8086
• Intel ist voll binär Abwärtskompatibel
• Bootloader starten hier
• BIOS bietet Systemfuntkionen über Interrupts an (Floppy steuern, Text ausgeben...)
• DOS erweiterte diese Routinen früher und hookte einige der BIOS-Funktionen
Sunday, April 24, 2011
![Page 19: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/19.jpg)
32 Bit Modus
Sunday, April 24, 2011
![Page 20: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/20.jpg)
Protected Mode
• Mit 80286 kam ein 24 Bit Adressbus (16MB) und der Protected Mode
• Alle Register blieben 16 Bit breit
• Der Protected Mode bietet Speicherschutz durch manuelles erstellen der Speichersegmente (GDT - Global Descriptor Table und LDT - Local Descriptor Table)
• Insgesamt gab es 1GB virtuellen Speicher
Sunday, April 24, 2011
![Page 21: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/21.jpg)
A20 Gate• Es gab DOS-Programme, die sich darauf verließen, dass es
nur 20 Bit breite physikalische Adressen gab
• Sie nutzten also explizit den Überlauf der Register, um $stuff im Speicher zu adressieren
• Der 286er konnte aber mehr als 1MB Speicher adressieren und sollte abwörtskompatibel sein
• IBM schuf die „Möglichkeit“ die 20. Adressleitung fest auf GND zu legen
• Somit war der Überlauf wieder da, es gab allerdings auch nur 1MB adressierbaren Speicher
Sunday, April 24, 2011
![Page 22: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/22.jpg)
A20 Gate
• Existiert heute immernoch
• Bereitet einem viel Freude
• Wurde früher vom Keyboard Controller (SRSLY!) gesteuert
• Heute über Chipsatz
• Es gibt gefühlte 3 mio. Arten das Ding zu aktivieren
Sunday, April 24, 2011
![Page 23: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/23.jpg)
Umschalten in 32 Bit Protected Mode
• Nachdem wir jetzt mehr als 1MB Ram nutzen können, wollen wir 32 Bit
• Segmentierung ist fies, 16 Bit sowieso
• Blos weg da
• Mit 80386 kam der 32 Bit Protected Mode
• Wie Protected Mode aus 80286, nur volle 32 Bit - und zwar überall. IA-32 Architektur
Sunday, April 24, 2011
![Page 24: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/24.jpg)
Umschalten in 32 Bit Protected Mode
• Was müssen wir dafür tun?
• Segmentierung konfigurieren
• Möglichst so, das wir ein flaches, 4GB großes Segment haben, da wir dieses später eh wieder über Paging unterteilen
• Mittels GDT
• Danach im CR0 Register das 0. Bit setzen
• Mit einem Far-Jump in neues, über GDT beschriebenes, Speichersegment springen
• Nun stehen uns keinerlei Hilfen vom BIOS mehr zur Verfügung
Sunday, April 24, 2011
![Page 25: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/25.jpg)
Virtueller Speicher
Sunday, April 24, 2011
![Page 26: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/26.jpg)
Virtueller Speicher• Einer der Grundpfeiler zur Abschottung einzelner Prozesse
• Jeder Prozess erhält einen eigenen Adressraum
• Der Adressraum kann dann via Paging realer Speicher zugewiesen werden
• Virtueller Speicher ermöglicht setzen einiger Kontrollbits (Privilege Level, NX-Bit, Read/Write etc.)
• Bei Missachtung dieser Kontrollbits, wird eine Exception geworfen: Page Fault
• Adressumsetzung passiert transparent in der CPU durch die Memory Management Unit (MMU)
• Auch andere Inhalte im Speicher möglich, wie z.B. Dateien
• Optimierung des Speicherverbrauchs durch gleichzeitiges Mappen einzelner Frames in mehrere Adressräumen und evtl. Copy-On-Write
• Swapping
Sunday, April 24, 2011
![Page 27: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/27.jpg)
Paging
Physikalischer Speicher
Prozess 1
Prozess 2
Fram
es
Page
sPa
ges
Sunday, April 24, 2011
![Page 28: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/28.jpg)
Paging• Wir unterteilen den physikalischen und virtuellen Speicher
in gleich große Teile
• Physikalische Teile nennen wir „Frames“
• Virtuelle Teile werden die „Pages“
• Jeder Teil ist bei x86 (IA-32) 4KB oder 4MB groß
• Bei 4KB haben wir also 4GB / 4KB = 1048576 Pages, die wir nun mit Frames befüllen können
• Ein Page Directory (Mapping von Pages zu Frames) ist also (bei 4B langen Pointern) 1048576 * 4B = 4MB groß → zu groß!
Sunday, April 24, 2011
![Page 29: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/29.jpg)
Paging
• Lösung für unser Größenproblem: 2-stufiges Paging
• Obere 10 Bit der virtuellen Adresse ergeben Index im Page Directory, der auf eine Page Table zeigt
• Folgende 10 Bit ergeben den Index der Page in der Page Table
• Letzte 12 Bit sind dann Offset im Frame selbst
Sunday, April 24, 2011
![Page 30: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/30.jpg)
PagingVirtuelle Adresse!
Directory-Index! Page-Index! Offset!
0!
1023!
0!
1023!
Physikalische Adresse!
Page Directory!
Page Table!
Basisadresse! Offset!
Phys. Adresse Page Table!
Phys. Adresse des Frames!
Fram
e-A
dres
se!
Adr
esse
n de
r Pa
geta
bles!
Pro Tabelle 1024 Einträge1 Eintrag = 32 Bit
Macht 4KB pro Tabelle
01112212231 0111231
Sunday, April 24, 2011
![Page 31: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/31.jpg)
Paging• Aktivierung?
• Page Directory und Page Tables von Hand zusammenbasteln
• Page Directory Adresse in CR3 schreiben
• Bit 31 in CR0 setzen
• Vorsicht: Vom Linker erstelle Adressen stimmen unter Umständen nicht mehr
• Code muss entweder relokiert werden
• Oder kleineres Programm vorher initialisiert Paging und springt dann in den eigentlich und korrekt auf die neue Basisadresse gelinkten Kernelcode
Sunday, April 24, 2011
![Page 32: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/32.jpg)
Interrupts und Exceptions
Sunday, April 24, 2011
![Page 33: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/33.jpg)
Interrupts• x86 kann auch Interrupts
• Prozessor hat 256 verschiedene Interrupts
• Unterste 32 sind als Exceptions reserviert
• Prozessor hat (oder hatte... virtualisierter Bus usw.) eine physikalische Interruptleitung
• An Prozessor hingen 2 PICs (Programmable Interrupt Controller), die Interrupts angenommen haben und an der Prozessorleitung gezogen haben
• Im Anschluss konnte man die PICs fragen, was los war
Sunday, April 24, 2011
![Page 34: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/34.jpg)
PIC
PIC 1 (Master)
+--------------+ PIC 2 (Slave)| IRQ 0 + <--- Timer +-------------+| IRQ 1 + <--- Tastatur | IRQ 8 + <--- Echtzeituhr| IRQ 2 +------------------+ | IRQ 9 + <--- ...| IRQ 3 + <--- Seriell | | IRQ 10 + <--- ...| IRQ 4 + <--- Seriell | | IRQ 11 + <--- ...| IRQ 5 + <--- Soundkarte | | IRQ 12 + <--- PS/2 Maus| IRQ 6 + <--- Floppy | | IRQ 13 + <--- Koprozessor| IRQ 7 + <--- Parallel | | IRQ 14 + <--- Festplatte+------+-------+ Port | | IRQ 15 + <--- Festplatte | | +-----+-------+ | | | | +--------------+ | +--->>> Zur CPU
Sunday, April 24, 2011
![Page 35: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/35.jpg)
Interrupts handlen
• Um Interrupts zu behandeln müsen wir folgendes tun:
• IDT (Interrupt Descriptor Table) erstellen
• IDT laden
• Interrupts aktivieren
• Für Hardware-Interrupts MUSS der (A)PIC konfiguriert werden
Sunday, April 24, 2011
![Page 36: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/36.jpg)
64 Bit Modus
Sunday, April 24, 2011
![Page 37: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/37.jpg)
Long Mode
• Long Mode ist der 64 Bit Modus
• Aktivierung:
• In Protected Mode wechseln, Paging aus
• Paging-Tabellen basteln
• PAE in CR4 aktivieren (max. 64GB physikalischen RAM)
• Longmode in MSR (Model Specific Register) aktivieren
• Paging und Longmode in CR0 aktivieren
• 64 Bit GDT laden
Sunday, April 24, 2011
![Page 38: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/38.jpg)
Multitasking
Sunday, April 24, 2011
![Page 39: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/39.jpg)
Multitasking
• Jeder Task bekommt einige ms CPU-Zeit, danach wird gewechselt
• Umschalten läuft völlig transparent ab
• Kompletter State eines Tasks muss gesichert und neuer geladen werden
• Unterbrechungen finden durch Timer Interrupt statt
Sunday, April 24, 2011
![Page 40: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/40.jpg)
Scheduling• Unterteilung der Zeit in Zeitschlitze
• Zuweisung einzelner Zeitschlitze an Prozesse = CPU-Zeit
• Zeitschlitz wird periodisch durch Timer Interrupt unterbrochen
• Auswahl des nächsten Prozesses kann anhand von Prioritäten, Wartezuständen etc. geschehen
• Scheduler übernimmt, je nach Verfahren, auch die unterste Schicht des IPC (z.B. Signal Handling unter UNIX)
Prozess 1 Prozess 2
Sche
dule
r
Sche
dule
r
Prozess 1 Prozess 2
Sche
dule
r
Sche
dule
r
Prozess 1
Timeslice
Sunday, April 24, 2011
![Page 41: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/41.jpg)
Task State• x86 kann Hardware Task Switching
• Wir machen es in Software
• Gründe:
• Kaum Geschwindigkeitsnachteile
• Portabler
• Zum State gehört:
• Register
• Stack
• evtl. Page Directory
Sunday, April 24, 2011
![Page 42: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/42.jpg)
State sichern• Die CPU führt fröhlich Instruktionen aus und es passiert
ein Interrupt
• Beim Interrupt werden verschiedene Sachen auf den Stack geschoben, um nachher wieder zurückkehren zu können
• Die ist ein Teil unserer zu sichernden States
• Zur Sicherheit schieben wir am Anfang des Interrupts den Rest auch noch direkt auf den Stack
• Nun brauchen wir uns den Kram nur noch vom Stack holen und in eine struct schreiben und der State ist gesichert
Sunday, April 24, 2011
![Page 43: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/43.jpg)
Neuen Task wählen
• Die Wahl des neuen Tasks kann beliebig kompliziert werden
• Auswahlkriterien können Zustand sein (wartend/schlafend, ausführend), Priorität, etc.
• Wir machen hier Round-Robin, also einfach immer den nächsten wählen ohne viele Extras
Sunday, April 24, 2011
![Page 44: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/44.jpg)
State wiederherstellen
• Um den State eines Tasks wieder herzustellen, müssen wir die Register einzeln setzen, alle erwarteten Interrupt-Rücksprungargumente auf den Stack pushen
• Und ireten
• Neuer Task sollte laufen
Sunday, April 24, 2011
![Page 45: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/45.jpg)
Kurze GeexOS Demo
Sunday, April 24, 2011
![Page 46: Wie schreibt man ein Betriebssystem? · 2011-04-25 · Privilege Levels Ring 3 Ring 2 Ring 1 Ring 0 • Einführung mehrerer Ebenen in Hardware • Je niedriger die Ebene, umso mehr](https://reader031.vdocuments.site/reader031/viewer/2022042007/5e70a3313b2b972d4c689d98/html5/thumbnails/46.jpg)
Fragen?Antworten!
Sunday, April 24, 2011