UNIX Mechanismen

Werbung
UNIX Mechanismen
Übung aus Systemprogrammierung &
Systemnahe Programmierung
Armin Wasicek
SS 2010
Inhalt
Kernel Struktur
Prozessverwaltung
Interprozesskommunikation
Speicherverwaltung
12/13/2010
UNIX Mechanismen
2
UNIX Kernel Structure
System call interface
Memory
management
component
Signal handling
Virtual memory
Process/Thread
creation/termination
Paging page
replacement
CPU Scheduling
Page cache
IO and networking component
Virtual file system
Terminals
line
discipline
Process
management
component
Character
devices
drivers
Interrupts
12/13/2010
File systems
Generic
block layer
Sockets
Network
stacks
IO scheduler
Block device
drivers
Network
device
drivers
Dispatcher
UNIX Mechanismen
3
Prozessverwaltung
Erstellt, terminiert und verwaltet Prozesse
Verbindet Prozesse untereinander (pipes, signals, IPC)
Verbindet Prozesse mit der Außenwelt (I/O)
Kontrolliert den Zugriff auf den Prozessor
12/13/2010
UNIX Mechanismen
4
Speicherverwaltung
Hauptspeicher ist eine wesentliche Ressource
Kernel bildet einen virtuellen Adressraum für jeden Prozess
Prozesse können Speicher anfordern oder zurückgeben
Wird dabei von der memory management unit (MMU)
unterstützt
12/13/2010
UNIX Mechanismen
5
IO und Networking
Virtual file system: abstrahiert über die Peripherie
„Everything is a file“
Der Kernel bildet unstrukturierte Hardware auf ein strukturiertes Dateisystem ab
Neue Dateisysteme, Treiber und Geräte werden einfach in das virtuelle Dateisystem eingehängt.
Dadurch werden Operationen read/write definiert
12/13/2010
UNIX Mechanismen
6
Inhalt
Kernel Struktur
Prozessverwaltung
Interprozesskommunikation
Speicherverwaltung
12/13/2010
UNIX Mechanismen
7
Prozessverwaltung
Erstellung eines Ablaufplanes der Prozessen zeitlich begrenzt Ressourcen zuweist.
Lernziele:
 Prozesserzeugung
 Prozessverwaltung
 Scheduling in Linux
12/13/2010
UNIX Mechanismen
8
Erschaffung neuer Prozesse
Erstellen eines neuen “leeren” Prozesses:
 Prozess startet ohne zugeordnete Ressourcen
 Existierender Prozess beliefert neuen Prozess mit Daten und Anweisungen via Speicherseiten
Kopieren eines bestehenden Prozesses
 erstellt eine Kopie von sich und seinem aktuellen Zustand
 Kopie arbeitet unabhängig vom Original, teilt ev. Ressourcen
Ersetzen eines vorhandenen Prozesses
 setzt einen vorhandenen Prozess auf einen neuen Zustand
12/13/2010
UNIX Mechanismen
9
Prozesserzeugung
Der Systemcall fork
erstellt einen neuen
Prozess:
1.
2.
3.
4.
5.
6.
pid_t pid=fork();
if(pid<0) {
handle_error();
} else if(pid>0) {
/* program code for parent */
} else {
/* program code for child */
}
Ein neuer Eintrag (task_struct) wird in die Taskliste eingefügt
Duplizieren der task_struct‐Struktur des Elterprozesses (Außer: PID)
Erzeugen einer Referenz auf die Ressourcen des Elternprozesses
Ein identes Speicherabbild des aufrufenden Prozesse wird erstellt
Anlegen von Wait Queue (wait_chldexit)
Scheduling des Kindprozesses
12/13/2010
UNIX Mechanismen
10
Prozesshierachien (pstree)
init─┬─acpid
├─ahc_dv_0
├─ahc_dv_1
├─bash
├─clock-applet
├─crond
├─cups-config-dae
├─cupsd
├─2*[dbus-daemon-1]
├─dbus-launch
├─dhcpd
├─gdm-binary─┬─gdm-binary─┬─X
│
│
└─gdmgreeter
│
└─gdm-binary───gnome-session───ssh-agent
├─2*[sendmail]
├─sesam_server─┬─sesam_server
│
└─sesam_server───9*[sesam_server]
├─smbd───5*[smbd]
├─sshd─┬─sshd───sshd───bash───pine-secure.sh───pine
│
├─sshd───sshd───bash───pine
│
├─3*[sshd───sshd───bash]
│
└─sshd───sshd───bash───xterm───bash───pstree
12/13/2010
UNIX Mechanismen
11
Datenstrukturen zur Prozessverwaltung
Prozesstabelle in Linux besteht aus Einträgen der task_struct Struktur
Tabelle hat einen Eintrag
pro laufendem Prozess
Immer resident
Verkettet Prozesse in
 Queues (z.B. run queue)
 Eltern‐Kind Hierachien
12/13/2010
struct task_struct { volatile long state; /* ‐1 unrunnable,
. . .
0 runnable, >0 stopped */
struct list_head run_list;
struct task_struct *next_task, *prev_task; . . . /* task state */ int exit_code, exit_signal; pid_t pid; . . .
/* pointers to (original) parent process, etc.*/ struct task_struct *p_opptr, *p_pptr, . . .
*p_cptr, *p_ysptr, *p_osptr; /* open file information */ struct files_struct *files; . . .
/* signal handlers */ struct signal_struct *sig; } UNIX Mechanismen
12
Elemente der task_struct Struktur (1)
Scheduling Priorität, CPU‐Zeit, …
Identifikation
PID, Owner, Gruppe, …
Speicherverwaltung
Pointer auf MMU Info
Synchronisation
Wait Queue
Signale
Mask, Pending
Berechtigungen
12/13/2010
UNIX Mechanismen
13
Elemente der task_struct Struktur (2)
Accounting Information Quotas, …
Timerverwaltung
Process Control Block  Register, PC, Statuswort, Segmentregister, Page Table Info
Deskriptorentabelle
Kernelstack
System‐Calls, Traps
12/13/2010
UNIX Mechanismen
14
Scheduling: terms
Processes can be either:
I/O-bound: heavy use of I/O
devices and spend much
time waiting for I/O
operations to complete
CPU-bound: computationintensive applications that
require a lot of CPU time
Real-time processes are
explicitly by the scheduler
12/13/2010
Quantum: time slice
Kernel 2.6.13: 250 Hz = 4 ms
UNIX Scheduling policy:
•
•
•
•
•
fast process response time,
good throughput for background jobs,
avoidance of process starvation,
reconciliation of the needs of low- and
high-priority processes,
etc.
Linux (like all Unix kernels)
implicitly favors I/O-bound
processes over CPU-bound ones.
UNIX Mechanismen
15
Scheduling in Linux prä‐2.6
Nachteile Linux Prä‐2.6 Scheduler:
O(n) Aufwand, dh. die Rechenzeit des Schedulers
war abhängig von der Anzahl der Tasks, dh. skaliert nicht
Einzelnes runqueue lock sperrt bei Zugriff alle
Prozessoren in einem SMP System
Keine Task‐Preemption, dh. niedrigpriore Tasks können höherpriore Tasks verzögern
12/13/2010
UNIX Mechanismen
16
Linux O(1) Scheduler
Scheduler: Wählt den höchstprioren Task
Migration Thread
In einer Bitmap (5x32bit) wird eine Prioritätsstufe markiert, wenn Tasks vorhanden sind
priorities
priorities
1
1
task a
task b
100
task c
100
101
task d
101
task e
task f
140
140
Die Zeit um einen Task auszuwählen hängt somit von der Anzahl der Prioritätsstufen (=140) und nicht mehr von der Anzahl der Tasks ab.
PRIO = MAX_RT_PRIO + NICE + 20
CPU‐bound Tasks erhalten Penalty [+5 ],
I/O‐bound Tasks erhalten Bonus [‐5 ]
http://joshaas.net/linux/linux_cpu_scheduler.pdf
12/13/2010
UNIX Mechanismen
17
Linux Scheduler Comparison
12/13/2010
UNIX Mechanismen
18
Kontextwechsel
Zwischen Prozessen
 Freiwillig durch sleep_on(), System‐Call
 Unfreiwillig durch Ende der Zeitscheibe (Kernel ruft
schedule auf), Scheduler wählt nächsten Prozess aus
Durch Interrupts
 Kontextwechsel durch Hardware und Interrupthandler
(asynchron)
“Austausch” der task_struct‐Struktur
12/13/2010
UNIX Mechanismen
19
Kontextsicherung
Sicherung der Zustandsinformation des alten Prozesses
in der task_struct‐Struktur
 User‐Mode Kontext
 auf Kernel Stack bei Eintritt in Kernel‐Mode
 Kernel‐Mode Kontext
 in PCB der task_struct‐Struktur – bei freiwilliger Abgabe
des Prozessors durch den Prozess mit sleep_on()
12/13/2010
UNIX Mechanismen
20
Zusammenfassung ‐ Prozessverwaltung
Prozess ist ein laufendes Programm
Prozesserzeugung (bspw. fork)
Prozesstabelle task_struct
Scheduling in Linux
Kontextwechsel freiwillig/erzwungen
Freigabe der Ressourcen bei Terminierung
Prozessstatus muss abgeholt werden
12/13/2010
UNIX Mechanismen
21
Inhalt
Kernel Struktur
Prozessverwaltung
Interprozesskommunikation
Speicherverwaltung
12/13/2010
UNIX Mechanismen
22
Interprozesskommunikation (IPC)
Wozu?
Synchronisation
Datenaustausch
von Prozessen, entweder
verwandt (fork),
auf gleichem Rechner/Prozessor, oder
auf verschiedenen Rechnern/Prozessoren.
12/13/2010
UNIX Mechanismen
23
IPC Mechanismen
Signale
Sockets
Semaphore
Shared Memory
Message Queues
12/13/2010
UNIX Mechanismen
24
Signale
Behandlung von Ausnahmezuständen
Aktionen beim Eintreffen
 Ignorieren
 Terminieren des Prozesses
 Erzeugen eines Speicherabbildes
 Anhalten des Prozesses
 Ausführen einer Behandlungsroutine
12/13/2010
UNIX Mechanismen
25
Implementierung von Signalen
in task_struct Struktur
 Bitfelder signal und blocked
 Array von Zeigern auf benutzerdefinierte Signalbehandlungsroutinen
Senden eines Signals
 send_sig und generate
“Ausführung” bei Prozessscheduling
 Check für eingetroffene und nicht ignorierte Signale
 Festlegen der auszuführenden Aktion (Terminierung, Signalbehandlungsroutine)
12/13/2010
UNIX Mechanismen
26
Sockets
Endpunkte einer Kommunikation
Netzwerkfähig
Transparent
Kompatibilität zu UNIX I/O (read, write)
Parameter
 Domain (UNIX, Internet)
 Typ (Stream, Datagram, Raw)
 Protokoll (TCP/IP, UDP/IP)
12/13/2010
UNIX Mechanismen
27
System V IPC
Semaphore
 binäre, counting Semaphore
 Semaphorfelder
Shared Memory
 Mapping in Adressbereich der Prozesse
Message Queues
 Prioritäten
 Eventnachrichten
12/13/2010
UNIX Mechanismen
28
Zusammenfassung ‐ Interprozesskommunikation
Signale Sockets Semaphores Shared
Memory
Message
Queues
Rechner





Netzwerk





Synchronisation





Datenaustausch





12/13/2010
UNIX Mechanismen
29
Inhalt
Kernel Struktur
Prozessverwaltung
Interprozesskommunikation
Speicherverwaltung
12/13/2010
UNIX Mechanismen
30
Speicherverwaltung
Effektive Aufteilung und Verwaltung des Hauptspeichers für OS und Programme.
Lernziele:
 Virtueller Speicher & MMU
 Swapping & Paging
 Heap & Stack
12/13/2010
UNIX Mechanismen
31
Speicherverwaltung
0x00
RAM
Ausreichend Speicher
Image1
Image2
CPU
Image3
0x0F
Alle drei Prozessabbilder passen in den vorhandenen physikalischen Speicher
Keine Speicherverwaltung nötig (ausser für Speicherschutz)
12/13/2010
UNIX Mechanismen
32
Speicherverwaltung
0x00
RAM
Speicher zu klein
Image1
Image2
CPU
0x0F
Image3
0xA0
Festspeicher
Mehr Speicher benötigt als vorhanden
Zusätzlich Festspeicher (Harddisk)
Genug Speicher, inkohärente Adressen
Image3
0xFF
12/13/2010
UNIX Mechanismen
33
Speicherverwaltung
0x00
0x00
RAM
Virtueller Speicher
CPU
load/store
load/store
MMU
Virtueller Speicher Abstraktion:
 verschiedene Speichertypen
 kohärenten Addressraum
Image2
0x0F
Festspeicher
Image3
Memory Management Unit (MMU)
übersetzt virtuelle in physische Adressen
12/13/2010
Virtual memory
Image1
UNIX Mechanismen
0xFF
0xFF
34
Zusammenfassung: Virtueller Speicher
Homogener virtueller Speicher für verschiedene Speichertypen
Anforderungen an virtuellen Speicher
Größer als physikalischer Speicher
Mehr Prozesse gleichzeitig aktiv als Hauptspeicher erlaubt
o Zugriffschutz auf Prozessspeicherbereich
 Zugriff nicht langsamer als Hauptspeicher
Transparente Erweiterung (unsichtbar für Nutzer)
12/13/2010
UNIX Mechanismen
35
Swapping
0x00
0x00
RAM
load/store
CPU
MMU
Swapping
Auslagerung von ganzen Prozessen
+ Einfach zu implementieren
Virtual memory
Image1
Image2
Image3
0x0F
Festspeicher
Image2
- Zeitaufwändig
- Nicht alle Anforderungen an virtuellen
0xFF
Speicher
erfüllt
12/13/2010
UNIX Mechanismen
Image3
0xFF
36
Paging
load/store
MMU
Paging
 Speicher in gleich große Seitenrahmen unterteilt,
 Seiten werden vom Swap Space in den Speicher
eingelesen und zurückgeschrieben
0x00RAM
2
p1, img1
4
p4, img2
5
p6, img3
0x0F
6
7
9
- Spezialhardware MMU
0xFF
UNIX Mechanismen
p3, img2
p2, img1
8
+ nicht alle Seiten müssen gleichzeitig im
Hauptspeicher liegen
12/13/2010
1
3
Virtual memory
CPU
0x00
Swap‐
speicher
p5, img3
p9, img3
0xFF
37
Memory Management Unit (MMU)
Übersetzt von virtuellen Adressen in physische Adressen
Jeder Speicherreferenz wird in der MMU ersetzt
MMU verfügt über speziellen Cache‐Speicher, den Translation Lookaside Buffer (TLB)
CPU
Virtual address
MMU
Translation
Table
Physical
address
Memory
TLB
12/13/2010
UNIX Mechanismen
38
Adressraum und Umsetzung
Unterteilung des Speicherbereichs
 Kernel: evt. physikalischen Adressmodus
 Userprozesse: virtueller Adressmodus
Adressumsetzung
 Prozessorabhängig
 Makros verdecken:
• Anzahl der Seitentabellen
• Struktur eines Seitentabelleneintrags
• Struktur einer virtuellen Adresse
12/13/2010
UNIX Mechanismen
39
Zusammenfassung: Virtueller Speicher
Homogener virtueller Speicher für verschiedene Speichertypen
Anforderungen an virtuellen Speicher
Größer als physikalischer Speicher
Mehr Prozesse gleichzeitig aktiv als Hauptspeicher erlaubt
o Zugriffschutz auf Prozessspeicherbereich
Zugriff nicht langsamer als Hauptspeicher
Transparente Erweiterung (unsichtbar für Nutzer)
12/13/2010
UNIX Mechanismen
40
Stack und Heap
0xFFFF … Endadresse
Text segment
 Progammcode
Stack
pointer
Data segment:  Konstanten
grows down
grows up
Stack segment:  Speicher für Variablen in Funktionen
 Stack Overflow
Heap segment:
 Dynamisch zugewiesener Speicher
 Heap Overflow
 Memory Leak
12/13/2010
Stack
UNIX Mechanismen
Adressraum
Heap
Data
Program
Counter
Text
0x0000 … Startadresse
41
Stack
1.
Vor dem Funktionsaufruf:
2.
Stack
pointer
Während dem Funktionsaufruf:
Argumente werden auf den Stack gepusht
Argu‐
mente
Stack
pointer
12/13/2010
UNIX Mechanismen
3.
Stack
pointer
Nach dem Funktionsaufruf:
Ergebnis (return
Wert) gespeichert
Ergebnis
42
Verwaltung des Hauptspeicher
Liste von mem_map_t (aka ‚page‘) Einträgen
 Anzahl der Referenzen auf Seitenrahmen
 Alter des Seitenrahmens (letzter Zugriff)
 Nummer des physikalischen Eintrags
 Info: Page‐Größe bei x86 Systemen beträgt 4 KB
free_area Struktur
 Doppelt verkettete Liste von freien Einträgen
 Bitmap von Blockallokationsstatus
12/13/2010
UNIX Mechanismen
43
Verwaltung des Hauptspeichers (2)
Buddy Verfahren: Seitenrahmen der Größe 2n
12/13/2010
UNIX Mechanismen
44
Buddy Verfahren
Der Speicher wird in Bereiche der Länge 2n aufgeteilt. Zu Beginn gibt es nur einen Block, der möglichst den gesamten Speicher abdeckt
Fordert nun ein Prozess eine bestimmte Menge Speicher an, so wird zur nächsthöheren Zweierpotenz aufgerundet und ein entsprechender Block gesucht.
Falls es noch keinen Block dieser Größe gibt, wird nach einem Block doppelter Größe gesucht, der dann in zwei Hälften (bzw. Buddies) aufgeteilt wird, und einer dieser Blöcke wird dem Prozess zugewiesen. 12/13/2010
UNIX Mechanismen
45
Erzeugen eines Prozesses
Aufruf von fork
• Anlegen des Swap Space für Kindprozess
• Neuer task_struct Tabelleneintrag
• Anlegen der Seitentabellen
• Duplizieren des gesamten (!) Adressraums
Effizienter: nur Seitentabellen kopieren
Fill‐on‐Demand Seiten
Copy‐on‐Write nur bei Schreibzugriff
Seiten kopieren
12/13/2010
UNIX Mechanismen
46
ENDE
Danke für die Aufmerksamkeit!
12/13/2010
UNIX Mechanismen
47
Herunterladen