Vorlesung Betriebssysteme I - htw-dresden.derobge/bs1/vl/bs1-all.pdf · procedure call Windows...
Transcript of Vorlesung Betriebssysteme I - htw-dresden.derobge/bs1/vl/bs1-all.pdf · procedure call Windows...
Vorlesung Betriebssysteme IThema 1: Einführung
Robert Baumgartl
12. Oktober 2015
1 / 34
Organisatorisches
I 2/0/2, d. h., 90’ Vorlesung und 90’ Praktikum pro WocheI Vorlesung dienstags 15:10 Uhr, Z 211I Lehrender: Prof. Robert BaumgartlI Kontakt:
I [email protected] dem Subject bitte „[BS1]“ voranstellenI Tel. 462 2510I Raum Z 357
I Praktikum in Linux-Laboren (Z 136c/Z 146a)I Betreuung durch mich und Laboringenieure (Herr Schubert,
Herr Paul)I Start: 12. 10. 2015
I Prüfung: Klausur, 90’, Voraussetzung: Beleg
2 / 34
Vorkenntnisse
Bitte um Handzeichen – Wer hat schonI mit Windows gearbeitet?I mit Linux (o. a. Unix) gearbeitet?I einen der Editoren vi oder emacs genutzt?I in C programmiert?I make eingesetzt?I fork() beim Programmieren benutzt?I in der Open-Source-Community mitgewirkt?I einen Treiber geschrieben?
3 / 34
Vorkenntnisse II
Wer weiß, was das macht:
char *foo(char *dest, const char *src){
while(*dest++ = *src++);}
. . . und das?
bash$ :(){ :|:&};:
(Vorsicht! Nicht ausprobieren!)
4 / 34
Wozu befassen wir uns mit Betriebssystemen?... es gibt doch Windows!
Einige Gedanken:I Grundlagenfach der InformatikI BS gehören zu den komplexesten Softwaresystemen
überhaupt!I aktiver Forschungsgegenstand
I Betriebssysteme-SicherheitI SkalierbarkeitI SensornetzeI Echtzeitbetriebssysteme
I Linux!I und zuguterletzt: Wir wollen doch kompetent die Frage
beantworten, ob Linux oder Windows besser ist?!
5 / 34
Vorläufige Themenübersicht
1. Einführung2. Linux in a Nutshell3. Dateisystem4. Grundlegende Begriffe, Teil 25. Aktivitäten6. Kommunikation7. Scheduling8. Threads (Aktivitäten, die zweite)9. Synchronisation
7 / 34
Einige Aspekte von Betriebssystemen
I BedienungI AdministrationI Programmierung für BetriebssystemeI Programmierung von BetriebssystemenI Abstraktionen für Aktivitäten (Prozesse, Threads,
Coroutinen, Fibers, Tasks)I FehlertoleranzI Security & SafetyI Forensik
8 / 34
Ziel des Kurses
Vermittlung von vorwiegend praktischen Kenntnissen zuI Nutzung elementarer WerkzeugeI Automatisierung von BedienhandlungenI Interaktion zwischen Applikationen und
Betriebssystem(en)I Struktur und Vorgängen innerhalb von BetriebssystemenI Unix-artigen und Windows-Betriebssystemen
9 / 34
Eine kurze Geschichte der . . . BetriebssystemeAndrew Tanenbaum unterscheidet 4 Epochen
1. 1945-55 – ElektronenröhrenI keine Betriebssysteme
2. 1955-65 – TransistorenI Mainframes – kommerzielle ComputerI Batchsysteme (Ziel: maximale Rechnerauslastung)
3. 1965-75 – niedrig integrierte SchaltkreiseI IBM System/360→ OS/360 (Ziel: Kompatibilität)I Multiprogramming (mehrere Ausführungseinheiten
gleichzeitig)I SpoolingI Timesharing (Ziel: Reduktion der Systemantwortzeit)I MULTICS (ambitioniert, aber erfolglos)I Minicomputer (kleiner als Mainframe; DEC PDP-1. . . -11)I UNIX (portabel, offen, kollaborativ entwickelt)
10 / 34
Eine kurze Geschichte der . . . BetriebssystemeAndrew Tanenbaum unterscheidet 4 Epochen
4. 1975-heute — hoch integrierte SchaltkreiseI 1976: Prozessor Zilog Z80→ CP/MI etwa ab 1977: Homecomputer (Apple II, C64, . . . )I 1979: Prozessor i8088; PCI 1980: QDOS→ MS-DOSI 1984: Apple Macintosh→ MacOS (GUI)I 1985: Microsoft Windows 1.0I 1992: Linux
11 / 34
Plattformen fürs „Personal Computing“
I verkaufte „PersonalComputing Units“ proJahr
I Quelle:http://twitpic.com/87nbjj
12 / 34
GUI von MacOS (1984)
(http://upload.wikimedia.org/wikipedia/en/5/50/Apple_Macintosh_Desktop.png)
13 / 34
Betriebssysteme
Es gibt:I Windows-Familie (2.0→ 10)I LinuxI MacOS X
... das wars, oder?I MS-DOS, RTEMS, QNX, FreeBSD, SymbianOS, PalmOS,
RTAI, HP-UX, BeOS, Minix, Chorus, L4, Mach, Amoeba,OS/390, DCP, TOS, CP/M, VMS, eCos, Contiki, OS/2 . . .
I vgl. http://de.wikipedia.org/wiki/Liste_der_Betriebssysteme
14 / 34
Betriebssysteme
Es gibt:I Windows-Familie (2.0→ 10)I LinuxI MacOS X
... das wars, oder?I MS-DOS, RTEMS, QNX, FreeBSD, SymbianOS, PalmOS,
RTAI, HP-UX, BeOS, Minix, Chorus, L4, Mach, Amoeba,OS/390, DCP, TOS, CP/M, VMS, eCos, Contiki, OS/2 . . .
I vgl. http://de.wikipedia.org/wiki/Liste_der_Betriebssysteme
15 / 34
UNIX
I . . . ist kein Betriebssystem, sondern eine ganze FamilieI Name ist ein Wortspiel aus dem Vorgänger „Multics“ und
„unique“I zusammen mit der Programmiersprache C in den 70er
Jahren entwickeltI einige Vertreter: *BSD, System V, Linux, HP-UX, AIX,
Solaris, MinixI sogar Microsoft hat ein UNIX entwickelt: XENIX (es ist
aber schon lange tot)I der zugehörige Standard heißt POSIXI beliebt vor allem im Serverbereich (aber nicht nur!)I Nutzer haben mit Vorurteilen zu kämpfen . . .
16 / 34
Lizensierungsaspekte
2 grundlegende Ideen:I Closed Source: Quellcode ist geheim,
„Betriebsgeheimnis“, steht i. a. nur dem Hersteller zurVerfügung
I Open Source: Quellcode steht prinzipiell jedem zurVerfügung→ kann modifiziert und weiterverteilt werden(und soll dazu ermuntern)
18 / 34
Kommerzielle Lizenzen
I kann (muss aber nicht) Einblick in Quellcode umfassen(z. B. für nichtkommerzielle Zwecke)
I erfordert meist Vertrag („End User License Agreement“(EULA))
I typische EULAs sind im EU-Raum jedoch unwirksam (zumGlück)
Kosten für:I EntwicklungswerkzeugeI Bibliotheken (z. B. für Protokollstacks oder zum Debugging)I Royalties: pro Installation auf ZielgerätI (Schulung der Entwickler)
19 / 34
GNU General Public License (GPL)
I Richard Stallman, 1989I Kurzform:
1. Das Werk darf für beliebige Zwecke verwendet werden(auch kommerziell).
2. Das Werk darf beliebig weitergegeben werden, kostenlosoder kostenpflichtig. Der Quelltext (auch eigenerModifikationen) ist mitzuliefern.
3. Das Werk darf beliebig modifiziert werden.4. Es dürfen keine Einschränkungen an diesen Regeln
erfolgen.I enthält sog. starkes „Copyleft“: erzwingt die
Weiterverbreitung von aus freien Werken abgeleitetenWerken→ niemand kann die Verbreitung einesursprünglich freies Werk verhindern („Virulenz“)
I wichtigste Open-Source-LizenzI Beispiele: Linux, eCos, GCC, emacs, vi
20 / 34
Nachteile der GPL
I untersagt das Vermischen von GPL-Code mit Code, derunter inkompatibler Lizenz steht (also alle closed source,aber auch freie Software)
I → Binärtreiber bestimmter Grafikkarten sind eigentlichillegal im Linux-Kern (geduldet; „tainted kernel“)
I erschwert die Migration zu freier Software, da inUnternehmen existierende kommerzielle Software nichtohne weiteres in diese integriert werden kann
I Verletzungen werden verfolgt! (gpl-violations.org)
21 / 34
Wozu benötigen wir nun ein Betriebssystem?
1. Bereitstellen von Diensten und dafür notwendigenAbstraktionen (z. B. „Prozess“, „Datei“, „Gerätetreiber“u. v. a. m.)
2. Ressourcenverwaltung inklusive Protokollierung3. Koordinierung paralleler Abläufe4. Basis für Schutz und Sicherheit
22 / 34
Klassifizierung von Betriebssystemen
Kriterium: NutzeranzahlI Single-User-BSI Multi-User-BS
Kriterium: Anzahl unabhängiger AktivitätenI Single-Tasking-BSI Multi-Tasking-BS
Kriterium: Kommunikation mit der UmweltI BS zur Stapelverarbeitung (Batchbetrieb)I interaktives BSI BS für autonome Systeme
23 / 34
Klassifizierung von Betriebssystemen II
Kriterium: VerteilungI lokales BSI verteiltes BS
Kriterium: Zielarchitektur/EinsatzzweckI ServerbetriebssystemI eingebettetes BetriebssystemI EchtzeitsystemI Mainframe-BSI BS für Personal ComputerI BS für Smart CardI BS zur Ausbildung/Lehre
24 / 34
Apropos: welches Betriebssystem wird eingebetteteingesetzt?
Quelle: http://www.eetimes.com/document.asp?doc_id=126308325 / 34
Interaktion mit dem Betriebssystem
Paradigmen:I vorwiegend textorientiert (Konsole, Shell,
Eingabeaufforderung)I grafische Oberfläche (Windows, KDE, Windowmaker)
Die Frage Was ist besser? führt unausweichlich zu ÄrgerI keine Frage des Betriebssystems sondern der
persönlichen Vorliebe
26 / 34
Modellierung und Strukturierung von BS
Problem: BS gehören zu den komplexesten Softwaresystemenüberhaupt!→ durch Lesen des Programmcodes kaum zuverstehenTechnik: Durch Reduktion der möglichenKommunikationsbeziehungen zwischen KomponentenÜbersicht schaffen.
27 / 34
Modell 1: Monolithisches System
I Andrew Tanenbaum: “The Big Mess”I jede Routine, Funktion, . . . darf jede andere im System
rufen unübersehbare Vielfalt potentiellerKommunikationsbeziehungen
I kein Information HidingI BS = Sammlung von FunktionenI typisch für „historisch gewachsene“ SystemeI effizient!
28 / 34
Modell 2: Geschichtetes System
I Kommunikation nur zwischen Instanzen benachbarterSchichten
I Beispiel: OSI-Schichtenmodell der ISO fürKommunikationsprotokolle (7 Schichten)
I leider kein vergleichbarer Standard in der BS-Technologieetabliert
Steuerungshierarchie
DiensthierarchieApplikation
Hardware
Betriebssystem−Kern
Gerätetreiber
Dateisystem
Abbildung: Beispiel für ein geschichtetes System
I Gefahr der Ineffizienz29 / 34
Variante: quasikonsistente Schichtung
I Schichtung nicht zwingend:
"Betriebssystem"
Applikationen
Hardware
I/OBIOS
DOS
COMMANDApplikation
CPU
Abbildung: Quasikonsistente Schichtung im MS-DOS
30 / 34
Beispiel für ein komplex geschichtetes ModellMark Russinovitch et al: Windows Internals. 6th ed., Microsoft Press, 2012, S. 47
CHAPTER 2 System Architecture 47
Windows, and Chapter 4 details management mechanisms such as the registry, service processes, and Windows Management Instrumentation . Other chapters explore in even more detail the internal structure and operation of key areas such as processes and threads, memory management, security, the I/O manager, storage management, the cache manager, the Windows file system (NTFS), and networking .
System Processes
Services Applications EnvironmentSubsystems
Windows
SUA
Windows DLLs
NTDLL.DLL
System Service Dispatcher
(Kernel mode callable interfaces)
I/Omanager
Plug and Playm
anager
Object
manager
Cachem
anager
Securityreferencem
onitor
Mem
orym
anager
Processm
anager
Configurationm
anager
Advanced localprocedure
call
WindowsUSER,GDI
Graphicsdrivers
Hardware abstraction layer (HAL)
Hardware interfaces (buses, I/O devices, interrupts,interval timers, DMA, memory cache control, etc.)
Systemthreads
Userapplication
Subsystem DLLs
Device and filesystemdrivers
Kernel
User mode
Kernel mode
Windows DLLsWindows DLLsWindows DLLsWindows DLLs
Service host
Windows DLLs
Print spooler
Sessionmanager
Windows DLLs
Local sessionmanager
Windows DLLs
Service control manager
Local SecurityAuthority
Windows DLLs
Windows DLLs
Winlogon
Windows DLLs
Wininit
FIGURE 2-3 Windows architecture
31 / 34
Modell 3: Client-Server-Modell
I Diensterbringung durch eine zentrale InstanzI Client wendet sich mit Dienst-Wunsch an ServerI Server erbringt gewünschten Dienst, wenn möglichI Beispiele: Speicherverwaltung im BS, NTP-Server,
Drucker-Server, . . .I sog. Mikrokern-Architekturen wenden das Prinzip
konsequent auf BS-Komponenten an
32 / 34
Zusammenfassung: Was haben wir gelernt?
1. Es gibt viele BS2. Was ist UNIX?3. Lizensierung: Closed Source vs. Open Source4. Klassifikationskriterien von BS5. Modellierung/Strukturierung von BS:
I monolithischI geschichtetI Client-Server-Beziehungen
33 / 34
Literaturvorschläge
I Andrew S. Tanenbaum: Modern Operating Systems.Pearson Education
I Richard Stallings: Operating Systems. Fifth Edition,Prentice-Hall
I Dokumentation der Geschichte desWindows-Betriebssystems: http://www.winhistory.de/
I Ellen Siever, Stephen Figgins, Robert Love, ArnoldRobbins: Linux in a Nutshell. Sixth Edition, O’Reilly, 2009
I Cameron Newham: Learning the Bash Shell. Third Edition,O’Reilly, 2005
34 / 34
Vorlesung Betriebssysteme IThema 2: Linux in a Nutshell
Robert Baumgartl
05. 11. 2013
1 / 24
Linux
I bekanntestes Open-Source-Projekt weltweitI Multiuser-Multitasking-BetriebssystemI Unix-artigI Schöpfer: Linus TorvaldsI primär kommandoorientiert, aber auch mit vielen
(schönen) bunten Oberflächen bedienbarI außerordentlich gut skalierbarI für sehr viele Plattformen verfügbar (Auswahl): IA-32,
IA-64, Sun SPARC, Motorola 68000, PowerPC, ARM, IBMS/390, MIPS, HP PA-RISC, Atmel AVR32, AD Blackfin
2 / 24
Im Anfang war ein Posting . . .
From: [email protected] (Linus Benedict Torvalds)Newsgroups: comp.os.minixSubject: What would you like to see most in minix?Summary: small poll for my new operating systemMessage-ID: <[email protected]>Date: 25 Aug 91 20:57:08 GMTOrganization: University of Helsinki
Hello everybody out there using minix -
I’m doing a (free) operating system (just a hobby, won’t be big andprofessional like gnu) for 386(486) AT clones. This has been brewingsince april, and is starting to get ready. I’d like any feedback onthings people like/dislike in minix, as my OS resembles it somewhat(same physical layout of the file-system (due to practical reasons)among other things).
I’ve currently ported bash(1.08) and gcc(1.40), and things seem to work.This implies that I’ll get something practical within a few months, andI’d like to know what features most people would want. Any suggestionsare welcome, but I won’t promise I’ll implement them :-)
Linus ([email protected])
PS. Yes - it’s free of any minix code, and it has a multi-threaded fs.It is NOT protable (uses 386 task switching etc), and it probably neverwill support anything other than AT-harddisks, as that’s all I have :-(.
3 / 24
Evolution
I 17. September 1991: Version 0.01: 241 KiB, 8413 LoC1
I 13. März 1994: Version 1.0.0: 563 KiB, 170.581 LoCI 9. Juni 1996: Version 2.0.0: 2.015 KiB, 716.119 LoCI 9. Oktober 2008: Version 2.6.26.6, mehr als 8 Millionen
LoCI 2012: Version 3.6, knapp 15 Millionen LoCI neueste Version stets hier: http://kernel.org/
1Lines of Code (Programmzeilen)4 / 24
Kernel vs. System
Mit Linux i. e. S. ist der Kernel, d. h. , das eigentlicheBetriebssystem gemeint.Zu einem Linux-System gehört jedoch viel mehr:I Basiswerkzeuge zur BedienungI Kommandointerpreter (Shell): bash, ksh, csh, tcshI Entwicklungswerkzeuge: gcc (GNU Compiler Collection)I (textbasierte) ApplikationenI grafische Basisschnittstelle: X Window SystemI FenstermanagerI grafische Applikationen→ Gesamtsystem wird manchmal (korrekter) GNU/Linuxgenannt.
5 / 24
Distributionen
I sind Zusammenstellungen des Kernels, von Applikationenund Werkzeugen zur Konfiguration, die ein lauffähigesGesamtsystem erzeugen
I vereinfachen den Konfigurations- und Updateaufwandbeträchtlich (Paketmanagement)
I unterscheiden sich in vielen Einzelaspekten:I hauptsächliches Einsatzziel Desktoprechner, Server,
eingebettetes SystemI Einstellung zu proprietären KomponentenI Sprachanpassung (Lokalisierung)I . . .
I Frage nach der besten Distribution führt gemeinhin zuMeinungsverschiedenheiten
6 / 24
Beispiele für populäre Distributionen
Name MerkmalGentoo das System wird grundlegend aus den Quellen er-
zeugtFedora freies Linux der Fa. Red HatSUSE Distribution der Fa. Novell (frei und kommerziell)Debian frei, stabil, (meist) etwas veraltete ApplikationenUbuntu anfängerfreundlich, freiKnoppix bekannte Live-DistributionDVL für die Ausbildung in BS-SicherheitOpenmoko spezialisiert für Smartphones
Siehe auch:http://de.wikipedia.org/wiki/Liste_von_Linux-Distributionenhttp://upload.wikimedia.org/wikipedia/commons/8/8c/Gldt.svg
7 / 24
Womit mache ich . . .
Textverarbeitung? openoffice, LATEXKinoabend? mplayer, totemInstant Messaging? gajimDiashows? gqview, display
Bildbearbeitung? gimp, ImagemagickWWW-Recherche? firefox, iceweasel, epiphanyNotensatz? lilypondFunktionsplotting? gnuplotVektorgrafik? xfigProgrammeingabe? vi, emacs, joe
8 / 24
Qual der (Editor-)Wahl
vi
I auf jedem UNIX-System vorhandenI effizient, leichtgewichtigI arbeitet im Terminal
emacs
I kann alles: editieren, Mail und News lesen, browsen,Terminal bedienen, Kuchen backen . . .
I sehr flexibelI schwierig zu konfigurieren (Lisp)I grundlegende Edit-Kommandos sind die gleichen wie in
der Bashjoe ist ein Behelf, der nicht an die Mächtigkeit der anderenbeiden Editoren heranreicht
9 / 24
Neal Stephenson über Emacs
“I use Emacs, which might be thought of as athermonuclear word processor. It was created byRichard Stallman; enough said. It is written in Lisp,which is the only computer language that is beautiful.It is colossal, and yet it only edits straight ASCII textfiles, which is to say, no fonts, no boldface, nounderlining. If you are a professional writer i.e., ifsomeone else is getting paid to worry about how yourwords are formatted and printed, Emacs outshines allother editing software in approximately the same waythat the noonday sun does the stars. It is not justbigger and brighter; it simply makes everything elsevanish.”
(Neal Stephenson, In the Beginning . . . was the Command Line)
10 / 24
Grafische Nutzeroberflächen
I K Desktop Environment (KDE)I GNOMEI WindowMakerI XfceI IonI awesome
Unterscheidungskriterien:I ’Look & Feel’I TastaturbedienbarkeitI Umfang (Startzeit, Ressourcenbedarf)
Frage nach dem besten Windowmanager→ Chaos.
11 / 24
Womit schaue ich Dokumente an?
Extension Betrachter.chm xchm.djvu djview.doc openoffice, abiword.dvi xdvi.jpg gqview.pdf acroread, xpdf, evince.ps gv
.svg Browser
12 / 24
Erste Hilfe
I man <kommando> zeigt die zugehörige ManualseiteI info <kommando> dito, jedoch mit emacs-SteuerungI apropos <begriff> zeigt zum Suchbegriff gehörige
KommandosI der Schalter --help gibt zu vielen Kommandos nähere
ErklärungenI Das WWW bietet eine Fülle von Hilfen für alle Probleme
rund um Linux
13 / 24
Das Manual
I Manual-Seiten sind in verschiedene Kategorien eingeteilt(man man)
I Shellbefehle, z. B. openI Systemrufe, z. B. open()I Bibliotheksfunktionen, z. B. fopen()
I mehrere Sektionen pro Seite: NAME, SYNTAX,BESCHREIBUNG, OPTIONEN, DATEIEN, SIEHE AUCH,FEHLER, und AUTOR
I Humorige Bemerkungen sind häufig, vgl. man 3 gets(unter BUGS) oder man rtfm (, sofern installiert)
14 / 24
Die 20 wichtigsten Kommandos – Teil 1
Kdo. Zweckls Verzeichnisanzeige (list)
cd Verzeichniswechsel (change dir)cp Kopieren von Dateien (copy)mv Bewegen von Dateien/Verzeichnissen (move)rm Löschen von Dateien/Verzeichnissen (remove)
mkdir Verzeichnis anlegen (make dir)rmdir Verzeichnis löschen (remove dir)
chmod Rechte einer Datei ändern (change mode)less seitenweise Anzeige von Dateiencat Anzeige des Dateiinhalts (catalogue)
w zeigt an, wer eingeloggt ist (und was er tut)
15 / 24
Die 20 wichtigsten Kommandos – Teil 2
Kdo. Zweckgrep Suche von Zeichenkettenfind Suche nach Dateien
man Anzeige von Manualseitenps Anzeige von Prozessstatistiken (process state)kill Zustellung von Signalenbg Programm in den „Hintergrund“ schicken (background)top Anzeige der rechenintensivsten Prozesse
mount Datenträger einbinden (montieren)du Anzeige des Platzbedarfs von Dateien (disk usage)ln Anlegen eines Verweises (Links)
aber: nicht jedes zweibuchstabige Kürzel ist ein Kommando!16 / 24
Konzept: „Alles ist eine Datei“
3 Kategorien von Dateien:1. „gewöhnliche“ Datei = unstrukturierte Strom von Bytes2. Verzeichnis (Directory) = Datei, die Verzeichniseinträge
enthält3. Spezialdateien:
I Links (Hard Links, symbolische Links)I Geräte (zeichen- oder blockorientiert)I „named pipes“ (FIFOs)I Sockets
Vorteil: einheitliche Behandlung der abstrahierten Objekte.
17 / 24
Die Shell
I normaler Nutzerprozess, der kontinuierlich1. Kommandos einliest,2. diese ausführt,3. etwaige Ausgaben des Programms am Bildschirm darstellt.
I verschiedene: csh, tcsh, ksh, bashI Folgen von Shell-Kommandos nennt man ShellscriptI da die Shell auch Konstrukte für Verzweigungen, Schleifen
und Funktionsaufrufe mitbringt, handelt es sich um eineProgrammiersprache.
I mächtiges Werkzeug
18 / 24
Einfaches Shellscript
#!/bin/bash
# some sanity checksif test ! -x ‘which mac‘ ; then
printf "Please install mac first. Aborting.\n">&2
exit 127fiif test ! -x ‘which lame‘ ; then
printf "Please install lame first. Aborting.\n">&2
exit 127fi
# do the workfor FILE in *.ape ; do
mac "$FILE" "${FILE/ape/wav}" -dlame -h -b320 "${FILE/ape/wav}" "${FILE/ape/mp3}"rm -f "${FILE/ape/wav}"
doneexit 0
19 / 24
Shell vs. Grafikoberfläche - kein Widerspruch
Abbildung: Bla20 / 24
Kurzer Rundgang durchs Dateisystem
. . . machen wir interaktiv.
21 / 24
Was haben wir gelernt?
1. UNIX (in der Gestalt von Linux) ist sehr mächtig und sehrflexibel; es erfordert jedoch eine PortionEinarbeitungsaufwand.
2. Die Shell wird interaktiv bedient.3. Shellscripts sind Kommandofolgen der Shell; die Syntax ist
ein wenig kryptisch, man kann sie aber meistern.4. Das Dateisystem ist ein hierarchischer Baum.
22 / 24
Literaturvorschläge
I Linus Torvalds und David Diamond: Just for Fun. Wie einFreak die Computerwelt revolutionierte, dtv, 2002
I http://www.bin-bash.de/
24 / 24
Vorlesung Betriebssysteme IThema 3: Dateisystem
Robert Baumgartl
9. Februar 2015
1 / 35
Wozu ein Dateisystem?
Aufgaben von Dateisystemen:I Verwirklichung sinnvoller Abstraktionen zum Strukturieren
der abzulegenden Information (Datei, Verzeichnis)I Management des Freispeichers
Herausforderungen:I Langsamkeit der Medien, da meist mechanische
Operationen notwendigI Umfang der InformationenI Fehlertoleranz
Heterogenität:I magnetische MassenspeichermedienI optischeI elektrische
2 / 35
Aufbau einer Festplatte
I Stapel von rotierenden Magnetplatten, konstanteRotationsgeschwindigkeit (CAV – Constant AngularVelocity)
I Rotationsgeschwindigkeit ca. 5400 – 15000 min−1
I 2-16 PlattenI konzentrische Spuren (Tracks), ca. 10.000 pro OberflächeI übereinanderliegende Spuren bilden einen sog. ZylinderI kleinste ansprechbare Einheit: physischer Block („Sektor“;
512 Byte), z.B. 150-300 Sektoren pro SpurI 1 Schreib-Lesekopf pro Plattenoberfläche, radiale
Bewegung aller Köpfe gemeinsam
3 / 35
Aufbau einer Festplatte
I historisch: Adressierung eines Sektors über {Zylinder,Kopf, Sektor}-Tripel (Cylinder, Head, Sector – CHS)
I heute: Logical Block Addressing (LBA), einfacheDurchnumerierung aller Blöcke
I physisches Layout vor Nutzer verborgen: AbbildungLogischer Blocknummern auf Physische Blocknummern(LBN→ PBN) durch Festplattenelektronik
4 / 35
Schematischer Aufbau einer Festplatte
Platte
SpurZylinder
Abbildung: Seitenansicht
Spur
Sektor
Abbildung: Draufsicht
5 / 35
Optische Medien: Compact Disc (CD)
Grundlage: Red Book Standard von Philips und Sony
Standard Kürzel BemerkungenRed Book CD-DA Audio-CD
Yellow Book CD-ROMGreen Book CD-I CD Interactive
Blue Book CD-Extra Audio+Daten-CDOrange Book CD-R[W] Recordable CDs
White Book Video-CD- Photo CD
Tabelle: Übersicht relevanter CD-Standards
6 / 35
Fakten zur CD
I Abtastung mittels eines Infrarotlasers, unterschiedlichesReflexionsverhalten von Pits und Lands
I eine (!) Spur (Breite: 0.5 µm), von innen nach außengelesen, Abstand 1.6 µm
I konstante Speicherdichte→ Constant Linear Velocity(CLV)→ variable Umdrehungsgeschwindigkeit je nachPosition auf Medium
I 2 (CD-Audio) bzw. 3 unabhängigeFehlerkorrektur-Schichten:
I Symbol: 8 Bit Payload pro 14 Bit-Symbol (Eight-to-FourteenModulation, EFM)
I Frame: SYNC + CTL + 32 Symbole (∑
588 Bit, davon 24Byte Nutzlast)
I Sektor: 98 Frames á 24 Byte Nutzlast = 2352 Byte LängeI kleinste adressierbare Einheit: Sektor (CD-ROM)
7 / 35
Welche Dateisysteme gibt es?
BS DateisystemMS-DOS FAT12, FAT16
Windows 9x VFATWindows NT. . . Vista NTFS
MacOS HFSLinux ext2fs, ext3fsOS/2 HPFS
Tabelle: Betriebssystemspezifische Dateisysteme
Gute BS lesen auch die Dateisysteme der „Konkurrenz“, soferndiese offen liegen.Zusätzlich gibt es BS-übergreifende Dateisysteme, z. B.IS09660 (Dateisystem der CD-ROM) oder CIFS.
8 / 35
Grundlegende Abstraktionen: Datei
Datei = „Ansammlung“ von Nutzdaten + AttributeBeispiele typischer Attribute:I Schutz: Wer darf welche Operation mit Datei ausführen?I Eigentümer der DateiI Beschränkungen der erlaubten Operationen (Read-Only)I Beschränkungen der Sichtbarkeit der Datei (Hidden Flag,.dateiname)
I DateinameI Zeitstempel (letzter Zugriff, letzte Änderung, Kreation)I Größe der DateiI Stellung des Dateipositionszeigers→ stat-Kommando unter Linux
9 / 35
Typen von Dateien
Unterscheidung von DateitypenI durch Attribute (Dateinamen, ASCII/binary-Flag),I durch Dateinamen,I durch Magic Word.
Ein Magic Word ist eine charakteristische Bytesequenz amBeginn der Datei, anhand derer ihr Typ identifiziert werdenkann.
Sequenz BedeutungJFIF JPEG File Interchange Format
GIF89a Graphics Interchange Format (V.89a)#!/bin/bash Shell-Skript
ELF Executable and Linkable Format
Tabelle: Beispiele für Magic Words
10 / 35
Beispiele: JFIF, PDF
robge@ilpro121:~/txt/job/htw/bs1$ hexdump -C pic/tux2.jpg00000000 ff d8 ff e0 00 10 4a 46 49 46 00 01 01 01 00 48 |ÿØÿà..JFIF.....H|00000010 00 48 00 00 ff db 00 43 00 01 01 01 01 01 01 01 |.H..ÿÛ.C........|00000020 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 |................|
*00000050 01 01 01 01 01 01 01 01 01 ff db 00 43 01 01 01 |.........ÿÛ.C...|00000060 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 |................|...robge@ilpro121:~/txt/job/htw/bs1$ hexdump -C select-pages.pdf00000000 25 50 44 46 2d 31 2e 34 0a 38 20 30 20 6f 62 6a |%PDF-1.4.8 0 obj|00000010 20 3c 3c 0a 2f 4c 65 6e 67 74 68 20 31 32 35 20 | <<./Length 125 |00000020 20 20 20 20 20 20 0a 2f 46 69 6c 74 65 72 20 2f | ./Filter /|00000030 46 6c 61 74 65 44 65 63 6f 64 65 0a 3e 3e 0a 73 |FlateDecode.>>.s|00000040 74 72 65 61 6d 0a 78 da 8d 8e 31 0a c3 30 0c 45 |tream.xÚ..1.Ã0.E|00000050 77 9f e2 5f c0 8a 24 47 ae bc 17 4a c6 9c a1 43 |w.â_À.$G...JÆ.¡C|...
11 / 35
Dateinamenskonventionen
Jedes Dateisystem hat Regeln zum Aufbau einesDateinamens:FAT (File Allocation Table) – MS-DOSI „berüchtigte“ 8.3-KonventionI .COM, .EXE – ausführbare DateienI .BAT – Batchdateien (analog zu Shellskripten)
VFAT – ab Windows 95I bis 255 Zeichen langI Unicode-kodiertI keine Unterscheidung von Groß- und Kleinschreibung
UnixI unterscheidet Groß- und KleinschreibungI name.ext eigentlich unüblich, aber trotzdem genutzt
12 / 35
Wurzelverzeichnis, Pfadtrenner
WurzelverzeichnisVFAT: C:\, D:\, . . . , Z:\Unix: /VMS: [000000]
Betriebssystem TrennsymbolWindows \
Unix /
Multics >
VMS :
Tabelle: Trennsymbole für Pfadangaben
13 / 35
(Abstrakte) Operationen über Dateien
Operation BemerkungenOpen Vor eigentlichem Zugriff erforderlichRead (sequentiell)Write (sequentiell)Seek Verstellen des DateipositionszeigersClose nicht vergessen
Append Anfügen von Daten an DateiendeTruncate Datei verkürzen (z. B. auf 0)Rename Datei umbenennen
14 / 35
Anmerkungen
I Dateien müssen vor Zugriff geöffnet werden.I Lese- und Schreiboperationen nutzen gemeinsam den
DateipositionszeigerI Dieser steht initial auf Position 0 und kann mittels
Seek-Operation beliebig versetzt werden.I Lesen und Schreiben versetzt den Dateipositionszeiger
ebenfalls.I Wird beim Zugriff das Ende der Datei erreicht, wird i. A.
EOF (End of File) gemeldetI Um mit dem Inhalt einer Datei zu arbeiten, muss diese in
den Hauptspeicher transferiert oder eingeblendet werden.
15 / 35
Dateifunktionen der C-Bibliothek
Funktion Semantikfopen() Eröffnen
fclose() Schließenfread() Lesen
fwrite() Schreibenfprintf() (formatiertes) Schreiben
feof() Test auf Dateiendeferror() Test auf Fehlerfseek() Versetzen des Positionszeigersftell() Abfrage desselbigenflock() Sperren einer Datei
mehr: man 3 stdio
16 / 35
C-Bibliotheksfunktionen
I gepuffertI definiert in stdio.h
I geöffnete Datei wird durch FILE* identifiziertI stdin, stdout, stderrI betriebssystemeunabhängig (portabel)I standardisiert nach ANSI C3.159-1989
17 / 35
Systemrufe zur Dateiarbeit (Unix)
Operation Semantikopen() Eröffnen der Dateiread() Leseoperation
write() Schreiboperationlseek() Verstellen des Dateipositionszeigersclose() Schließen der Dateilink() Verweis (Hard Link) auf Datei anlegen
rename() Datei umbenennenmmap() Datei in Hauptspeicher einblenden
18 / 35
Unix-Systemrufe zur Dateiarbeit
I definiert in <unistd.h>I standardisiert in POSIXI portabel nur in Unix-BetriebssystemenI geöffnete Datei wird durch Dateideskriptor (integer)
identifiziert
19 / 35
Funktionen zur Dateiarbeit (Win32) – kleine Auswahl
Operation SemantikCreateFile() Öffnen (kein Witz!)ReadFile() LesenWriteFile() Schreiben
SetFilePointer() Dateipositionszeiger setzenCloseFile() Schließen der Datei
CreateHardLink() (Hard Link) anlegenMoveFile() Datei umbenennen (u. a.)
CreateFileMapping() Datei in Hauptspeicher einblenden
20 / 35
Systemrufe zur Dateiarbeit (Windows)
I MSDN listet 114 Funktionen zur Arbeit mit DateienI Identifikation geöffneter Objekte mit Handles
Beispiel:
HANDLE WINAPI CreateFile(LPCTSTR lpFileName,DWORD dwDesiredAccess,DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes,DWORD dwCreationDisposition,DWORD dwFlagsAndAttributes,HANDLE hTemplateFile
);
21 / 35
Einige typische Datei-Kommandos in Unix
Kommando Semantikcp Kopieren (copy)mv Bewegen (move)rm Löschen (remove)ln Verweis anlegen (link)
chmod Ändern der Zugriffsrechte (change mode)chown Ändern des Eigentümers (change owner)
dd Umleitung von Strömenshred sicheres Löschen
stat Anzeige der Dateiattribute
22 / 35
Kommandos über Massenspeicher und Dateisystem
Kommando Zweckdu Schätzen des Speicherbedarfs eines Verzeich-
nissesdf Anzeige Belegungszustand
fdisk Partitionierungmount Montieren des Datenträgers
mkfs Anlegen eines Dateisystemsfsck Prüfen (und Reparieren) der Integrität des
Dateisystemshdparm Detailinformationen zum Massenspeicher
23 / 35
Verzeichnisse („Ordner“)
I Organisation der Dateien auf MassenspeicherI üblich: Hierarchie von VerzeichnissenI bevorzugte Datenstruktur: Baum, gerichteter Graph
A B C
a a b c c c
Wurzelverzeichnis
Nutzerverzeichnisse
Dateien
Abbildung: Zweistufiges Dateisystem
24 / 35
Hierarchien von Verzeichnissen
A B C
ca bB B C
bC C
ccc c
Wurzelverzeichnis
Nutzerverzeichnisse
Unterverzeichnisse
der Nutzer
Nutzerdateien
Abbildung: Typisches hierarchisches Dateisystem
25 / 35
Unix-Systemrufe über Verzeichnissen
mkdir() Anlegen eines neuen Verzeichnissesrmdir() Löschen eines Verzeichnisses
opendir() Eröffnenclosedir() Schließenreaddir() Sequentielles Lesen der Einträge eines V.scandir() Gezieltes Suchen von Einträgen innerhalb eines
V.rewinddir() Zurückstellen des Eintragszeigerssymlink() Anlegen eines Soft Link
26 / 35
Verweise (Links)
I zusätzliche Verweise auf VerzeichniseinträgeI Sinn: Vermeidung von Dateikopien, Vereinfachung der
Aktualisierung, Erhöhung der FlexibilitätI UNIX: 2 Typen – Soft Links, Hard LinksI Systemrufe link(), symlink()I Kommando ln zum Anlegen
27 / 35
Verweise auf Dateien und Verzeichnisse
A B C
cB B C
bC C
ccc c
l l2
Abbildung: Beispiele für Verweis auf Datei (rot) und Verzeichnis (blau)
28 / 35
Zugriffsrechte von Dateien
Abstraktion zur Beschränkung des ZugriffsWozu?I Schaden durch
I unkundige Nutzer,I bösartige Nutzer undI fehlerhafte Software
zu minimierenAllgemeines Modell: ZugriffsmatrixI Spalten: (passive) Objekte, z. B. Dateien, die
Zugriffsbeschränkungen unterliegenI Zeilen: (aktive) Subjekte, z. B. Nutzer oder Prozesse,
deren Zugriff beschränkt werden sollI Inhalt der Elemente: erlaubte Operationen, gewährte
Rechte
29 / 35
Beispiel zur Zugriffsmatrix
Datei 1 Datei 2 Datei 3 Datei 4Nutzer A Own/R/W Own/R/WNutzer B R Own/R/W W RNutzer C R/W R Own/R/W
I Zugriffsmatrix i. a. spärlich besetztI → zwei Wege der Dekomposition
30 / 35
Dekomposition der Zugriffsmatrix
Access Control List (ACL)I Dekomposition der Zugriffsmatrix nach ObjektenI für jedes Objekt wird gespeichert, welches Subjekt welche
Operation mit ihm ausführen darfI im Beispiel:
I Datei 1: A(OWN/R/W), B(R), C(R/W)I Datei 2: B(OWN/R/W), C(R)I Datei 3: A(OWN/R/W), B(W)I Datei 4: B(R), C(OWN/R/W)
Capability ListI Dekomposition der Zugriffsmatrix nach SubjektenI für jedes Subjekt wird gespeichert, auf welche Objekte es
wie zugreifen darf
31 / 35
Beispiele
I Read-Only Flag im MS-DOSI rwxrwxrwx-Abstraktion im klassischen UNIXI rwlidka-Rechte im Andrew File System (AFS); (für
Verzeichnisse): read, write, lookup, insert, delete, lock,administer
32 / 35
Zugriffsrechte in Unix
I jede Datei hat 3 Rechte: Lesen, Schreiben, AusführenI Rechte werden für 3 Kategorien von Nutzern vergeben:
den Eigentümer, die Gruppe, alle anderen Nutzer desSystems
I ⇒ 3x3 Bits, die gesetzt oder gelöscht sein könnenI Ausführungsrecht für Verzeichnis: man darf
hineinwechselnI Änderung mittels chmod-Kommando
Beispiel:
~> chmod u+rwx g+r-wx o-rwx foo.sh~> ls -l foo.sh-rwxr----- 1 robge robge 4 2008-10-28 10:26 foo.sh
33 / 35
Ausgabe des Kommandos ls -l
−rw−r−−−−− 1 robge if 353400 2008−10−28 10:03 foo.txt
Rechte
des E
igentü
mers
Rechte
der
Gru
ppenm
itglie
der
Rechte
der
restlic
hen N
utz
er
Typ der Datei
Anzahl Verzeichnisse
Gruppe
Größe
Modifikation
Zeitpunkt der letztenEigentümer Name
Abbildung: Ausgebenene Informationen bei ls -l
34 / 35
Zusammenfassung: Was haben wir gelernt?
I Was sind Datei und Verzeichnis?I Dateityp, Namenskonventionen, PfadsymboleI Was versteht man unter Links?I typische Kommandos, C-Funktionen und Systemrufe zur
DateiarbeitI Wie werden Zugriffsrestriktionen für Dateien realisiert?
35 / 35
Vorlesung Betriebssysteme IThema 4: Grundlegende Begriffe, Teil 2
Robert Baumgartl
9. Februar 2015
1 / 19
Begriffe: Schnittstelle
I beschreibt den statischen Aspekt einerKommunikationsbeziehung
I Kommunikation über Schnittstelle kann synchron undasynchron erfolgen
I kann in Hardware oder in Software vorliegen
Hardwareschnittstellen – BeispieleI Peripheral Component Interconnect (PCI)I Controller Area Network (CAN)I InfiniBand
Softwareschnittstellen = Gesamtheit aller nutzbarenFunktionen einer Bibliothek, eines Betriebssystems, einerMiddleware (aka API – Application Programmer’s Interface)Beispiele: POSIX, Win32, Qt-API
2 / 19
Begriffe: Protokoll
I beschreibt den dynamischen Aspekt einer Kommunikation(also den Ablauf)
I BeispieleI Timingdiagramme für das SignalspielI Semantikbeschreibung von SystemrufenI Präzedenzen für den Aufruf von Funktionen
Protokoll und Schnittstelle bedingen einander!Es gibt proprietäre und offene Schnittstellen und Protokolle.
3 / 19
Beispiel für (Teil einer) Protokollbeschreibung
Start
read() write()
open()
close()
Abbildung: Typische Präzedenzen bei Funktionen eines Dateisystems
4 / 19
ProtokollbeispielKommunikation eines Kunden mit dem Clerk bei McDonald’s
t
"Hi."
"Hi."
"A Burger."
"Anything else?"
"No"
"Drink?"
"Large Coke."
"Takeaway?"
"No."
{"Hi", "Hello"}
Clerk Customer
{"Burger", "Fries",
"Chicken"}
{"Yes", "No"}
{"Coke", "Fanta", "Sprite"}
{"small", "medium", "large"} x
{"Yes", "No"}
"$4.99"
pay
"Bye."
"Bye."
{"Bye", "Get lost!"}
time
"Whaddaya wanna?"
computation
5 / 19
Aktivitäten und Ressourcen
In einem Rechensystem gibt es zwei Kategorien vongrundsätzlichen Objekten
1. Aktivitäten: das, was abgearbeitet wirdI TaskI ProzessI ThreadI RoutineI ...I (siehe später)
2. Ressourcen: das, was Aktivitäten „zum Leben“ benötigen
6 / 19
Ressourcen
I „alles das, was keine Aktivität ist“I Aktivitäten konkurrieren um RessourcenI existieren in allen Schichten eines SystemsI Beispiele: Datei, Festplatte, Programmcode,
HauptspeicherblockI = Hardware und alle passiven Abstraktionen eines
Rechensystems (d. h. auch CPU und Geräte)I besitzen zu jedem Zeitpunkt einen inneren Zustand
(z. B. CPU: Gesamtheit der Inhalte aller Register)I Ressourcen werden durch Aktivitäten angefordert,durch
eine zentrale Instanz zugeteilt und nach Nutzung durch dieAktivität zurückgegeben(← Protokoll!)
7 / 19
Entziehbare Ressourcen
Def. Eine entziehbare Ressource kann nach ihrer Zuteilung derAktivität jederzeit entzogen werden. Der Vorgang ist für dieAktivität transparent.Ablauf:
1. Aktivität anhalten2. Zustand der Ressource sichern (z.B. auf Datenträger
schreiben)3. [Ressource anderweitig verwenden]4. Zustand der Ressource restaurieren5. Aktivität fortsetzen
Voraussetzung für Entziehbarkeit:I Zustand der Ressource ist vollständig auslesbarI Zustand der Ressource kann beliebig manipuliert werden.
8 / 19
Entziehbare Ressourcen - Beispiele
I CPU (Zustand kann in den Hauptspeicher ausgelagertwerden)
I Hauptspeicherblock (Zustand kann auf Massenspeicherausgelagert werden)
I Datei
Die meisten Ressourcen sind nicht entziehbar:I CPU-CacheI DruckerI Netzwerkkarte
9 / 19
Exklusiv nutzbare Ressourcen
Def. Eine exklusiv nutzbare Ressource darf zu jedem Zeitpunktmaximal von einer Aktivität genutzt werden.I Beispiele: Hardware, (beschreibbarer) Speicher, zum
Schreiben eröffnete DateiI BS muss Exklusivität durchsetzen (→
Synchronisationsmechanismen)I Zuteilung kann mittels verschiedener Strategien erfolgen:
I FairnessI Minimierung der WartezeitI Garantie einer maximalen Wartezeit
10 / 19
Klassifikation und Beispiele für Ressourcen
entziehbar nicht entziehbarProzessor, Speicher Datei, alle verbrauchbaren BMgleichzeitig nutzbar exklusiv nutzbarProgrammcode, Datei, Speicher Prozessor, Drucker, Signalwiederverwendbar verbrauchbarProzessor, Datei, Speicher Signal, Nachricht, Interruptphysisch logisch oder virtuellProzessor, Speicher, Geräte Datei, Signal, Prozessor (!)
Tabelle: Klassifikation von Ressourcen
11 / 19
Ressourcentransformation
log. Block, z.B. 4 kB
Byte einer Datei
phys. Sektor, 512 Byte
Ebene des Filesystems
Hardware−Ebene
Ebene der Treiber
Applikationsebene
Abbildung: Transformation der Ressource physischer Sektor in Datei
Es kann dabei sogar eine neue Qualität entstehen:
Speicher + Identifikator + Programmcode = neuer Prozess
12 / 19
User Mode und Kernel Mode
I Idee: nur in einem privilegierten Modus (Kernel Mode)dürfen alle Operationen ausgeführt werden (z.B. Zugriff aufdie Hardware, Manipulation von systemrelevantenDatenstrukturen wie der Prozesstabelle)
I dieser ist dem Betriebssystem vorbehaltenI Applikationen werden in einem restriktiven Modus (User
Mode) ausgeführt (z.B. erfolgt automatische Prüfung derGültigkeit jeder Speicherreferenz)
I bei Verletzung der Restriktionen wird die Applikationabgebrochen
I Unterscheidung Kernel Mode vs. User Mode analog zurEinteilung Administratoren vs. gewöhnliche Nutzer
I Ziel: Etablierung eines grundlegenden Schutzkonzeptes
13 / 19
User Mode und Kernel Mode
Was darf man nur im Kernel Mode?I neuen Prozess erzeugenI Treiber ins System laden oder daraus entfernenI generell: Diensterbringung des BetriebssystemsI nicht jedoch: typische Adminaufgaben
Die CPU muss User Mode/Kernel Mode unterstützen, d.h.,verschiedene Privilegierungsmodi unterscheiden.
14 / 19
Systemruf
Damit der „gewöhnliche“ Nutzer die Funktionen des Kernelsüberhaupt anwenden darf, gibt es den Mechanismus desSystemrufs.
I BS bietet dem Programmierer Funktionen, diese werdenüber Systemrufe zur Verfügung gestellt
I Gesamtheit aller Systemrufe eines BS ist dessenApplication Programmer’s Interface (API)
I Nutzung analog den Funktionen einer Bibliothek mit einemUnterschied: Diensterbringung erfolgt im Kernel Mode
I → gewöhnlicher Funktionsaufruf als Mechanismusunbrauchbar!
I Systemrufe können blockieren!
15 / 19
Prinzip eines Systemrufs
eintrittSystem−
System−austritt
User Mode Kernel Mode
System−
dienst
Applikation Betriebssystem
Systemruf
16 / 19
Ablauf eines Systemrufs
2
3
5
dispatch
syscall
syscall
handler
6
7 8
10
11
4
1
9
push nbytes
push &buffer
push fd
call read
adjust stack
put # for read in register
return to caller
TRAP into kernelcall
library
program
user
user space
kernelspace
count = read(fd, buffer, nbytes);
Abbildung: Allgemeiner Ablauf eines Systemrufs read()
17 / 19
Ablauf von WriteFile() in Windows 2000/XP/Vista
Return to Caller
int 0x2e
Do the Operation
Return to Caller
Return to Caller
Software Interrupt
Win32 application
KERNEL32.DLL
Call NtWriteFile()
Call WriteFile(...)
Dismiss Interrupt
Call NtWriteFile()
WriteFile() in
NtWriteFile()
in NTDLL.DLL
SystemService in
NTOSKRNL.EXE
NtWriteFile() in
NTOSKRNL.EXE
Kernel Mode
User Mode
Win32−
specific
Used by all
subsystems
Quelle: David Solomon, Inside Windows XP, Microsoft Press, 200018 / 19
Was haben wir gelernt?
1. Protokoll und Schnittstelle2. Ressourcen
I entziehbareI exklusiv nutzbareI Ressourcentransformation
3. Kernel Mode und User Mode4. Was ist ein Systemruf?
19 / 19
Vorlesung Betriebssysteme IThema 5: Aktivitäten
Robert Baumgartl
9. Februar 2015
1 / 34
Prozesse
Def. Ein Prozess ist ein in Ausführung befindliches Programm.
I Lebenszyklus: Erzeugung→ Abarbeitung→ BeendigungI benötigt Ressourcen bei Erzeugung (Hauptspeicher,
eineindeutigen Identifikator PID, Programmcode)I benötigt weitere Ressourcen im Laufe seines Lebens, nicht
mehr benötigte Ressourcen gibt er i. a. zurückI Jeder Prozess besitzt einen virtuellen Prozessor, d. h.
CPU wird zwischen allen Prozessen geteilt (jeder erhältCPU für eine gewisse Zeitspanne, vgl. folgende Abbildung)
I Hauptmerkmal: Jeder Prozess besitzt einen eigenenAdressraum (jeder Prozess denkt gewissermaßen, er seiallein im System)
I Jeder Prozess besitzt einen Vaterprozess sowie u. U.Kindprozesse
2 / 34
Virtuelle vs. reale CPU
virtuelle
CPU
virtuelle
CPU
virtuelle
CPU
P1
...
...
...
...
...
...
P2 P3
CPU
reale
...
...
Transformation
Px
Abbildung: Virtuelle vs. reale CPU
I Umschaltung zwischen Prozessen: Context Switch durchdas Betriebssystem
3 / 34
Zustandsmodell eines Prozesses
Drei grundlegende Globalzustände werden stetsunterschieden:
aktiv : Prozess wird abgearbeitet. Er besitzt alleangeforderten Ressourcen und die CPU.
bereit : Prozess besitzt alle angeforderten Ressourcenjedoch nicht die CPU.
wartend : Prozess wartet auf Zuteilung einer durch ihnangeforderten Ressource und wird nichtabgearbeitet.
34
1
2
bereit aktiv
wartend
4 / 34
Zustandsübergänge (Transitionen) bei Prozessen
1. aktiv→ bereit: Aktiver Prozess wird verdrängt (Ursachez. B. höherpriorisierter Prozess wurde bereit oderZeitscheibe abgelaufen)
2. bereit→ aktiv: wie 1.3. aktiv→ wartend: Aktiver Prozess geht in Wartezustand (er
hat eine Ressource angefordert, deren Zuteilung ihmverweigert wurde; er blockiert)
4. wartend→ bereit: wartender Prozess erhält angeforderteRessource schließlich zugeteilt.
5 / 34
Zustandsübergänge cont’d
I bereit→ wartend: unmöglich (ein bereiter Prozess kannnichts tun, also auch keine Ressource anfordern, die ihmverweigert wird)
I wartend→ aktiv: nicht sinnvoll (Prozess erhält eineRessource, auf die er wartet, rückgebender aktiverProzess würde für Ressourcenrückgabe „bestraft“)
I Es gibt stets einen aktiven Prozess (CPU kann nicht„leerlaufen“), falls keine Nutzarbeit anliegt Idle-Prozess
I Jede Ressourcenanforderung wird irgendwann erfüllt.I Prozesszustandsdiagramme in realen Systemen sehen
häufig komplexer aus (sind es aber nicht).
6 / 34
Prozesszustände im Linux-Kernel 2.6
fork() and creates
a new process
existing task calls
(task is terminated)
TASK_ZOMBIE
task forks
schedule() calls context_switch()
scheduler dispatches task to run:
task exits via do_exit()
by higher priority task
task is preempted
task sleeps on wait queue
for a specific event
event occurs and task is woken up
and placed back on the run queue
not running)
(ready but
TASK_RUNNING
(running)
TASK_RUNNING
or
(waiting)
TASK_INTERRUPTIBLE
TASK_UNINTERRUPTIBLE
Quelle: Robert Love, Linux Kernel Development, 20057 / 34
Prozesszustände im Windows NT/2000/XP
Terminated
Running
Initialized
Ready
Standby
Transition
Waiting
Set object to
signaled state
Resources
become
available
Thread
waits on
an object
handle
Execution
completes
Reinitialize
thread object
Create and initialize
Place in
ready queue
Select for
execution
Preempt
Resources
unavailable
Preempt
(or time quantum ends)
Contex−switch to it
and start its execution
(dispatching)
Quelle: David Solomon, Inside Windows 2000, Microsoft Press,2000
8 / 34
Speicherabbild
I jeder Prozess besitzt eigenen Adressraum (Größesystemabhängig, typisch 232 Bytes)
I Adressraum ist exklusiv (Ausnahme:Shared-Memory-Segmente)
I Bestandteile (Abb. 10) eines Adressraums in UNIX:I Text: ProgrammcodeI Data: initialisierte DatenI BSS: uninitialisierte Daten, “Heap”I Stack
9 / 34
Prinzipieller Adressraumaufbau eines Prozesses
(BSS)
Stack
initialisierte Daten
uninitialisierte Daten
Text
null−initialisiert
aus Datei eingelesen
durch
Heap
High
Low
Umgebung, Argumente
"break"
exec()
10 / 34
Prozessverwaltung
I Prozesse werden unterbrochen und fortgesetzt (Wechselzwischen bereit und aktiv)
I → alle Informationen, die für Fortsetzung benötigt werden(= Mikrozustand), müssen archiviert werden
I → Prozesstabelle aka Process Control Block (PCB)I konkrete Ausprägung der Parameter stark systemabhängigI Beispiel eines Eintrags: Tabelle 1I Linux: struct task_struct ininclude/linux/sched.h; ca. 1.7 kBytes groß
11 / 34
Mikrozustand eines Prozesses
Prozessverwaltung Speicherverwaltung Dateiverwaltung
Register Zeiger auf Text-Segment Wurzelverzeichnis
Befehlszeiger Zeiger auf Data-Segment Arbeitsverzeichnis
Flagregister Zeiger auf Stack offene Dateideskriptoren
Globalzustand User ID
Priorität Gruppen-ID
Prozess-ID
ID des Vaters
Zeitstempel
erhaltene CPU-Zeit
Tabelle: Typischer Eintrag in der Prozesstabelle
12 / 34
Informationen zu Prozessen: das Kommando ps
gibt tabellarisch zu jedem Prozess des Nutzers ausI PID (Prozess-ID)I TTY (das zugehörige Terminal)I Zustand (Status) des ProzessesI die bislang konsumierte CPU-ZeitI das zugrundeliegende Kommando
13 / 34
Kommando ps (Fortsetzung)
Kommandoswitches von ps, die Sie brauchen werden:-A listet alle Prozesser listet alle bereiten Prozesse (, die sich die CPU teilen)X gibt Inhalt des Stackpointers und einiger weiterer Register
ausf zeichnet Verwandtschaftsverhältnisse mit ASCII-Grafik
(besser: pstree-Kdo.)-l langes Format (zusätzlich UID, Parent PID, Priorität,
Größe)Ein falscher Kommandozeilenparameter gibt eine kurzeZusammenfassung der gültigen Switches aus.
Achtung: Die Syntax der Optionen von ps ist kompliziert;manchmal mit vorangestelltem ’-’, manchmal ohne.
14 / 34
Weitere wichtige Prozess-Kommandos
I top - kontinuierliche ProzessbeobachtungI pstree - (text-)grafische Veranschaulichung von
ProzessverwandschaftenI pgrep - Suche nach Prozessen mittels regulärer
Ausdrücke
Beispiel:
pgrep -l "[[:alpha:]]*d\>"
listet die PID und Namen aller Daemon-ProzesseI nice - Setzen der ProzessprioritätI kill - Senden von Signalen
15 / 34
Erzeugung von Prozessen
I Nur ein Prozess kann einen anderen Prozess erzeugen(lassen), z. B. durch
I Doppelklick auf ein IconI Eingabe eines KommandosI Abarbeitung eines SkriptesI Bootvorgang des Rechners
I Mechanismus: SystemrufI UNIX: fork()I Win32: CreateProcess()
I erzeugter Prozess landet zunächst im Bereit-Zustand
16 / 34
Beispiel: Prozesserzeugung im Shellskript
#!/bin/bash
# number of xterms to startif [ "$1" == "" ]then
iterations=1else
iterations=$1fi
# do the (dirty) workfor (( count=0; count < $iterations; count++))do
xterm &done
# finish(ed)exit 0
17 / 34
Erzeugung eines Unix-Prozesses mittels fork()
pid_t fork (void) ;I erzeugt identische Kopie des rufenden Prozesses, mit
differierendem PID und PPID (Parent Process Identificator)I beide Prozesse setzen nach fork() fort und sind fortan
unabhängig voneinanderI Es ist nicht vorhersehbar, ob Vater oder Sohn zuerstfork() verlassen
I Resultat:I Vater: -1 im Fehlerfalle, PID des Sohnes ansonstenI Sohn: 0
I Vater-Sohn-VerwandschaftI Vater und Sohn arbeiten identischen Code ab, haben aber
private Variablen
18 / 34
Typischer Einsatz von fork()
int main(int argc, char* argv[]){
pid_t ret;
ret = fork();if (ret == -1) {
printf("fork() failed. Stop.\n");exit(EXIT_FAILURE);
}if (ret == 0) { /* Sohn */
printf("Ich bin der Sohn!\n");exit(EXIT_SUCCESS);
}else { /* Vater */
printf("Ich bin der Vater!\n");printf("Der PID des Sohnes betraegt %d.\n", ret);exit(EXIT_SUCCESS);
}}
19 / 34
Wieviel Prozesse schlafen?
#include <unistd.h>
int main(void){
fork();fork();fork();sleep(60);
return 0;}
20 / 34
Variablen sind privat
int var = 42;
int main(int argc, char* argv[]){
pid_t ret;if ((ret = fork())== -1) {
printf("fork() failed. Stop.\n");exit(EXIT_FAILURE);
}if (ret == 0) { /* Sohn */
var = 32168;printf("Sohns ’var’ hat den Wert %d.\n", var);sleep(5);printf("Sohns ’var’ hat (immer noch) den Wert %d
.\n", var);exit(EXIT_SUCCESS);
}else { /* Vater */
sleep(2);printf("Vaters ’var’ hat den Wert %d.\n", var);exit(EXIT_SUCCESS);
}}
21 / 34
Die Bibliotheksfunktion system()
int system (const char∗ string) ;
I führt das Kommando string mittels /bin/sh -c ausI string kann Kommando und dessen Parameter enthaltenI kehrt erst zurück, wenn Kommando beendet wurdeI kombiniert fork() und exec()
22 / 34
Überlagerung des Prozessabbilds mittels execl()
I execl() übernimmt (u. a.) eine Pfadangabe einerausführbaren Binärdatei als Parameter
I ersetzt den aktuell abgearbeiteten Programmcode durchdiese Binärdatei
I springt diesen Code sofort an und beginnt, diesenabzuarbeiten
I kehrt nur im Fehlerfalle zurück (z. B. bei falscherPfadangabe)
I Rückkehr in Ausgangsprozess unmöglich (!)I Systemruf-Familie: 5 Rufe mit sehr ähnlicher Semantik
(execl(), execle(), execv(), execlp() undexecvp())
I erzeugt keinen neuen Prozess
23 / 34
Überlagerung des Prozessabbilds mittels execl()
#include <unistd.h>#include <stdio.h>#include <stdlib.h>
int main(int argc, char* argv[]){
int ret;
printf("%s vor Aufruf von execl()\n", argv[0]);ret = execl("/bin/ls", "ls", NULL);if (ret == -1) {
printf("execl() ging schief. Und nun?\n");exit (EXIT_FAILURE);
}/* wird nicht erreicht ! */printf("%s nach Aufruf von execl()\n", argv[0]);exit (EXIT_SUCCESS);
}
24 / 34
Beendigung von Prozessen
Beendigung kann selbst oder durch anderen Prozess erfolgen(falls dieser die Rechte dazu besitzt)I Selbstbeendigung:
I Verlassen von main(),I return innerhalb von main(),I exit() an beliebiger Stelle im Programm, z. B. als Folge
eines FehlersI Fremdbeendigung:
I Zustellung eines Signals durch anderen ProzessI fataler Fehler durch den Prozess selbst (Division durch Null,
illegale Instruktion, Referenz eines ungültigen Zeigers, . . . )
25 / 34
Möglichkeit zur Beendigung: durch das System
#include <stdio.h>
int main(int argc, char* argv[]){
int ret = 42;int x = 0;
ret = ret / x;printf("Geschafft!\n");return 0;
}
Abarbeitung:
robge@ilpro121:~> ./div-by-zeroGleitkomma-Ausnahme
26 / 34
Möglichkeit der Beendigung: exit (mit Rückkehrcode)
Listing 1: Generierung eines Rückkehrcodes (retval.c)#include <stdlib.h>
int main(int argc, char* argv[]){
if (argc==2) {exit (atoi(argv[1]));
}else {
exit(42);}
}
Listing 2: Abfrage des Rückkehrcodes im Shellskript#!/bin/bash./retval 14echo $?./retvalecho $?
27 / 34
Synchronisation mittels wait()
pid_t wait( int ∗status) ;I bringt den rufenden Prozess in den WartezustandI dieser wird (automatisch) wieder verlassen, wenn ein
(beliebiger) Kindprozess terminiertI falls kein Kindprozess existiert, wird einfach fortgesetztI status enthält Statusinformationen zum Kindprozess
(u. a. Rückkehrcode)I Resultat:
I -1 bei FehlerI PID des beendeten Kindprozesses ansonsten
→ zur Synchronisation zwischen Vater und Sohn nutzbar
28 / 34
Beispiel 1 zu wait()
#include <sys/types.h>#include <sys/wait.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>
int main(int argc, char* argv[]){pid_t ret;
ret = fork();if (ret == -1) {perror("fork");exit(EXIT_FAILURE);
}if (ret == 0) { /* Sohn */printf("Sohn geht schlafen...\n");sleep(10);printf("Sohn erwacht und endet.\n");exit(EXIT_SUCCESS);
}else { /* Vater */printf("Vater wartet auf Sohns Ende.\n");ret = wait(NULL);if (ret == -1) {perror("wait");exit(EXIT_FAILURE);
}printf("Vater endet (nach Sohn).\n");exit(EXIT_SUCCESS);
}}
29 / 34
Beispiel 2 zu wait()
#include <stdio.h>#include <unistd.h>#include <sys/wait.h>
int main(int argc, char* argv[]){
sleep(20);fork(); /* 1. */sleep(20);fork(); /* 2. */wait(NULL);sleep(20);fork(); /* 3. */sleep(20);return 0;
}
Wann sind welche Prozesse im System?
30 / 34
fork(), exec() und wait() zusammen: eine Shell
Eine Shell tut im Prinzip nichts weiter als:1: loop2: Kommando→ von stdin einlesen3: fork()4: Sohnprozess überlagert sich selbst mit Kommando &&
Vater wartet auf die Beendigung des Sohnes5: end loop
Beispiel: minishell.c (extern, da zu groß)
31 / 34
Windows: CreateProcess()
I keine Verwandtschaft zwischen Prozessen→ keineHierarchie
I legt neuen Adressraum an (→ neuer Prozess)I startet in diesem einen Thread, der das angegebene
Programm ausführtI gewissermaßen Hintereinanderausführung von fork()
und exec()
BOOL CreateProcess (LPCTSTR lpApplicationName, // pointer to name of executable moduleLPSTR lpCommandLine, // pointer to command line stringLPSECURITY_ATTRIBUTES lpProcessAttributes,LPSECURITY_ATTRIBUTES lpThreadAttributes,BOOL bInheritHandles, // handle inheritance flagDWORD dwCreationFlags,LPVOID lpEnvironment, // pointer to new environment blockLPCTSTR lpCurrentDirectory, // pointer to current directory nameLPSTARTUPINFO lpStartupInfo,LPPROCESS_INFORMATION lpProcessInformation
);
32 / 34
Ist das alles zu Aktivitäten?
Mitnichten!
I vfork(), clone(), . . .I ThreadsI Coroutinen und FibersI KommunikationI Synchronisation
33 / 34
Was haben wir gelernt?
1. Begriff des Prozesses2. Zustände und Transitionen zwischen ihnen3. Prozesserzeugung in Unix mittels fork()4. Überlagerung des Prozessabbilds mittels exec()5. Methoden der Prozessbeendigung6. einfache Synchronisation mittels wait()
34 / 34
Vorlesung Betriebssysteme IThema 6: Kommunikation
Robert Baumgartl
9. Februar 2015
1 / 38
Einige Gedanken
Kommunikation = Übertragung von Informationen zwischenAktivitäten
I meist mit Synchronisation (d. h., zeitlicher Koordination)verbunden
I Synonym: Inter Process Communication (IPC)I Vielzahl an Mechanismen, „historisch gewachsen“I Teilnehmer benötigen gemeinsam genutzte RessourceI Identifikation/Authentisierung der Teilnehmer erforderlich
2 / 38
Beispiele für IPC-Mechanismen (Auswahl)
I DateiI PipeI SignalI benannte Pipe (FIFO)I SocketI gemeinsam genutzer Speicher (Shared Memory)I NachrichtenI MailboxenI speichereingeblendete Datei (memory-mapped File)I entfernter Prozeduraufruf (Remote Procedure Call)I ClipboardI . . .
3 / 38
Kategorisierung von IPC-Mechanismen
Interprozeßkommunikation (IPC)
Synchronisation Kommunikation
speicherbasiert strombasiert nachrichtenbasiertSemaphore Signale
Shared Memory Pipe
Named Pipe
Message Passing
Message Queue
4 / 38
Kommunikationsbeziehungen
Anzahl der Teilnehmer:I 1:1I 1:mI n:1I n:m
Gleichzeitigkeit von Hin- und Rückkanal:I unidirektionalI bidirektional
weitere Aspekte:I lokale vs. entfernte KommunikationI direkte vs. indirekte Kommunikation
5 / 38
Synchrone und Asynchrone Kommunikation
Sendeoperation (Send)I synchron: Sender wartet (blockiert), bis Empfänger die
Information entgegengenommen hat (implizite Quittung)I asynchron: Sender setzt nach dem Senden einer
Nachricht sofort seine Arbeit fort („No-Wait-Send“, „Fireand Forget“); Beispiel: Telegramm
Empfangsoperation (Receive)I synchron: Die Empfangsoperation blockiert den
Empfänger so lange, bis Information eintrifft.I asynchron: Empfänger liest Information, falls empfangen
wurde und arbeitet anschließend weiter, auch wenn nichtsempfangen wurde
6 / 38
Synchrone vs. Asynchrone Operationen
synchrone Operationen:I direkte Zustellung der Informationen (ohne
Zwischenspeicher)I implizite EmpfangsbestätigungI i. a. einfacher zu programmierenI standardmäßig arbeiten Kommunikationsoperationen in
Unix synchronasynchron:I Nachricht muss zwischengespeichert werdenI Vorteil: wenn ein kommunizierender Prozess abbricht,
dann wird der Partner nicht unendlich blockiertI kein Deadlock möglich (gegenseitige Blockierung infolge
fehlerhafter Programmierung)I Benachrichtigung des Empfängers u. U. kompliziert
7 / 38
Verbindungsorientierte und verbindungsloseKommunikation
verbindungsorientiert verbindungslos3 Phasen: 1 Phase:
Ablauf Aufbau der VerbindungDatenübertragung Datenübertragung
Abbau der Verbindung(analoges) Telefon Telegramm
Beispiele TCP IPPipe Signal
8 / 38
Verbindungsarten
Unicast Punkt-zu-Punkt-Verbindung, Direktverbindung, 2Teilnehmer
Multicast 1 Sender, mehrere (aber nicht alle) Empfänger,Gruppenruf
Broadcast 1 Sender, alle Empfänger (z. B. eines Subnetzes)
9 / 38
Kommunikation über Datei
I ältester IPC-MechanismusI Sender schreibt Daten in DateiI Empfänger liest Daten aus DateiI nachteilig: zweimaliger Zugriff auf MassenspeicherI aber: es gibt auch Dateisysteme im RAMI nachteilig: überlappender Zugriff durch Sender und
EmpfängerI Lösung: Sperren der Datei (File Locking), z. B. mittelslockf()
I Beispiel: filelock.c (extern)I Problem: Sperren setzt Wohlverhalten voraus
10 / 38
Kommunikation mittels Pipe („Röhre“)
int pipe(int filedes[2]);
I liefert Feld von 2 Dateideskriptoren zurück (einer zumLesen, einer zum Schreiben)
I Zugriff wie auf eine Datei (read(), write(), close()),jedoch kein open(), lseek()
I Datenübertragung innerhalb eines Prozesses sinnlos?!I Woher weiß Empfänger, dass die Pipe existiert?
11 / 38
Vorgehensweise
1. Prozess ruft pipe()→ Pipe wird durch BS angelegt.2. Prozess ruft fork() (Deskriptoren werden vererbt!).3. Jeder Prozess schließt einen seiner Deskriptoren.
(Verständigung erfolgt)4. Datenübertragung mittels read() bzw. write()5. Beide Prozesse rufen close()→ Pipe wird nach zweitem
close() durch BS vernichtet
12 / 38
Veranschaulichung der Pipe-Erstellung
R W
fd[0] fd[1]
R W
fd[0] fd[1]
1
2
3
W R
4
fork()
fd[1] fd[0]
π π1 2
W
fd[1]fd[0]
R
Daten
13 / 38
Eigenschaften der Pipe
I stets unidirektional (→ für bidirektionale Übertragung 2Pipes nötig)
I keine Synchronisation beim Schreiben (Daten werden imKern gepuffert)
I Schreiboperationen, die weniger als PIPE_BUF1 Datenumfassen, müssen atomar (in einem Rutsch) erfolgen.
I keine persistente Ressource (verschwindet nach letztemclose())
I nur zwischen verwandten Prozessen möglich!
1Linux gegenwärtig: 4096 Bytes; vgl. limits.h14 / 38
Pipe: problematische Situationen
I Lesen von einer eröffneten Pipe, die keine Daten enthält,blockiert. Wird danach die Schreibseite geschlossen, kehrtread() mit Resultat 0 zurück.
I Leseoperation aus Pipe mit ungültigem Filedeskriptor –liefert Fehler EBADF (Bad File Descriptor)
I Leseoperation aus Pipe, die nach Schreibvorganggeschlossen wurde – liefert zunächst Daten, dann 0 alsResultat =̂ End of File (EOF)
I Schreiboperation auf Pipe, deren Leseseite geschlossen –liefert Signal SIGPIPE an schreibenden Prozess
I Prozess(e) enden mit eröffneter Pipe – Filedeskriptorenwerden bei Prozessbeendigung automatisch geschlossen
Literatur: man 7 pipe
15 / 38
Anwendungsbeispiel
Pipe-Operator (‘|’) der Shell zur Verknüpfung von stdout desSenders mit stdin des Empfängers:
robge@ipaetz2:~$ du | sort -n -r | less
Beispiel 2: simplepipe.c (extern)
16 / 38
Putting it all together: popen()
FILE *popen(const char *cmd, const char *type);
I legt eine Pipe an, forkt den rufenden Prozess und ruft imKind eine Shell auf, die cmd ausführt
I Resultat: Zeiger auf I/O-Strom, derI mit stdin von cmd verbunden ist, wenn type == "w"
oderI mit stdout von cmd verbunden ist, wenn type == "r".I Lese- oder Schreiboperation geschehen also mit Pipe, die
mit ge-fork()-tem Prozess cmd verbunden istI muss mit pclose() geschlossen werdenI erleichtert Kommunikation C-Programm↔
Shellkommando
Beispiel: popen.c (extern)
17 / 38
Signale
I Mittel zur Signalisierung zwischen Prozessen bzw. BS undProzessen
I Übermittlung einer Information, ohne dass Prozess aktivbeteiligt
I Ursprung: UNIXI Generierung→ Zustellung→ Behandlung (Reaktion auf
Signal)I jedes Signal hat Nummer, Name, DefaultaktionI meist (aber nicht immer) keine DatenübertragungI Verwandschaft der Partner ist nicht notwendig
18 / 38
Signale – Prinzipieller Ablauf
1. Sende-Prozess generiert ein Signal2. System stellt das Signal dem Empfänger-Prozess zu3. Wenn Empfänger Signalhandler installiert hat→ Aufruf
des Signalhandlers (asynchron zur Programmausführung)4. Wenn kein Signalhandler installiert→ Ausführung der
Default-Aktion (z. B. Abbruch, Ignorieren)
19 / 38
Signale unter Unix (Übersicht)
Name Def.-Aktion SemantikSIGHUP Abbruch Verbindung beendet (Hangup)SIGINT Abbruch CTRL-C von der TastaturSIGILL Abbruch Illegale Instruktion
SIGKILL Abbruch Sofortige BeendigungSIGSEGV Coredump Segmentation ViolationSIGPIPE Abbruch Schreiben in ungeöffnete Pipe
SIGCHLD Ignoriert Kind-Prozess beendetSIGSTOP Stop Anhalten des ProzessesSIGTSTP Stop CTRL-Z von der TastaturSIGCONT Fortsetzen eines angehaltenen Prozesses
Tabelle: Auswahl von Signalen nach POSIX
vollständige Übersicht: man 7 signal
20 / 38
Senden von Signalen an der Kommandozeile
Senden mit dem (externen) Kommando kill:
robge@hadrian:~$ while true ; do echo -n; done &[1] 6578robge@hadrian:~$ kill -SIGQUIT 6578[1]+ Verlassen while true; doecho -n;done
Generierung bestimmter Signale auch mit der Tastatur möglich:
Signal erzeugende TastaturkombinationSIGINT Ctrl-C
SIGQUIT Ctrl-4 oder Ctrl-\SIGTSTP Ctrl-Z
21 / 38
Signale in der Bash
Einrichtung eines Signalhandlers mittels trap
#!/bin/bashtrap "echo CTRL-C gedrà 1
4ckt. Na fein." SIGINTtrap "echo CTRL-Z gedrà 1
4ckt. Mach ruhig weiter so."SIGTSTP
trap "echo Auch SIGQUIT kann mir nix anhaben."SIGQUIT
echo Entering loopwhile true ; do echo -n ; done
Handler wirdI (asynchron) angesprungen,I ausgeführt, undI es wird am Unterbrechungspunkt fortgesetzt.
Handler darf nur (externe) Kommandos enthalten, keineBash-Instruktionen.
22 / 38
Noch ein Bash-Beispiel
laufschrift.c (extern)
Probieren Sie:
robge@hadrian:~$ ps x | grep "./laufschrift"5341 pts/5 S+ 0:00 ./laufschrift5343 pts/0 S+ 0:00 grep ./laufschrift
robge@hadrian:~$ kill -SIGSTOP 5341robge@hadrian:~$ kill -SIGCONT 5341robge@hadrian:~$ kill -SIGSTOP 5341usw.
23 / 38
Signale in C – Teil 1: Senden
int kill(pid_t pid, int sig);I sendet das durch sig spezifizierte Signal an Prozess mit
PID pid
I Zuvor wird geprüft, ob der ausführende Nutzer dazuberechtigt ist.
I Spezifikation des Signals: SIGHUP, SIGQUIT, SIGKILLusw., vgl. Headerdatei bits/signum.h
I wenn pid == -1, dann wird das betreffende Signal anjeden Prozess geschickt, für den der Nutzer dieses Rechthat (Vorsicht!)
24 / 38
Was passiert nun bei Zustellung eines Signals?
Behandlung bei Zustellung:I nichtabfangbares Signal (KILL, STOP)→ zugeordnete
Aktion {Abbruch, Stop} wird ausgeführtI abfangbares Signal: wenn kein Signalhandler installiert→
Default-Aktion {Abbruch, Stop, Ignorieren} ausgeführtI wenn entsprechender Handler installiert→ Handler wird
(asynchron zur Programmausführung) aufgerufenAnmerkungen:I abfangbares Signal kann auch ignoriert werden
25 / 38
Signale in C – Teil 2: Installation eines Signalhandlers
void (*signal(int signum, void (*handler)(int)))(int);
fieses Konstrukt; Analyse:I signal() ist ein SystemrufI übernimmt 2 Parameter:
I signum – Nummer des Signals, für das ein Handlerinstalliert werden soll
I handler – Zeiger auf eine Funktion, die einen Integerübernimmt und nichts zurückliefert
I Rückgabewert: Zeiger auf eine Funktion, die einen Integerübernimmt und nichts zurückliefert (genauso wiehandler())
26 / 38
Was bedeutet das?
I Handler ist die Funktion, die angesprungen wird, sobalddas entsprechende Signal zugestellt wird
I Parameter des Handlers ist die (konkrete) Nummer desSignals, da es jederzeit möglich ist, einen Handler fürverschiedene Signale zu installieren
I Resultat:I SIG_ERR bei FehlerI ansonsten Zeiger auf den vorherigen Handler
I Anstatt des Handlers kann auch übergeben werden:I SIG_IGN→ Signal soll ignoriert werdenI SIG_DFL→ Default-Aktion wird eingestellt.
27 / 38
Beispiel 1: Handler für SIGINT (Ctrl-C)#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <signal.h>
long inc = 1;
void ctrl_c_handler (int c){inc = ( (inc==1) ? -1 : 1);return;
}
int main(void){long count;sig_t ret;
ret = signal(SIGINT, (sig_t) &ctrl_c_handler);if (ret == SIG_ERR) {perror("signal");exit(EXIT_FAILURE);
}
/* output count continuously */for (count=0; ; count+=inc) {printf("%08li\n", count);
}exit(EXIT_SUCCESS);
}
(signalhandler.c)28 / 38
Weitere Beispiele zu Signalen
I Signal bei Ende eines Kindprozesses: sigchld.c (extern)I Redefinition des Handlers im Handler: catch_ctrl_c.c
(extern)I Selbstabbruch nach definierter Zeitspanne: alarm.c
(extern)
29 / 38
Zwischenfazit: Signale unter POSIX
4 „klassische“ Funktionen:I kill()
I signal()
I pause() - wartet (passiv) auf ein SignalI alarm() - definiert eine Zeitspanne, bis SIGALRM
zugestellt wird („Der Wecker klingelt.“)
30 / 38
Nachteile und Unzulänglichkeiten von Signalen
I unzuverlässigI keine NutzdatenübertragungI keine PriorisierungI keine Speicherung (in Warteschlange)
modernere (aber kompliziertere) Signalbehandlung:sigaction(), sigprocmask() & Co.
31 / 38
Gemeinsam genutzter Speicher (Shared Memory)
I Idee: Kommunikation über gemeinsamen SpeicherI keine implizite Synchronisation (!)I ohne Adressräume problemlos implementierbarI bei virtuellem Speicher Funktionen des BS nötig:
I Anlegen des SegmentesI Einblenden in beide AdressräumeI (Datenübertragung)I Ausblenden aus allen AdressräumenI Zerstören des Segments
I Zugriff auf gemeinsam genutzten Speicher über Zeiger,überlagerte Datenstrukturen (→ effizient), kein Systemrufnötig
I UNIX: shmget(), shmat(), shmdt(), shmctl()I Segmente sind i.a. persistent (überleben den anlegenden
Prozess)
32 / 38
Nachrichtenaustausch (Message Passing)
Prinzip1. Sender konstruiert Nachricht und trägt diese in einen
Puffer ein2. Sender ruft Funktion send()
3. Nachricht wird durch das System transportiert4. Empfänger ruft Funktion receive(), der er einen Puffer
übergibt, in den die Nachricht kopiert wirdAnalogie: Briefsendung
33 / 38
Nachrichtenaustausch (Message Passing)
DiskussionI notwendig, wenn kein gemeinsamer Speicher existiert
(z. B. in verteilten Systemen)I jedoch auch mit gemeinsamem Speicher möglich
(z. B. Unix)I zwei grundlegende Operationen: send(), receive()I synchrone und asynchrone Operation möglich
Beispiele:I Message Passing Interface (MPI)I Nachrichtenwarteschlangen POSIX (msgrcv(),msgsnd() usw.)
34 / 38
Synchroner und asynchroner Nachrichtenaustausch
π 1 π 2
send()
receive()
π 1 π 2 π 1 π 2
Zeit
receive()
send()
send()
receive()
I. II. III.
Abbildung: I./II. – blockierend, III. nichtblockierend (asynchron)
35 / 38
Kommunikation über Sockets
. . . in der LV „Rechnernetze“
36 / 38
Was haben wir gelernt?
1. Was sind IPC-Mechanismen?2. ausführlich kennengelernt:
I Datenaustausch mittels DateiI die „klassische“ Unix-PipeI Signale (zumindest in der Bash)
3. kurz angerissenI Shared MemoryI Message Passing
4. nicht behandeltI SocketsI named Pipes
37 / 38
Testfragen
1. Beschreiben Sie den Ablauf bei der Zustellung einesSignals!
2. Was ist der Unterschied zwischen synchronem undasynchronem Senden beim Message Passing?
3. Entwerfen Sie ein C-Programm, das einen Sohn erzeugtund diesem mittels einer Pipe eine Nachricht zukommenlässt!
4. Welchen Kommunikationsmechanismus würden Sieeinsetzen, wenn Sie Daten übertragen müssen und dieTeilnehmer nicht verwandt sind?
5. Was ist ein persistenter Kommunikationsmechanismus?
38 / 38
Vorlesung Betriebssysteme IThema 7: Zuteilung des Prozessors
Robert Baumgartl
27. Januar 2015
1 / 33
Prozessorzuteilung (Scheduling)
I = Beantwortung der Frage:„Welche Aktivität soll zu einem bestimmtenZeitpunkt abgearbeitet werden (und für wielange)?“
I Komponente im Betriebssystem: der Scheduler (Planer)I Verfahren zur Ermittlung einer Abarbeitungsplans
(Schedule)
2 / 33
Typische Zielgrößen
Je nach betrachteter Systemklasse (z. B. Batchsysteme,Interaktive Systeme, Echtzeitsysteme) existieren verschiedenezu optimierende Parameter:I mittlere Reaktionszeit aller ProzesseI mittlere Verweilzeit aller Prozesse (turnaround time)I maximale CPU-AusnutzungI maximale Anzahl gleichzeitiger DatenströmeI Garantie einer maximalen ReaktionszeitI Fairness: n Prozesse→ jeder 1/n der ProzessorzeitI Quality-of-Service (QoS): „Jeder bekommt so viel, wie er
bezahlt hat.“I Ausschluss des Verhungerns einzelner Prozesse
3 / 33
Planung anderer Ressourcen
Außer dem Prozessor können (müssen aber nicht) diefolgenden Ressourcen geplant werden:I Hauptspeicher,I Aufträge an den Massenspeicher,I Kommunikationsbandbreite,I InterruptsI . . .
Beispiel: Linux besitzt einen sog. I/O-Scheduler, derFestplattenaufträge plant (d. h. , ggf. umsortiert).
4 / 33
Beispiel: Schedulingebenen in einem Batch-System
CPU
Haupt−
speicher
Disk
Admission
Scheduler
Scheduler
CPU
Memory
Scheduler
Input Queue
Arriving Job
Quelle: Andrew Tanenbaum, Modern Operating Systems. 2000,S. 141
5 / 33
Off-Line- vs. On-Line-Verfahren
Off-LineI komplette Ermittlung des Abarbeitungsplans vor
Inbetriebnahme des SystemsI Zur Laufzeit des Systems wird der vorbereitete Plan
abgearbeitet (keine Entscheidungen mehr notwendig).I inflexibelI sehr hohe Auslastung möglichI Startzeitpunkte, Ausführungszeiten, Abhängigkeiten aller
Aktivitäten müssen a priori bekannt sein.I z. B. bei autonomen oder Echtzeit-SystemenI situationsspezifische Pläne möglich, System unterscheidet
mehrere Modi
6 / 33
Off-Line- vs. On-Line-Verfahren
On-LineI Auswahl des jeweils nächsten abzuarbeitenden Prozesses
erfolgt zur Laufzeit des Systems.I Flexibel: System kann auf Änderungen verschiedener
Parameter, Umwelteinflüsse, Nutzeranforderungenreagieren
I keine Zeit für langwierige Auswahlverfahren→Kompromiss zwischen Optimalität des ausgesuchtenProzesses und Dauer für die Entscheidung notwendig.
Typische interaktive Betriebssysteme wie Windows oder Linuxplanen on-line.
7 / 33
Beispiel für Off-Line-Scheduling
Ein (nicht näher spezifiziertes) Rechensystem bestehe aus 3Prozessen, die wiederum aus den folgenden unabhängigenTeilprozessen bestehen (benötigte Rechenzeit in Klammern):
P1 : { p11(3), p12(2), p13(2), p14(5) }P2 : { p21(5), p22(7) }P3 : { p31(5), p32(2) }
Außerdem bestehen die folgenden expliziten zeitlichenAbhängigkeiten zwischen den Teilprozessen:
p21 vor p12, p12 vor p22, p13 vor p31,p14 vor p32, p22 vor p32.
Darüberhinaus müssen die Teilprozesse ein- und desselbenProzesses hintereinander liegen.
8 / 33
Präzedenzgraph
Die zeitlichen Abhängigkeiten veranschaulicht man am bestenin einem Präzedenzgraphen:I einen Knoten für jeden TeilprozessI eine Kante zwischen zwei Knoten genau dann, wenn der
erste Knoten beendet sein muss, bevor der zweitegestartet werden darf
3
p
p
p
21
5
2
12
13
2
22
7
14
5
31
5 32
2
11p
p
p
p
p
Abbildung: Präzedenzgraph des Beispielprozesssystems
9 / 33
Ableitung eines Schedules (off-line)
Verfahren:1. Bildung der Bereit-Menge B (enthält alle Prozesse, die
abgearbeitet werden können)2. Auswahl von n Prozessen aus B (n ist die
Prozessoranzahl, im einfachsten Falle also 1) nachvorgegebenem Kriterium (z. B. „den kürzesten Prozesszuerst“)
3. Planung der ausgewählten Prozesse für bestimmteZeitspanne (im einfachsten Falle: für eine Zeiteinheit)
4. Falls noch nicht alle Prozesse geplant sind→ Goto 15. Stop
10 / 33
Anwendung auf Beispieltaskmenge
I n = 2 (z. B. Dualcore-Prozessor)I Auswahl des jeweils kürzesten Prozesses (Shortest Job
Next)I Abarbeitung ohne Unterbrechung, wenn einmal gestartet
(Run-to-Completion)
Zeit B Auswahl0 p11,p21 p11,p21
3 (p21) (p21)5 p12 p12
7 p13,p22 p13,p22
9 p14,p31 p14
14 p31 p31
19 p32 p31
Tabelle: Schedulingzeitpunkte für Beispiel
11 / 33
Resultierender Schedule
0 2 4 6 8 10 12 14 16 18 20 22
p21
p11 p12 p13
p22
p14 p31 p32P1
P2
Abbildung: Off-Line Schedule für Beispieltaskmenge und ohneUnterbrechungen
I Resultat: Gantt-Diagramm (benannt nach demUnternehmensberater (!) Henry L. Gantt)
I Komplettierung des letzten Teilprozesses zu t = 21I Prozessoren nicht voll ausgelastet (idle time); Ursache:
Präzedenzen zwischen Teilprozessen
12 / 33
Zeitgesteuertes Scheduling
I alle Abläufe im System erfolgen in festem zeitlichenRahmen, periodisch
I keine Interrupts→ keine unvorhergesehenen AktivitätenI Kommunikation mit externe Komponenten: Abfragen
(Polling)I typisch für autonome und EchtzeitsystemeI Nutzung von off-line ermittelten Schedules, zwischen
denen umgeschaltet werden kann (Moduswechsel)I Beispiel: Medienzugriffsverfahren Time Division Multiple
Access (TDMA)
13 / 33
Time Division Multiple Access
Prinzip:I Übertragungszeit wird in (unendlich viele) Perioden fester
Länge aufgeteiltI innerhalb jeder Periode erhält jeder (potentielle)
Kommunikationsteilnehmer 1/n der Periodenlänge, einensog. Slot
I in seinem Slot kann jeder senden oder nichtI → keine Kollisionen möglich
t1 2 3 4 5 6 7
Slot
Periode
0
Prozess sendet nicht.
...
14 / 33
Ereignisgesteuertes Scheduling
Prinzip:I System reagiert auf Einflüsse von außen (Interrupts)I Aktivitäten werden als Reaktion auf Interrupts bereitI prinzipiell keine Garantie von Ausführungszeiten möglich,
da Auftrittszeitpunkte von Interrupts nicht vorhersehbarI typisch für interaktive SystemeI Beispiel: Grafische Benutzeroberflächen (Ereignisse:
Mausbewegung, Klick, Tastendruck, aber auch Interruptdurch die Netzwerkkarte)
15 / 33
Was passiert denn eigentlich beim Interrupt?
Instruktion n
Instruktion n+1
Instruktion n+2
Instruktion 2
Instruktion 1
IRET
Interrupt
Interruptservice−Prozess
Routine (ISR)
Abbildung: Ablauf einer Interruptbehandlung (vereinfacht)
I Interrupts sind asynchron zum ProgrammablaufI Quellen: Geräte (I/O), Programm, Betriebssystem
16 / 33
Interrupt: Ablauf in der CPU
Device controller orother system hardwareissues an interrupt
Processor finishesexecution of currentinstruction
Processor signalsacknowledgmentof interrupt
Processor pushes PSWand PC onto controlstack
Processor loads newPC value based oninterrupt
Save remainder ofprocess stateinformation
Process interrupt
Restore process stateinformation
Restore old PSWand PC
Hardware Software
Figure 1.10 Simple Interrupt Processing(William Stallings: Operating Systems. 6th ed., Pearson, 2009)
17 / 33
Schedulingzeitpunkt beim On-Line Scheduling
Unterbrechung eines aktiven Prozesses:I durch das BS, (prinzipiell) jederzeit (präemptives
Multitasking):I wenn ein Prozess blockiert (z. B. an Ressource),I wenn ein Prozess bereit wird (z. B. als Reaktion auf einen
Interrupt oder durch eine Ressourcenfreigabe),I wenn ein Prozess endet.
I durch das BS, jedoch nur an bestimmten Stellen,sogenannten Preemption Points
I freiwillig, an bestimmten Stellen, z. B. Systemruf(kooperatives Multitasking)
I nach Komplettierung einer Aktivität (run-to-completion)
18 / 33
Prioritäten und Priorisierung
I (gewollt) unfair, Prozesse besitzen unterschiedlicheWichtigkeit
I einfachste Möglichkeit: Fixed External Priorities (FEP))I d. h. , jeder Prozess erhält vor der Laufzeit des Systems
einen Parameter fest zugeordnet, der seine Wichtigkeitausdrückt, seine Priorität
I zur Laufzeit wird stets der höchstpriorisierte unter allenbereiten Prozessen ausgewählt
19 / 33
Prioritäten zum zweiten
Implizite Prioritäten: ein bestimmter Parameter jedesProzesses wird „zweckentfremdet“ zur Bestimmung derPriorität herangezogen.Beispiele:I Länge des JobsI verbleibende AbarbeitungszeitI Zeit seit letzter AktivierungI Deadline (Zeit bis zur unbedingten Komplettierung)
20 / 33
Statische und dynamische Prioritäten
Statisch: Priorität eines Prozesses ist konstant.I einfacher SchedulerI gut zu analysierenI nicht besonders flexibel (was ist, wenn sich die Wichtigkeit
eines Prozesses ändert?)Dynamisch: Priorität eines Prozesses ändert sich mit der Zeit.I periodische Neuberechnung (Aufwand!)I erlaubt situationsspezifische AnpassungenI schwieriger zu analysieren
21 / 33
Uniprozessor- vs. Multiprozessor-Scheduling
I zusätzlich nötige Entscheidung, wo Prozess abgearbeitetwird
I Ziel: Load BalancingI zu starr: möglicherweise schlechte Ausnutzung der
ProzessorenI zu flexibel: häufiger Wechsel des Prozessors (Thrashing)→ sehr hoher Overhead
I ideal: auf einem unbeschäftigten Prozessor fortsetzenI günstig: Prozessor, auf dem der Prozess unterbrochen
wurde (Cache, TLB)I Parameter Affinität des Prozesses zu einem bestimmten
Prozessor
22 / 33
Round Robin – Zeitscheibenverfahren
Idee: Jeder Prozess erhält den Prozessor für eine bestimmteZeitspanne (Quantum tq), dann ist der nächste dran.
I Grundgedanke: FairnessI tq klein→ Umschaltaufwand im Verhältnis zur Nutzarbeit
groß, kleine Reaktionszeit pro ProzessI tq groß→ relativer Umschaltaufwand klein, Reaktionszeit
pro Prozess großI wichtiger Parameter: Umschaltzeit tcs (Context Switch
Time)I Reaktionszeit eines Prozesses abhängig von tcs, Anzahl
Prozesse, tqI häufig Kombination mit Prioritäten (RR innerhalb einer
Prioritätsklasse)
23 / 33
Veranschaulichung Round-Robin
P1P1
cst
t q
rspt
2P 3P... ...
Abbildung: Parameter beim Zeitscheibenverfahren
24 / 33
Beispiel: Einfache Batch-Verfahren
First In First Out (FIFO, FCFS)I Prozesse werden in der Reihenfolge ihres Eintreffens
(vollständig abgearbeitet)I fairI leicht zu analysieren (→Warteschlangentheorie)
Shortest Job Next (SJN)I Idee: schnell ein paar kurze Jobs fertigstellen, bevor alle
auf einen langen Job warten müssen.I Prozess mit der kürzesten Dauer wird ausgewählt,
run-to-completionI Ausführungszeit muss bekannt seinI minimiert mittlere Verweilzeit (tv ) und mittlere Wartezeit
(tw )I ungerecht, Verhungern möglich
25 / 33
Beispiel zu SJN
4 Beispieltasks:
Job DauerJ1 6J2 8J3 7J4 3
J4 J1 J3 J2
0 3 9 16 24
Abbildung: Resultierender SJN-Schedule
tw =0 + 3 + 9 + 16
4= 7 tv =
3 + 9 + 16 + 244
= 13
26 / 33
Unix
I zeitscheibengesteuert (Quantum)I versucht, 2 Klassen von Prozessen zu unterscheiden und
getrennt zu behandeln:1. interaktive („I/O-bound“)2. (vorwiegend) rechnende („compute-bound“)
I Rechnende Prozesse nutzen ihre Zeitscheibe voll ausI Interaktive Prozesse nutzen ihre Zeitscheibe häufig nicht
aus (warten auf Interaktion durch Nutzer oder Gerät; d. h.blockieren häufig)
I wenn Zeitscheibe nicht ausgenutzt, wird Priorität (leicht)erhöht→ Unix bevorzugt interaktive Prozesse:
I interaktive Prozesse reagieren besserI rechnende Prozesse werden etwas benachteiligt
27 / 33
Linux?
I dynamische Prioritäten mit ZeitscheibenI genaues Verfahren ziemlich kompliziertI jeder interaktive Prozess besitzt einen sog. nice-ValueI dieser beschreibt, wie der betreffende Prozess im
Vergleich zu anderen interaktiven Prozessen priorisiertwird
I -20: höchste PrioritätI 0: defaultI 19: niedrigste Priorität
I Kommandos nice und renice (für bereits laufendeProzesse) ändern diesen Wert
~> renice 20 -p 2419524195: old priority 0, new priority 19
Achtung: normale Nutzer dürfen Priorität nur monoton ändern.
28 / 33
Anzeige Priorität und nice-Wert mittels top
top - 14:31:23 up 3:28, 6 users, load average: 1.68, 0.67, 0.30Tasks: 91 total, 4 running, 87 sleeping, 0 stopped, 0 zombieCpu(s): 42.1%us, 44.7%sy, 13.2%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%stMem: 256396k total, 239564k used, 16832k free, 31364k buffersSwap: 1048568k total, 84k used, 1048484k free, 100936k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND3735 root 16 0 161m 12m 4400 R 50.9 4.9 3:08.68 Xorg
24194 robge 15 0 7404 3216 2244 S 26.6 1.3 1:59.25 xterm24195 robge 39 19 5672 2636 1412 R 15.6 1.0 2:08.29 bash23793 robge 15 0 9640 5808 4272 S 6.0 2.3 0:01.57 WindowMaker23928 robge 15 0 7408 3260 2264 R 0.3 1.3 0:01.82 xterm
1 root 15 0 1948 648 552 S 0.0 0.3 0:01.14 init2 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/03 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/04 root 10 -5 0 0 0 S 0.0 0.0 0:00.08 events/05 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 khelper6 root 11 -5 0 0 0 S 0.0 0.0 0:00.00 kthread9 root 17 -5 0 0 0 S 0.0 0.0 0:00.00 kblockd/0
10 root 19 -5 0 0 0 S 0.0 0.0 0:00.00 kacpid104 root 10 -5 0 0 0 S 0.0 0.0 0:00.02 kseriod138 root 15 0 0 0 0 S 0.0 0.0 0:00.01 pdflush139 root 15 0 0 0 0 S 0.0 0.0 0:00.08 pdflush140 root 10 -5 0 0 0 S 0.0 0.0 0:01.04 kswapd0
29 / 33
Scheduling in Windows 2000/XP/Vista
I prioritätsgesteuert, präemptiv
31
16
15
1
0
"real−time" levels
variable levels
system level
Abbildung: Prioritätsstufen im Windows 2000/XP
30 / 33
Scheduling in Windows 2000/XP/Vista
I Round-Robin bei Threads gleicher PrioritätI Länge des Quantums differiert für Desktop- und
Server-Variante (Server: 6fach länger!)I Quantum wird für Vordergrundthreads verdoppeltI temporäre Prioritätsanhebung (Priority Boost) in den
Levels 1-15 u. a. beiI Komplettierung einer I/O-OperationI Fensterthreads, die in den Vordergrund gelangen,I Gefahr des Verhungerns.
31 / 33
Prinzip des Priority Boost
tq
prioritätBasis−
Priorität
aktiv wartend aktiv preempted aktiv
Zeit
32 / 33
Was haben wir gelernt?
1. on-line vs. off-line Scheduling2. zeitgesteuertes vs. ereignisgesteuertes Scheduling3. Interrupts4. kooperatives vs. präemptives Multitasking5. statische vs. dynamische Prioritäten6. Round Robin; Einfluss der Zeitscheibenlänge7. Priority Boost
33 / 33
Vorlesung Betriebssysteme IThema 8: Threads (Aktivitäten, die zweite)
Robert Baumgartl
28. 01. 2014
1 / 22
Threads (Leichtgewichtsprozesse)
I Prozess = Container für Ressourcen + (ein)identifizierbarer Handlungsablauf (“Thread of Execution”)
I Idee: Trennung beider Konzepte:I Prozess = Container für Ressourcen (passiv)I Thread = identifizierbarer unabhängiger Handlungsablauf
(aktiv)I → ein oder mehrere Threads pro Prozess möglich, diese
teilen sich die Ressourcen des ProzessesI → parallele Abarbeitung innerhalb eines Adressraums
Der Begriff „Thread“ ist auch im Deutschen weitestgehendetabliert, die korrekte Übersetzung „Faden“ benutzen nurFanatiker. Eher wird noch „Leichtgewichtsprozess“ eingesetzt.
2 / 22
Veranschaulichung mehrerer Threads
...
...
...
...
...
...
P1
...
...
P3...
...
P2P1
...
...
Abbildung: Übergang von mehreren Prozessen zu mehreren Threadsin einem Prozess
3 / 22
Konsequenzen
I Thread kann nur innerhalb eines Prozesses existieren!I alle Threads eines Prozesses teilen sich dessen
Ressourcen und Adressraum bis auf die Register und denStack
I ⇒ kein Schutz zwischen Threads eines ProzessesI Kooperation im Vordergrund
dem Prozess gehörend jedem Thread gehörendAdressraum Program Counter
Globale Variablen Registereröffnete Dateien Stack (!)
Signale automatische VariablenKindprozesse Globalzustand
Tabelle: Gemeinsame und private Ressourcen von Threads einesProzesses (Beispiele)
4 / 22
Warum Threads?
I feingranulare Parallelität der VerarbeitungI Erzeugung/Vernichtung viel schneller als von ProzessenI effektive Ausnutzung mehrerer CPUs/KerneI Umschaltung zwischen Threads eines Prozesses schnellI Dekomposition in Threads liefert Performancegewinn,
insbesondere wenn Ein-/Ausgabe-beschränkteFunktionalität
Abbildung: Textverarbeitung mit 3 Threads (Tanenbaum: ModernOperating Systems, S.95)
5 / 22
Variante 1: User-Level-Threads
I Threads werden im User Mode (d.h., ohne Interventionund Wissen des Betriebssystems) erzeugt, synchronisiert,vernichtet
I Threadbibliothek, die Routinen zum Erzeugen, Beenden,Synchronisieren und Umschalten von Threads realisiert,erforderlich
I Threadbibliothek übernimmt Management aller Threads(speichert deren Zustandsinformationen)
I Umschaltungvorgang: Sichern und Restaurieren desThread-Kontextes (alle Register)
I kooperatives Programmiermodell: jeder Thread mussfreiwillig (ab und zu) den Prozessor abgeben
I Kernel hat kein Wissen über Threads, kennt (undverwaltet) nur Prozesse
I m:1-Abbildung, d. h. , allen Threads ist genau eineKernel-Aktivität zugeordnet, nämlich der zugehörigeProzess
6 / 22
Veranschaulichung von User-Level-Threads
...
...
...
...
...
...
...
...
P1
Thread Library
T1 T2 T3
User Mode
Kernel Mode
Abbildung: User-Level-Threads
7 / 22
User-Level-Threads, cont’d
Bewertung:+ kann (auch) für Betriebssystem implementiert werden,
welches kein Threadkonzept kennt (z. B. MS-DOS)+ Threadoperationen besonders schnell, da kein
Kernein-/austritt, kein Flush der Prozessorcaches, keinAdressraumwechsel
– blockierender Systemruf blockiert alle Threads einesProzesses (verhindert Parallelität), Abhilfe:
? nichtblockierende Systemrufe? im Vorhinein ermitteln, ob Ruf blockieren wird (z. B. mittelsselect()); wenn ja, dann Weiterarbeit eines anderenThreads
– Page Fault blockiert alle Threads eines Prozesses– kooperatives Programmiermodell mit freiwilliger Abgabe
des Prozessors erforderlich (da keine unterbrechendeInstanz aka Betriebssystem)
8 / 22
Variante 2: Kernel-Level-Threads
I 1:1-Abbildung (jedem Thread ist genau eine Aktivität desKernels zugeordnet)
I Threads im Kernel verwaltet, dieser verteilt Threads aufalle existierenden Kerne
I Threadoperationen teurer, da mit Systemruf (~eintritt,~austritt) verbunden (z. B.CreateThread() in Win32)
I Kombinationen aus User-Level- und Kernel-Level-Threadssind ebenfalls möglich
9 / 22
Veranschaulichung von Kernel-Level-Threads
...
...
...
...
...
...
...
...
P1
CPU
T1 T2 T3
User Mode
Kernel Mode
Abbildung: Kernel-Level-Threads
10 / 22
Transition single-threaded→ multi-threaded
Komplexität der Umwandlung traditioneller sequentiellerProgramme in multithreaded applications darf nichtunterschätzt werden!Einige Problemkreise:I globale Systemvariablen, wie errno stehen nur einmal pro
Prozess zur VerfügungI nicht reentranter Code, z. B. in Bibliotheken, muss vor
gleichzeitigem Betreten durch mehrere Threads geschütztwerden
I Signale sind meist prozessspezifischI Management mehrerer Stacks bei User-Level-Threads
11 / 22
Threads in Windows
I Windows-Welt: beginnend ab Windows NT (Win32-API)sind Kernel-Level-Threads im System verankert.
I CreateProcess() legt einen neuen Adressraum an undstartet in ihm einen (ersten) Thread
I mittels CreateThread() können in einem existierendenProzess weitere Threads gestartet werden
I User-Level-Threads existieren zusätzlich: die sogenannten Fibers
I d. h. , es können mehrere User-Level-Threads (Fibers) ineinem Kernel-Level-Thread existieren
12 / 22
Threads in Linux
I ab Kernel 2.0 Bibliothek LinuxThreadsI weitgehend, aber nicht vollständig, POSIX-kompatibelI limitiert (max. Threadanzahl 8192)I nicht allzu performantI daher ab 2002 Entwicklung der Native POSIX Thread
Library (NPTL)I behebt diese Nachteile, voll POSIX-kompatibelI 1:1-Implementierung (1 Thread pro Kernelaktivität)I andere Unixe besitzen u. U. andere
Thread-Implementierungen, die aber stets POSIX-Threadsrealisieren
Abfrage der installierten Thread-Version in Linux:~> getconf GNU_LIBPTHREAD_VERSION
13 / 22
POSIX-Threads (Pthreads)
I POSIX standardisiert ein Thread-API für Unix-artigeBetriebssysteme
I API wird Pthreads genanntI Standard enthält keine Aussage zur Implementierung der
Funktionen (z. B., ob Kernel- oder User-Level-Threadsrealisiert werden sollen)
I man 7 pthreads
I auch für Win32 verfügbar (pthreads-w32)
14 / 22
Pthreads-API – Übersicht
pthread_create() Anlegen eines neuen Threadspthread_join() Warten auf Ende des Threadspthread_exit() Beenden des rufenden Threads
pthread_detach() Abkoppeln vom Vaterpthread_kill() Zustellung eines Signals an Thread
pthread_attr_init() Init der Thread-Attributepthread_mutex_lock()
pthread_mutex_unlock()
}Synchronisation am Mutex
pthread_cond_init() Anlegen einer Bedingungsvariablepthread_cond_wait()
pthread_cond_signal()
}Sync. an Bedingungsvariable
Tabelle: Einige Funktionen der Pthreads-API
15 / 22
Pthreads-Programmierung
I #include <pthread.h>
I Linken mit Schalter -lpthreadI Funktionsnamen beginnen stets mit pthread_I alle Funktionen liefern 0 wenn erfolgreich, -1 bei FehlerI Threads eines Prozesses kommunizieren über
gemeinsame (globale) VariableI IPC nur zu Threads anderer Prozesse
16 / 22
Hello, world mittels Pthreads
# inc lude <pthread . h># inc lude < s t d i o . h># inc lude < s t d l i b . h>
# de f ine MAXITER 200000
void ∗ t h read_ f ( vo id ∗arg ){
p r i n t f ("world!\n" ) ;p th read_ex i t (NULL) ;
}
i n t main ( vo id ){
p thread_t a ;i n t r e t ;
p r i n t f ("Hello, " ) ;r e t = pthread_create (
&a , /∗ p o i n t e r to v a r i a b l e con ta in ing thread ID ∗ /NULL, /∗ p o i n t e r to thread a t t r i b u t e s ∗ /( vo id∗) &thread_f , /∗ thread f u n c t i o n ∗ /NULL) ; /∗ p o i n t e r to argument ∗ /
i f ( r e t != 0) {pe r ro r ("creating 1st thread" ) ;e x i t ( EXIT_FAILURE ) ;
}p th read_ jo in ( a , NULL) ;e x i t (EXIT_SUCCESS) ;
}
17 / 22
Erzeugung eines Threads
int pthread_create(pthread_t *tid, pthread_attr_t
*attr, void* (*start_fkt)(void*), void *arg);
I erzeugt neuen ThreadI *tid: Identifikator des neuen ThreadsI *attr: legt Attribute des Threads festI *start\_fkt: StartfunktionI *arg: Zeiger auf (beliebiges) Datum, welches der Thread
als Parameter erhältI keine Vater-Sohn-Beziehungen; jeder darf create-n und
join-en
18 / 22
Join und Detach
int pthread_join(pthread_t tid, void **ret);
I Analogon zum waitpid(), wartet auf Ende des Threads mitId tid
I Rückgabewert über retI erst nach join() wird der Thread vernichtet (analog
Zombie-Status)
int pthread_detach(pthread_t tid);
I macht den Thread un-join-bar, d.h., er wird sofortvernichtet, wenn er seine Startfunktion verlässt
19 / 22
GNU Portable Threads (GNU Pth)
I User-Level-Threads für UnixI m:1-ImplementierungI http://www.gnu.org/software/pth/I kooperatives Multitasking mit PrioritätenI Linken mit Schalter -lpth
20 / 22
Hello, world! mit GNU Pth
# inc lude <pth . h># inc lude < s t d i o . h># inc lude < s t d l i b . h>
void ∗pth_thread ( vo id ∗arg ){
p r i n t f ("world\n" ) ;p t h _ e x i t (NULL) ;
}
i n t main ( vo id ){
p th_ t t i d ;
i f ( ! p t h _ i n i t ( ) ) {p r i n t f ("No pth lib available\n" ) ;e x i t ( EXIT_FAILURE ) ;
}p r i n t f ("Hello, " ) ;
t i d = pth_spawn (PTH_ATTR_DEFAULT, &pth_thread , NULL) ;i f ( ! t i d ) {
p r i n t f ("Could not spawn thread\n" ) ;e x i t ( EXIT_FAILURE ) ;
}
p t h _ j o i n ( t i d , NULL) ;
r e t u r n 0 ;}
21 / 22
Was haben wir gelernt?
I Threads sind eine Abstraktion zur effizientenParallelisierung von Programmabläufen.
I Kernel-Level-Threads↔ User-Level-ThreadsI Windows bringt beide Arten „von Haus aus“ mitI wichtigste Implementierung unter Unix/Linux: PthreadsI pthread_create() startet einen neuen ThreadI pthread_exit() beendet einen Thread (oder: Verlassen
der Threadfunktion)
22 / 22