Betriebssysteme - Institut für Verteilte Systeme

Transcription

Betriebssysteme - Institut für Verteilte Systeme
Blätter zur Vorlesung
Betriebssysteme
Sommersemester 2003
Dr. Michael Schöttner
Fakultät für Informatik, Verteilte Systeme
Universität Ulm
1. Vorschau
1.1
Einordnung & Organisation
• Grundlage für Vorlesungen:
- Systemprogrammierung,
- Verteilte Betriebssysteme,
- und zur Allgemeinbildung ...
• Praktika & Diplomarbeiten VS:
- Verteilte Betriebssysteme,
- QoS und virtuelle Präsenz, ...
• Vorlesung 3V+1Ü, ab 28.04.2003:
- Montag, 14-16h, H21 (wöchentlich),
- Freitag, 10-12h, H21 (alle 2 Wochen).
• Übung im Wechsel mit der Vorlesung:
- Freitag, 10-12, H21 (alle 2 Wochen).
• Übungsbetreuung: M. Schöttner.
• Sprechstunde: nach Vereinbarung,
Zimmer 3209, o-27 Informatik.
• Anrechnung der kombinierten Klausur- und
Übungsnote im Rahmen der Diplomprüfung
möglich (>50%).
• Vorlesungsunterlagen: größtenteils von Herrn
Prof. Dr. Schulthess übernommen.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
2
1.2
Definition
" An operating system is the software that
breathes life into a computer." (Unbekannter
amerikanischer Autor)
" Die Programme eines digitalen Rechensystems, die zusammen mit den Eigenschaften
der Rechenanlage die Grundlage der möglichen Betriebsarten des digitalen Rechen–
systems bilden und insbesondere die
Abwicklung von Programmen steuern und
überwachen" (DIN 66029, (1978))
(
Interrupts, Multitasking, Operating...)
" Das Betriebssystem macht den Anwendungssystemen die Betriebsmittel zugänglich; insbesondere Verarbeitungsleistung,
Speicher und Kommunikationswege."
(Peter Schulthess)
Betriebssysteme 2003, MS, VS-Informatik, Ulm
3
• Schema aus "Road Map to A/UX":
Programme
Befehlsinterpreter
System-Call
interface
Kern
Treiber
Treiber
Treiber
Treiber
Hardware
Betriebssysteme 2003, MS, VS-Informatik, Ulm
4
1.3
1.
Vorschau ....................................................... 2
1.1
1.2
1.3
1.4
2.
Monolithisch .................................................24
Geschichtet ....................................................25
Mikrokern......................................................28
Virtuelle Maschinen ......................................29
Client / Server................................................30
Hauptspeicher............................................. 35
4.1
4.2
4.3
4.4
4.5
4.6
4.7
5.
Geschichte .......................................................9
Arten von Betriebssystemen..........................13
Aufgaben eines Betriebssystems ...................15
Beispiele von Betriebssystemen ....................21
Betriebssystemorganisation....................... 24
3.1
3.2
3.3
3.4
3.5
4.
Einordnung & Organisation ............................2
Definition ........................................................3
Inhalt ...............................................................5
Literatur...........................................................8
Einführung in Betriebssysteme ................... 9
2.1
2.2
2.3
2.4
3.
Inhalt
Einführung.....................................................35
Partitionen im Hauptspeicher ........................37
Verwaltung & Vergabe .................................48
Overlay & Swapping.....................................51
Virtueller Speicher ........................................53
Beispiele: Linux & Windows NT..................83
Automatische Freispeichersammlung ...........86
Plattenspeicher ........................................... 93
5.1
Aufbau einer Festplatte .................................93
Betriebssysteme 2003, MS, VS-Informatik, Ulm
5
5.2
5.3
5.4
5.5
6.
Nebenläufigkeit......................................... 124
6.1
6.2
6.3
6.4
7.
Lese/Schreibkonflikt ...................................151
Serialisierung mit Signal/Wait: ...................152
Kritische Abschnitte....................................153
Wechselseitiger Ausschluss ........................156
Klassische Problemstellungen.....................167
Verklemmungen ..........................................171
Interprozesskommunikation ........................179
Ein-/Ausgabe............................................. 187
8.1
8.2
8.3
9.
Prozesse und Threads ..................................124
Koroutinen & Fibers ...................................134
Kontextwechsel ...........................................135
Ablaufplanung.............................................137
Synchronisierung ..................................... 151
7.1
7.2
7.3
7.4
7.5
7.6
7.7
8.
Festplatten-Scheduling ..................................98
Speicherverwaltung.....................................101
Dateisysteme ...............................................109
Redundanz & Spiegelung............................123
Peripherie ....................................................187
Unterbrechungen .........................................189
E/A-Software...............................................197
Namensdienste .......................................... 209
9.1
9.2
9.3
9.4
9.5
Namen & Adressen .....................................209
Beispiel: JavaOS .........................................214
Beispiel: Windows NT ................................215
Konfigurationsverwaltung...........................216
Internet Domain Name Service ...................221
10. Bibliotheken.............................................. 224
Betriebssysteme 2003, MS, VS-Informatik, Ulm
6
10.1
10.2
10.3
10.4
Programmierschnittstellen...........................224
Prozedurbasierte Bibliotheken ....................225
Objektorientierte Bibliotheken ....................234
Systemaufruf am Beispiel von NT ..............240
11. Benutzerschnittstellen.............................. 242
11.1
11.2
11.3
11.4
Überblick.....................................................242
Befehlsinterpreter ........................................245
X Window ...................................................249
Microsoft Windows.....................................252
12. Sicherheitsaspekte .................................... 256
12.1
12.2
12.3
12.4
12.5
12.6
Einleitung ....................................................256
Zugangskontrolle.........................................257
Zugriffskontrolle .........................................258
Supervisor Betriebsmodus...........................261
Isolation der Adressräume...........................262
Angriffsformen............................................263
Betriebssysteme 2003, MS, VS-Informatik, Ulm
7
1.4
Literatur
- Stallings William: „Betriebssysteme“, Prentice
Hall, Pearson Studium, 4. Auflage, 2002.
- Tanenbaum Andrew: „Moderne Betriebssysteme“, München, Prentice Hall, 1995.
- Silberschatz, Galvin: „Operating System
Concepts“, Addison-Wesley, 1998.
- Nehmer Jürgen und Sturm Peter: „Systemsoftware. Grundlagen moderner Betriebssysteme“,
dpunkt-Verlag, Heidelberg, 1998.
- Traub, Stefan: „Verteilte PC-Betriebssysteme“,
Teubner Verlag 1997.
- Solomon , David: „Inside Windows NT”,
Microsoft Press, 2nd Edition, 1998.
- Custer, Helen: „Inside the Windows NT file
system”, Microsoft Press, 1994.
- Windows Interna: www.sysinterals.com
- Herold, Helmut: „Linux-Unix-Systemprogrammierung, 2. Aufl., Addison-Wesley, 1999.
- Beck, Michael: „Linux-Kernel-Programmierung:
Algorithmen und Strukturen der Version 2.2, 5.
Auflage, Addison-Wesley, 1999.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
8
2. Einführung in Betriebssysteme
2.1
Geschichte
Erste Generation: 1945-1955
• Röhren (>10.000 Stk.) und Klinkenfelder.
• K. Zuse (irb.cs.tu-berlin.de/~zuse/Konrad_Zuse).
• Fest verdrahtete Programme.
• Aufwendiger Betrieb und Wartung.
• Für numerische Berechnungen (Tab. für Log).
Zweite Generation: 1955-1965
• Erhöhte Zuverlässigkeit durch Transistoren.
• Aber sehr teuer (mehrere Millionen EUR).
• Programme auf Lochkarten (Ass. & Fortran).
• Stapelbetrieb (Batchsystem):
- Manuell: Operateur lädt neuen Job, wenn der
Alte abgearbeitet wurde ineffizient.
- Automatisch: Kleiner, billiger Rechner liest
neue Jobs und speichert diese auf Band. Band
dient als Eingabe für den Mainframe.
- Sequentielle Verarbeitung der Programme.
- Keine Interaktion zw. Programm und Benutzer.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
9
Dritte Generation: 1965-1980
• Einführung von integrierten Schaltungen.
• IBM System/360:
- Serie von kompatiblen Rechnern.
- Für wissenschaftl. und kommerz. Bereich.
- sehr komplexes BS (mehrere Mio. Zeilen
Assembler-Code; >1000 Entwickler).
• Fortschritte der dritten Generation:
- Spooling (Simultaneous Peripheral Operation
On Line):
o Aufträge von Lochkarten einlesen und auf
Platte zwischenspeichern.
o Heute: Ansteuerung von Drucker.
- Mehrprogrammbetrieb (Multiprogramming):
o Mehrere Jobs im Hauptspeicher.
o E/A-Wartezeiten ausnutzen.
o Verteilen der CPU.
- Time Sharing (Zeitscheibenkonzept):
o Erstes System von MIT (1962).
o Dialogbetrieb: jeder Benutzer ist über ein
Terminal mit dem System verbunden.
o Quasi-parallele Ausführung von Prgs.
Multitasking
o Programmumschaltung (Zeitscheiben).
Betriebssysteme 2003, MS, VS-Informatik, Ulm
10
• Einführung von Unix:
- Vorläufer: MULTICS, 1965.
- Ken Thompson schrieb abgespeckte Version
UNICS für Einbenutzersysteme.
- Dennis Ritchie entwickelte die Sprache C und
schrieb UNICS zusammen mit Thompson neu in
C: UNIX (8.200 Zeilen C und 900 Zeilen Ass.).
- Wurde nachfolgend vielfach portiert.
Vierte Generation: 1980-1990
• Hardware:
- large scale integrated circuits (LSI).
- Bauelemente mit 1000en von Transistoren.
- Entwicklung von Mikrocomputern und PCs.
• Software:
- BS überwinden Rechnergrenzen.
- Graphische Benutzschnittstellen.
- Parallelität durch Threads.
• Betriebssysteme:
-
CP/M (8-Bit) für Intel 8080.
MS-DOS (16-Bit) für Intel 80x86.
Microsoft Windows (16/32-Bit) für 80x86.
Unix (32-Bit) für Workstations (X-Window).
MacOS: Einführung einer graph. Oberfläche.
• Netzwerkbetriebssysteme und verteilte BS.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
11
Moderne Entwicklungen
• Cluster Systeme:
- Hochverfügbarkeit durch Redundanz.
- Bündelung von Rechenleistung.
• Multimedia:
- Unterstützung von Audio- und Videoströmen.
- Dienstegarantien (Quality of Service).
• Eingebettete Systeme:
- Maßgenscheiderte kleine Betriebssysteme.
- Typischerweise mit Echtzeitanfoderungen.
• Interoperabilität: Unterstützung heterogener
Umgebungen.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
12
2.2
Arten von Betriebssystemen
• Mainframe Betriebssysteme:
- Früher in großen Rechenzentren, heute auch
Web-/E-commerce-Server, …
- Große Ein- und Ausgabebandbreiten
möglichst viele Prozesse effizient ausführen
- Unterschiedliche Betriebsarten:
o Stapelbetrieb, z.B. Schadensmeldungen in
einer Versicherung
o Transaktionsbetrieb, z.B.
Banküberweisungen, Flugbuchungen, …
o Timesharingbetrieb bei zentralen Diensten
- Beispielsystem OS/390.
• Server Betriebssysteme:
-
Eine Ebene unterhalb der Mainframes.
Bedienen viele Nutzer über ein Netzwerk.
Verteilen Hardware- und Software-Ressourcen.
Für Datei-, Mail-, Web-, Druckservern, …
Beispiele: UNIX, Linux, Windows 2000/XP.
• Netzwerk-Betriebssysteme:
- Verwaltet gemeinsame Ressourcen im Netz.
- Benutzer kennen die Existenz des Netzwerks
von Rechnern.
- Benutzer können sich an fremden Maschinen
anmelden, um Dienste in Anspruch zu nehmen.
- Beispiel: Novell Netware.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
13
• Verteilte Betriebssysteme:
- Rechnerverbund bleibt Benutzer verborgen.
- Wo die Programme ausgeführt werden und wo
die benötigten Daten liegen wird durch das BS
bestimmt und ist dem Benutzer nicht bekannt.
- Benutzer hat den Eindruck einer einheitlichen
Computerressource.
- Beispiele: Amoeba, Kerrighed, Plurix.
• PC- Betriebssysteme:
-
Beschränkt auf einen Benutzer.
Benutzerfreundliche Oberfläche.
Einfache Installation und Wartung.
Unterstützung vieler Peripheriegeräte.
• Echtzeit-Betriebssysteme:
- Verarbeitung von Daten innerhalb bestimmter,
üblicherweise enger Zeitgrenzen.
- Je nach Toleranz bzgl. Überschreitung von
Sollzeitpunkten wird zwischen harter und
weicher Echtzeit unterschieden.
- Für Überwachungs-, Fertigungsanlagen, …
- Beispielsysteme: VxWorks, QNX, ...
• Betriebssysteme für eingebettete Systeme:
- Besitzen oft Echtzeiteigenschaften.
- Optimiert bzgl. Programmgröße, verfügbarer
Arbeitsspeicher und Stromverbrauch.
- Typischerweise für Mikrocontroller oder PDAs.
- Beispiele: OSEK, PalmOS, Windows CE, ...
Betriebssysteme 2003, MS, VS-Informatik, Ulm
14
• Betriebssysteme für Chipkarten:
- Harte Bed. an Speicher und Rechenleistung.
- Oft nur einzelne Funktionen, wie elektronisches
Bezahlen, realisiert.
- SmartCards gewinnen zusehens an Bedeutung.
- Java-orientierte SmartCards mit JVM im ROMSpeicher vorhanden.
2.3
Aufgaben eines Betriebssystems
2.3.1 Betriebsmittelzuteilung
• Betriebsmittel werden vom System zugeteilt:
- um Doppelbelegungen zu vermeiden,
- zwecks Rückgabe beim Programabsturz,
• Zuteilung jeweils an ein "Objekt", z.B. an:
- Programm, Prozess, Thread, Instanz, User ...
• Hauptspeicher wird benötigt für:
-
Prozeduraktivierungen auf dem Keller,
Puffer für Dateien und Datenpakete,
Codesegmente & Kontrollblöcke,
Heap-Objekte.
• Geräte / Devices:
- entweder nur exklusiv nutzbar (exklusiv),
- oder gleichzeitig nutzbar (sharable),
• Plattenspeicher wird als Dateien vergeben.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
15
• Bei Bedarf wird der Prozessor zwischen verschiedenen Threads umgeschaltet.
• Bildschirmoberfläche ist kostbar. Programme
erhalten Fenster auf dem Bildschirm.
2.3.2 Bedienerschnittstelle:
• Anzeigen von Fehlersituationen.
• Dialogsteuerung für:
- Navigation im (Datei-)System:
- Anwenderprogramme.
- Systembedienung.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
16
2.3.3 Abstraktion von der Hardware
Für den Anwendungsprogrammierer:
• Ein Subset von Laufzeitroutinen ist allen Unix
Implementierungen gemeinsam:
- creat, open, close, read, write,
- malloc, fork, wait, waitpid,
- socket, bind, printf, scanf ...
• Viele Karten unterstützen Grafikstandard:
- DirectX, OpenGL, QuickDraw.
• Java Programme laufen auf beinahe jedem
Rechner, wenn dort eine Virtuelle Java
Maschine (JVM) vorhanden ist.
Für den Systemprogrammierer:
• Wenn eine "Hardware Abstraktionsschicht"
eingezogen wird, ist es leichter, ein Betriebssystem auf eine neue Rechnerplattform zu
bringen.
• Erhalten bleiben etwa:
- Formate im Dateisystem,
- Protokolle auf dem Netz,
- Algorithmen und Strategien ...
•
Betriebssysteme 2003, MS, VS-Informatik, Ulm
17
2.3.4 Verzeichnisdienste
"Machines use adresses, people prefer names"
• Übersetzung zwischen Namen und Adressen:
• Adressen für:
- Hauptspeicher, Ethernet, Internet, Disksektoren,
E/A-Ports, SCSI-Devices ...
• Suchpfade für Klassen & Bibliotheksmodule.
• Navigation im Namensraum.
• Dateiverzeichnisse:
- Dateinamen auf Diskadressen abbilden,
- Aliases, Shortcuts und Decknamen,
- geschachtelte Unterverzeichnisse.
• Registry in Windows:
- hierarchische Datenbank,
- Schlüssel und Werte.
• Auffinden von Namen im Netz:
- Namen für Benutzer & Dienste,
- Maschinennamen.
• Namen für Objekte:
- Fenster und Dialogelemente,
- Ereignisobjekte,
- Com-Objekte ...
Betriebssysteme 2003, MS, VS-Informatik, Ulm
18
2.3.5 Fehlerbehandlung & Zugriffsschutz
• "Post Mortem" müssen die Betriebsmittel eines Programmes wieder freigegeben werden:
-
Hauptspeicher,
offene Dateien,
Peripheriegeräte,
Bildschirmfenster,
Warteschlangenpositionen ...
• Der Benutzer wünscht eine verständliche
Fehlermeldung:
- kein Hex-Dump,
- kein blauer Bildschirm,
- keine allgemeine Schutzverletzung.
• Schutz:
-
vor unabsichtlicher Beschädigung des System,
vor böswilligen Einbruchsversuchen,
vor Monopolisierung des Systems,
vor Fehlern im Betriebssystem,
vor Hardwaredefekten.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
19
2.3.6 Konfigurierung & Startup
• Konfigurierungsbedarf für:
-
Benutzerrechte,
Festplatteneinteilung,
Netzwerkportokolle,
Bildschirmauflösung,
Bios-Einstellungen ...
• Automatische Erkennung von Hardware.
- Plug & Play vs. Plug & Work,
- für Geräte am PCI Bus,
- für ISA Geräte?
• Initialisierung:
- der Hardwarekomponenten,
- des Betriebssystemkernes,
- der Serverdienste.
• Ausschalten des Systems:
-
Dokumente sichern lassen,
Dateipuffer auf Disk schreiben,
Druckerwarteschlange schliessen,
Abmelden am Netz,
Services beenden,
Power down !
• Schlafmodus einleiten.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
20
2.4
Beispiele von Betriebssystemen
VMS:
•
•
•
•
•
Für Mainframe-Rechner von Digital Equipment.
Virtueller Speicher.
Hochentwickeltes Dateisystem.
Vernetzung über DecNet.
Flexible Anbindung von Unix & Macintosh
Systemen.
MVS:
•
•
•
•
•
Für IBM Mainframes.
Ungeeignet für Arbeitsplatzrechner.
Betreung nur durch den Spezialisten.
Variantenreiche Jobkontrollsprache.
Vernetzung über SNA.
Windows 98 & Windows NT:
•
•
•
•
•
•
•
•
•
Bill Gates, Microsoft Corp.
Betriebssystem für IBM-PCs und dgl.
Rechner der 80xxx-Familie.
C Schnittstelle zum Betriebssystem.
Mehrprogrammbetrieb.
32 Bit Adressen.
Vernetzung TCP/IP, Netbeui & Novell Net.
Windows 98 für Klientenstationen.
Windows NT/2000/XP für Workstations und
kleinere Server.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
21
Unix:
•
•
•
•
•
•
•
•
•
•
Portables Betriebssystem für Workstations.
Auch für Mainframe-Rechner.
Ursprünglich für PDP11.
Geschrieben in der Sprache C.
Allgemeines Prozesskonzept.
Viele Dienstprogramme, E-Mail.
Standardisierungsgremien.
X-Window als graphische Bedieneroberfläche.
Vernetzung über NFS/TCP/IP ...
Linux: Public Domain Unix (GPL).
OS/2 (IBM):
•
•
•
•
•
•
gedacht als Nachfolger von MS-DOS.
für Rechner der 80xx-Familie.
Mehrprogrammbetrieb.
32 Bit Adressen.
LAN-Manager.
Presentation Manager.
Macintosh OS:
•
•
•
•
•
Xerox-Star Lisa Macintosh.
halbwegs objektorientiert.
für Arbeitsplatzrechner mit PowerPC CPUs.
für Grafik & DTP.
Erste marktgängige Bedieneroberfläche mit
Desktop Symbolik.
• OS & Toolbox im ROM.
• Vernetzung über AppleTalk & TCP/IP.
• System X basiert auf Mach Kern.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
22
Oberon System:
•
•
•
•
•
Wirth & Gutknecht, ETH Zürich.
Kleines Betriebssystem für PCs.
Objektorientiert mit Oberon als Sprache.
Automatische Freispeichersammlung.
Kooperatives Single Tasking.
Plurix:
•
•
•
•
•
•
Experimentelles verteiltes BS aus Ulm.
PC-Cluster mit DSM-Speicher.
Transaktionen statt Prozesse.
Programmierung in Java.
Schnellstart-Option.
Code < 200 KByte.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
23
3. Betriebssystemorganisation
3.1
Monolithisch
Anwendungen
Dispatcher
OS - Routinen
Hardware
• Sammlung von Routinen, ohne Hierarchie,
Kapselung und Schichtung.
• Folgen von Änderungen und Erweiterungen
sind schwer abzuschätzen.
• Beispiel: MS-DOS.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
24
3.2
Geschichtet
Anwendungen
Dispatcher
OS - Routinen
Treiber
Hardware
• Verschiedene Abstraktionsebenen respektive
Schnittstellen:
-
Programmierschnittstelle für Anwendung,
"Service-Provision",
Treiberschnittstelle,
Hardwareschnittstellen.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
25
• Auswechselbar sind unter Umständen:
-
Betriebssystemkern: Releasewechsel ...
CPU-Generation: Intel8086 ... Pentium III ...
Hauptplatine: Bios, Chipsatz, Busse
Prozessortyp: Intel x86, Sun-Sparc, Power PC,
Protokolle: TCP/IP, IPX, AppleTalk
Geräte: Festplatte, Drucker, Grafikkarte ...
• SW-Schichtenmodell:
-
Anwendungsprogramm,
Laufzeitbibliothek,
Pseudotreiber,
OS-Dienste,
Gerätetreiber.
• HW-Schichtenmodell:
-
Busschnittstelle (PCI, EISA, ISA),
Host-Controller (z.B. SCSI, USB),
Peripheriebus (SCSI, USB, FireWire),
Firmware (z.B. in SCSI-Platte),
elektromechanisches Gerät.
• Beispiele:
- THE System, Dijkstra, 1968.
- MULTICS: Ringe mit HW-Schutz.
- Oberon, 1992.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
26
Beispiel: Oberon System - geschichtet
• Wirth & Gutknecht, 1992:
System
Edit
TextFrames
Printer
Net
Backup
SCC
Diskette
Befehle
Texte
MenuViewers
Oberon
Viewers
Texts
Modules
Fonts
Reals
Files
Display
FileDir
Input
Treiber
Kernel
Betriebssysteme 2003, MS, VS-Informatik, Ulm
27
3.3
Mikrokern
Anwendungen
OS-Dienste
Mikrokern
Treiber
Hardware
• Zuverlässiger Mikrokern, etwa für:
- Nachrichtenvermittlung & Prozessumschaltung,
- Speicherverwaltung & Security ...
• Dienste im Adressraum der Anwendung:
-
Bedieneroberfläche,
Dateiverwaltungen,
Vernetzung ...
Beispiel: Mach, L4.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
28
3.4
Virtuelle Maschinen
• Nachbildung der zugrunde liegenden HW, so
dass mehrere Betriebssysteme gleichzeitig auf
einem Rechner laufen können.
• Erstes System IBM VM/370:
- Monitor der virtuellen Maschine: Ausführung
auf der realen Hardware, Realisierung von
Mehrprogrammbetrieb.
- Auf der nächst höheren Ebene werden mehrere
virtuelle Maschinen zur Verfügung gestellt.
- Exakte Kopien der HW mit Kern- und Benutzermodus, Ein- und Ausgabe, Unterbrechungen und
andere Eigenschaften der realen Maschine.
• Systemaufrufe werden von der virtuellen
Maschine abgefangen.
• Die tatsächliche Ausführung der Systemaufrufe erfolgt auf der realen HW durch den
Monitor auf HW-Ebene.
• Klare Trennung vereinfacht den Entwurf der
beiden Komponenten.
• Abwandlungen:
- Virtueller 8086 Modus für Pentium-CPUs zur
Ausführung von 16-Bit MS-DOS Programmen.
- JVM (Java Virtual Machine) interpretiert
plattformunabhängigen Bytecode.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
29
3.5
Client / Server
Anw.
Services
Executive
Kern
HAL
Treiber
Hardware
• Aufteilung in Client- und Server-Prozesse.
• Zwanglose Erweiterung auf verteiltes System.
• Keine Privilegien für Dienste im User-Mode.
• Validierung der Aufrufsparameter zum Dienst
im Executive (gültige Handles, Rechte, ...).
Betriebssysteme 2003, MS, VS-Informatik, Ulm
30
3.5.1 Fallbeispiel: Windows NT
"Executive" in Windows NT
• Dienste im sicheren Teil des Systems.
Virtual
memory
LPC
Process
Manager
Security
Monitor
Objekt
Manager
Kernel Mode
E/A
- Dateien
- Cache
- Drivers
- Network
Kern
Hardware Abstraktion
• Security Monitor kooperiert mit Security-SS.
• Object Manager verwaltet OS-Ressourcen.
• Prozess Manager für Prozesse & Threads.
• "Local Procedure Calls" für Aufrufe über
getrennte Adressräume hinweg.
• VM für Adressräume und Paging.
• E/A-Manager: verwaltet und ruft Treiber.
(Direkte E/A aus Performance-Gründen)
Betriebssysteme 2003, MS, VS-Informatik, Ulm
31
Subsysteme in Windows NT
User Mode
Win32
Klient
Win32
Klient
MS-DOS
Klient
Win32
WoW
Klient
Klient
OS/2
Klient
Posix
Klient
Kernel Mode
LPCs
Virtuelle
DOS Masch.
OS/2
Subsystem
Posix
Subsystem
User Mode
Win32
Subsystem
• Kommunikation mit Subsystemen über den
LPC Manager im Executive.
• Kommunikation zw. Subsystemen über LPC.
• Wechsel zum Kernel-Modus via INT 0x2e.
• Win32-Subsystem:
- DLLs beim Klienten: User32, Kernel32, GDI32,
- LPC zum W32-Subsystem-Prozess CSRSS.exe.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
32
Virtuelle DOS Maschinen
• Eine Virtuelle Dos-Maschine (VDM) bildet
eine reale DOS-Maschine nach:
-
E/A-Port Zugriffe abfangen & emulieren,
Virtuelle Gerätetreiber in der VDM,
E/A-Unterbrechungen weiterreichen,
640 KByte für DOS-Programme,
16 MByte Adressraum für Win16 Programme.
Adressen &
Instruktionsinterpreter
16 MBytes
32-Bit Windows Manager
& GDI Thunks
32-Bit MS-DOS Emulation
Virtuelle Gerätetreiber
Windows 3.11 Anwendungen
640 KBytes
Windows Mgr. & GDI Stubs
Windows 3.11 Kern
16-Bit MS-DOS Emulation
• Pro MS-DOS Programm wird ein Thread in
NTVDM Prozess gestartet.
• 16-Bit Windows-Programme können optional
in separaten NTVDMs gestartet werden:
- WoW = "Windows on Windows" (16 on 32),
- kooperatives Multitasking ...
Betriebssysteme 2003, MS, VS-Informatik, Ulm
33
Koexistenz von 16- & 32-Bit Applikationen
16-Bit
16-Bit
16-Bit
Klient
Klient
Klient
Win32
Klient
Krnl386/Gdi/User.exe
Win32
Klient
Thunk-Layer
Kernel32 / Gdi32 / User32 / NTdll / Advapi .dll
Kernel Mode / native NT-Funktionen
• Thunk-Layer besorgt Konvertierungen:
-
Segment:Offset nach Linear 32-Bit Adresse,
(DX,AX)-Register nach EAX-Register,
16-Bit Stack nach 32-Bit Stack,
und umgekehrt,
etc. ...
• Teile der 32-Bit Funktionen sind noch nicht
implementiert und rufen wiederum 16-Bit
Prozeduren.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
34
4. Hauptspeicher
4.1
Einführung
• Speicherhierarchie:
- Cache:
o teuer.
o flüchtiger Inhalt.
o meist mehrstufig organisiert.
o Kapazität in Kilobyte (z.B. 512 KB).
o Zugriff bei Pentium 4 mit CPU-Takt.
- Hauptspeicher:
o flüchtiger Inhalt.
o schneller Zugriff (z.B. SDRAM 7ns).
o Kapazität in Megabyte (z.B. 512 MB).
- Platttenspeicher:
o persistente Speicherung.
o Kapazität in Gigbyte (z.B. 80 GB).
o Zugriffszeiten in Millisek. (z.B. 7ms).
• Hauptspeicher wird:
-
zugeteilt,
geschützt,
ausgelagert,
freigegeben,
kompaktifiziert.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
35
Binden von Speicheradressen
• Programm muß zur Ausführung in den Hauptspeicher geladen werden.
• Adressbindung zur Übersetzungszeit:
- fest „verdrahtete“ Adr. im ausführbaren Prg.
- Prg. muß an bestimmte Adresse geladen werden.
Konflikte bei Mehrprogrammbetrieb
• Adressbindung zur Ladezeit:
- PC-relative Adressierung oder Binder erzeugt
relozierbare Adressen (beginnend bei 0).
- Positionen der zu relozierenden Adr. in Tabelle.
- Lader passt die Adressen an die zugewiesene
Speicherposition an.
• Adressbindung zur Laufzeit:
- Relozierung des Programms zur Laufzeit.
- benötigt HW-Unterstützung (z.B. Segmente mit
Basisregister).
MMU
Hauptspeicher
Basisregister
10000
CPU
Logische
Adresse
4711
+
Phys.
Adresse
14711
Betriebssysteme 2003, MS, VS-Informatik, Ulm
36
4.2
Partitionen im Hauptspeicher
• Ziel: mehrere Programme, geschützt voneinander, gleichzeitig im Hauptspeicher halten.
Multiprogramming
• Aufteilung des Hauptspeichers in Partitionen.
• Partition = Speicherblock für ein Programm.
4.2.1 Statische Partitionierung
• Statische Unterteilung des Hauptspeichers in
gleich große oder variabel große Partitionen.
• Feste Partitionen:
- einfach implementierbar.
- maximale Anzahl Programme festgelegt.
- Nachteil: ungenutzter Platz verloren
interne Fragmentierung.
• Unterschiedlich große Partitionen:
- gleiche Nachteile wie bei festen Partitionen,
- aber etwas höhere Flexibilität.
• Beispiel: OS-360 MFT.
- IBM Betriebssystem für Mainframes.
- MFT=Multiprogramming with a Fixed number
of Tasks.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
37
4.2.2 Dynamische Partitionierung
• Länge & Anzahl der Partitionen sind variabel.
• Programm erhält genau so viel Speicher wie
es benötigt und nicht mehr.
interne Fragmentierung wird verhindert
• Aber neues Probl. externe Fragmentierung:
- im Laufe der Zeit entstehen Löcher zw. Part.
- insgesamt genügend Speicher vorhanden,
- aber Programm paßt in keine Lücke.
Lösung: Heap Kompaktifizierung
n
Hauptspeicher
Hauptspeicher
Betriebssystem
Betriebssystem
kompaktieren
0
Betriebssysteme 2003, MS, VS-Informatik, Ulm
38
4.2.3 Anwenderprogrammpartition
• Heap (Halde) für dyn. Speicherverwaltung:
- Ressourcen,
- (Codesegmente),
- dyn. Datenstrukturen.
• Stack (Keller) für Parameter & lokale Var.
• A5-Welt des Macintosh:
- Globale Variablen des Programmes,
- Einsprungtabelle für Prozeduren,
- Grafik-Kontext.
Sprungtabelle
Grafik-Kontext
Register A5 Globale Variablen des Programmes
Keller
high
frei
memory
Register A7
Halde
low
Betriebssysteme 2003, MS, VS-Informatik, Ulm
39
Format von Heapblöcken:
• Jeder Heapblock enthält einen Header mit
Informationen für die Speicherverwaltung:
- Flags & Längenfelder,
- nächster Heapblock
- Typ, ...
• Header normalerweise außerhalb des Blocks.
• Alternativ Doppelköpfiges Format (Plurix).
Variablen
Referenzen
Betriebssysteme 2003, MS, VS-Informatik, Ulm
40
Handles & Masterzeiger:
• Der Masterzeiger referenziert die Daten.
• Ein Handle als Zeiger auf einen MasterZeiger.
• Eventuell verweisen viele Handles auf einen
MasterZeiger:
aHandle
bHandle
relozierbarer Block
cHandle
MasterPtr
Daten können verschoben werden, ohne
alle Handles zu kennen und zu verändern.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
41
Laufzeitkeller
Displaytabelle
• Spiegelt die verschachtelten Gültigkeitsbereiche des Quellprogrammes wieder:
#0
Globale
Variablen
Proc B
Proc C
Proc A
#1
A-Variablen
#2
B-Variablen
#3
C-Variablen
#4
Displaytabelle
Keller
Programmtext
• Globale Variablen auf lexiklaischer Ebene #0.
• Compiler kennt aktuelle lexikalische Ebene,
jedoch nicht die Rekursionstiefe.
• Nur Variablen im Keller, kein Code.
• Displaytabelle erledigt nicht:
- Aufbewahrung der alten Ebenen,
- Prozedurrücksprungadresse, ...
Betriebssysteme 2003, MS, VS-Informatik, Ulm
42
Statische und dynamische Kette
= „Static & dynamic Chain“
• Statische Verkettung anstelle von Display.
• Dynamische Verkettung für Rekursion:
globale
A
Proc B
Proc C
Proc A
static
chain
B
B
C
dynamic
chain
C
B
Programmtext
C
B
Betriebssysteme 2003, MS, VS-Informatik, Ulm
43
Kellerrahmen („Stackframe“)
• Welche Information wird pro Prozeduraufruf
im Keller festgehalten?
Funktionsresultat
Statische Verkettung
Rücksprungadresse
Dynamische Verkettung
Stackframe
Parameter
Lokale Variablen
Registeraufbewahrung
Temporäre Zwischenwerte
• Funktionsresultat nur bei Funktionen.
• Statische Verkettung falls lex. Ebene >0.
• Aufgaben des Kellers
-
Speichern von lokalen Variablen
Übergabe von Parametern an eine Prozedur
Rückgabe von Funktionsresultaten
funktioniert nach Prinzip „Last in First Out“
Betriebssysteme 2003, MS, VS-Informatik, Ulm
44
Aufrufkonventionen
• Pascal:
- Parameter werden von links nach rechts
übergeben
- Die aufgerufene Prozedur räumt den Keller auf
- Funktionsresultate werden über den Keller
zurückgegeben
• C:
- Parameter werden von rechts nach links
übergeben
- Die aufrufende Prozedur räumt den Keller auf
- Funktionsresultate werden in Registern
zurückgegeben
• Bei RISC-Prozessoren
- Parameterübergabe fast immer in Register
- Möglichkeit, Register zumzunummerieren
Betriebssysteme 2003, MS, VS-Informatik, Ulm
45
Intel: Kellerrahmen (Stackframe)
• Aufbau:
Parameter
EBP
Rücksprungadresse
altes EBP
ESP
Lokale Variablen
• Adressierung:
- Parameter relativ zu EBP mit pos. Index.
- Lokale Var. relativ zu EBP mit neg. Index.
• Beispiel C:
void add(int x, int y)
{
int result;
result = x + y;
return result;
}
...
add(5, 7)
push
mov
sub
mov
add
mov
mov
mov
pop
ret
EBP
EBP,ESP
ESP,4
EAX,[EBP+8]
EAX,[EBP+12]
[EBP-4],EAX
EAX,[EBP-4]
ESP,EBP
EBP
push
push
call
add
7
5
add
ESP,8
Betriebssysteme 2003, MS, VS-Informatik, Ulm
46
• Beispiel Pascal:
function add(x,y: int) push
mov
begin
sub
int result;
mov
add
result := x + y;
mov
mov
add := result;
mov
end;
EBP
EBP,ESP
ESP,4
EAX,[EBP+12]
EAX,[EBP+8]
[EBP-4],EAX
EAX,[EBP-4]
[EBP+16],EAX
mov
pop
ret
ESP,EBP
EBP
8
push
push
push
call
pop
0
5
7
add
eax
...
add(5, 7)
Betriebssysteme 2003, MS, VS-Informatik, Ulm
47
4.3
Verwaltung & Vergabe
4.3.1 Speicherverwaltung
• Bitvektor
- Problem: Wahl der Granularität.
- je kleiner G., desto größer wird Bitvektor.
- interner Versch. steigt mit Größe des Granulats.
• Freispeicherliste
- freie Speicherblöcke verketten.
- Zeiger für die Freispeicherliste im leeren Block
unterbringen.
- eventuell mehrere Listen verwenden.
• Linearer Heap
- freie & belegte Blöcke sind dicht aneinander
gereiht (Verkettung über Längenfeld).
- optimale Ordnung der Blöcke ist schwierig.
- interne Zeiger sind überflüssig.
- z.B. Mac OS & Plurix.
• Buddy-System
- Speicher besteht aus 2kmax Einheiten.
- jeweils eine Liste für Blöcke der Größe 2i
- kleiner Stücke entstehen aus (fortgesetzter)
Halbierung größerer Stücke.
- benachbarte kleinere Stücke werden bei der
Freigabe wieder vereinigt.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
48
- Ablauf Anforderung:
o Aufrunden auf nächste Zweierpotenz
o Zugriff auf erstes freies Stück der Liste
o Falls Liste leer (rekursiv):
Zugriff auf Liste der nächsten Größe
Stück entfernen & halbieren
Hintere Hälfte (=Buddy) in zugehörige
Liste einhängen
- Ablauf Freigabe:
o Buddy bestimmen
o falls Buddy belegt, freigewordenes Stück
in die Liste einhängen
o falls Buddy frei Vereinigung
o Vorgang iterieren, bis Buddy belegt oder
bei der max. Größe angekommen.
- Beispiel:
alloc 3MB
alloc 800k
alloc 12MB
free 12MB
alloc 3,5MB
free 3MB
free 800k
free 3,5MB
Betriebssysteme 2003, MS, VS-Informatik, Ulm
49
4.3.2 Speichervergabe
• Gute Strategie kommt mit kleinem Heap aus.
• Kriterien: Verschnitt & Geschwindigkeit.
• Die beste Strategie zu finden, ist auch „post
festum“ ein schwer lösbares Problem.
• „First fit“:
- nimmt ersten freien Block der groß genug ist.
- evt. teilen, um ungebrauchten Platz zu sparen.
• „Best fit“:
- sucht den Block, der am wenigsten Speicherverschnitt verursacht.
- Vorteil: keine Zerschneidung großer Stücke.
- Nachteil: langsam; neigt bei Zerschneiden dazu
sehr kleine unbrauchbare Stücke zu erzeugen.
• „Worst fit“: nimmt den größten Block, damit
noch was übrig bleibt.
• „Buddy-Technik“:
- bei Bedarf wird ein zu großes Element geteilt.
- später werden kleine benachbarte Blöcke wieder
vereinigt.
- interner und externer Verschnitt vorhanden.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
50
4.4
Overlay & Swapping
4.4.1 Overlay Technik
• Notwendig, wenn das Programm größer als
der Hauptspeicher ist.
• Idee: Nicht benötigte Programmteile werden
durch andere Programmteile überlagert.
• Realisierung:
- ein Wurzelsegment muß immer im HS sein.
- Overlays werden vor dem Binden festgelegt.
- Unterstützung durch:
o Betriebssystem (z.B. MSDOS),
o Compiler (z.B. Turbo Pascal Units).
Hauptspeicher
n
OverlayBereich
Wurzelsegment
Betriebssystem
0
Betriebssysteme 2003, MS, VS-Informatik, Ulm
51
4.4.2 Swapping
• Swapping = Aus- und Wiedereinlagern von
Programmen/Partitionen auf Disk.
• Notwendig im Multiprogrammbetrieb, falls
nicht genügend Hauptspeicher vorhanden.
• Zeitaufwendig, da immer ganze Partition ausund eingelagert wird.
• Evt. erfolgt Einlagerung an anderer Adresse.
• Strategien:
- Auslagern nicht rechenbereiter Prozesse
- Prioritäten berücksichtigen.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
52
4.5
Virtueller Speicher
4.5.1 Grundprinzip
• Scheinbare Hauptspeicher-Vergrösserung.
selten benötigte Speicherbereiche auslagern
• Realisierungsformen: HS unterteilen in
- variabel große Segmente = Segmentation.
- gleich große Seiten (pages) = Paging.
- evt. beides kombiniert (z.B. Intel).
• Seiten im log. Adressraum werden auf phys.
Kacheln (page frames) im HS abgebildet.
Einfach virtualisierter Speicher:
• Ein virt. Adressraum für mehrere Programme:
Hintergrundspeicher
Progr. 1
Progr. 2
Logischer AR
M
M
U
Physikalischer AR
System
Betriebssysteme 2003, MS, VS-Informatik, Ulm
53
Mehrfach virtualisierter Speicher:
Hintergrundspeicher
Prg.-1
Prg.-2
System
M
M
U
Physikalischer AR
• Jedes Programm besitzt einen eigenen virt.
Adressraum.
• Adressübersetzungstabelle muss beim Prozeßwechsel umgeschaltet werden.
• Teile des Betriebssystemadressraumes auch
für die Anwendungsprogramme zugreifbar.
• MMU = Memory Management Unit, HWEinrichtung zur Adressübersetzung.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
54
4.5.2 Adressübersetzung
Einstufige Übersetzung bei Segmentierung
• Abbildungsprinzip.
• z.B. 32 Bit virtuelle Adressen + 16 Bit
Segmentindex.
• Segmenttabellen speichern vollst. Adressen.
Seg. können an bliebigen Adr. beginnen.
#Segment
Offset
16
32
Segment-Index
Start
Offset
Limit
Segmenttabelle
reale Adresse
Betriebssysteme 2003, MS, VS-Informatik, Ulm
55
Einstufiger Übersetzungsvorgang bei Paging
• Abbildungsprinzip.
• z.B. 20 Bit virtuelle Adresse, 4 KByte Seiten.
virtuelle Adresse
20
Seitentabellen-Index
12
Offset
Seitentabelle
reale Adresse
• Bem.: aufeinanderfolgende Seiten müssen
nicht unbedingt auf fortlaufende Kacheln abgebildet werden.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
56
Mehrstufige Adressübersetzung bei Paging
• Eine Übersetzungstabelle pro Prozeß.
• Adresskontext umschalten.
• Seitentabellen der Ebenen 1+i können evt.
ausgelagert werden.
virtuelle Adresse
8
6
6
12
Offset
Kontextregister
Kontexttabelle
Ebene 3
Ebene 2
Ebene 1
Seitentabellen
Betriebssysteme 2003, MS, VS-Informatik, Ulm
57
Typisches Format eines Eintrages in der
Seitentabelle (Intel Pentium):
Page Frame/Kachel-Adresse
20
Avail
12
Nutzbar für Betriebssystem
00
dirty
accessed
PCD
PWT
U/S
W/R
P
beschrieben
Use-Bit
Seite hat Cache Disabled
Cache durchschreiben
User Seite, nicht Supervisor
Seite beschreibbar
Präsenz Bit, Seite vorhanden
• Kacheladresse nur gültig, wenn die Seite im
Speicher vorhanden ist.
• Auffinden der Seite im Sekundärspeicher.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
58
Uebersetzungspuffer (TLB)
• TLB = "Translation Lookaside Buffer".
• TLB puffert früher übersetzte Adressen.
• Nur wenige Einträge: P4 (40), IA64 (128).
• Falls kein Treffer im TLB erfolgt, wird hardwaremässig auf die Seitentabellen im Hauptspeicher zugegriffen (teuer).
• Hohe Trefferrate (Hit ratio) wichtig.
• Cache benützt nur physikalische Adressen:
- nicht sichtbar für die Software !
- mit physikalischer Adresse Eindeutigkeit:
virtuelle
Adresse
TLB
Seitentabellen
Betriebssystem
physikalische
Adresse
Cache
HauptSpeicher
Daten
• TLB Programmierung:
- Komplett löschen bei Adressraumwechsel.
- 1 Eintrag entfernen beim Einlagern einer Seite.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
59
• Assoziativer Speicher (ähnlich einem Cache).
- direkt indexiert (mapped) oder voll assoziativ:
virtuelle Adresse
27
Kacheladdresse
7
Kacheladdresse
20
virtuelle Adresse
- oder 2 Wege Set-assoziativ.
virtuelle Adresse
Kacheladdr.
6
Kacheladdr.
21
Betriebssysteme 2003, MS, VS-Informatik, Ulm
60
Invertierte Seitentabellen
• Für sehr grosse virtuelle Adressenbereiche.
• Für CPUs mit 64-Bit Adressen, z.B. Sun
Sparc, Intel Itanium, Dec Alpha, ...
• 64-Bit Adressraum:
~ 252 Einträge in Seitentabelle,
~ für 4 KB Seiten & 8 Byte pro Eintrag,
~ 32 000 Terabyte nur für Seitentabellen.
• Besser ein Eintrag pro physikalische Kachel
als ein Eintrag pro logischer Seite.
• Parallele Suche in grossem TLB.
• Bei Fehlanzeige im TLB:
-
Firmware aufrufen,
oder OS via Interrupt aufrufen (TLB Fault),
über Hashtabelle zur physikalischen Adresse,
Hashtabelle aktualisieren.
• Bei Fehlanzeige in der Hashtabelle:
-
sekundäre Seitentabelle konsultieren,
evtl. Tabellen und Seiten auf Platte,
Hashtabelle aktualisieren,
Seite einlagern.
• Neue MMU für 64-Bit Intel-Architektur.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
61
4.5.3 Ersetzungsalgorithmen
Prinzip der Seitenersetzung:
• Ist eine Seite nicht im HS (page fault), so wird
sie mit Seitenersetzungsverfahren eingelagert.
• Ist der HS erschöpft muss zuvor eine Seite auf
Disk ausgelagert werden, damit Platz frei
wird.
Ersetzungsalgorithmus
• Ein-/Auslagern teuer
sollte Seitenfehler minimieren.
Optimale Seitenersetzung:
• Ersetze die Seite, die zukünftig am längsten
nicht mehr benötigt wird.
• Zukunft unbekannt
theoret. untere Grenze
• Beispiel für HS mit 3 Kacheln:
a
b
c
d
c
a
e
d
b
c
a
auslagern
Seitenfehler für Seite D
Betriebssysteme 2003, MS, VS-Informatik, Ulm
62
Not recently used (NRU):
• Flags in der Seitentabelle:
- USE-Bit falls die Seite referenziert wurde,
- DIRTY-Bit falls die Seite verändert wurde.
• USE-Bit periodisch zurücksetzen (~16 ms).
• Auslagerung nach Klassen:
A:
B:
C:
D:
USE-Bit = false, Seite unverändert
USE-Bit = false, Seite verändert
USE-Bit = true, Seite unverändert
USE-Bit = true, Seite verändert
• Fall B beschreibt eine Seite, die in einem
früheren Intervall verändert wurde und noch
zurückgeschrieben werden muss.
• Auslagerungspriorität: A > B > C > D
First-in, First-out (FiFo).
• Einfache Liste der eingelagerten Seiten.
• Die am längsten residente Seite wird ersetzt.
• Nachteil:
- Auch häufig genutzte Seiten werden entfernt.
- ungünstig bei zyklischen Zugriffsmustern.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
63
Belady’s Anonomalie:
• Mehr Seitenfehler trotz mehr Kacheln: tritt
u.U. bei FIFO-Strategie auf.
• 4 Kacheln
11 Seitenfehler:
0 1 2 3 4 0 1 5 6 0 1 2 3 5 6
• 5 Kacheln
13 Seitenfehler:
0 1 2 3 4 0 1 5 6 0 1 2 3 5 6
• Optimal: 4 Kacheln
9 Seitenfehler:
0 1 2 3 4 0 1 5 6 0 1 2 3 5 6
Betriebssysteme 2003, MS, VS-Informatik, Ulm
64
Verfahren des zweiten Versuches:
• "Second chance page replacement algorithm".
• Verbesserung der FiFo-Strategie.
2nd Chance
a
used
b
used
alte Seiten
c
unused
a
unused
d
e
used
used
neue Seiten
auslagern
• Falls USE-Bit gelöscht, dann Seite auslagern.
• Falls USE-Bit gesetzt:
zweite Chance
- USE-Bit zurücksetzen,
- Seite hinten erneut einordnen,
• Mehr Verwaltungsaufwand für die Liste als
bei einfachem Fifo.
• Probl.: evt. lange Suche nach AuslagerungsKandidat.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
65
Uhrzeigerverfahren
• Ähnlich wie Verfahren des zweiten Versuchs:
i
unused
j
unused
k
unused
h
unused
l
unused
g
used
a
used
f
used
b
used
e
used
d
used
c
unused
• Ringliste der Speicherseiten absuchen.
• Einen Zeiger im Ring umlaufen lassen.
• Falls Use-Bit gelöscht, dann Seite auslagern.
• Falls Use-Bit gesetzt, zurücksetzen.
• Eventuell mehr als zwei Chancen.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
66
Least recently used (LRU)
• Am längsten unbenutzte Seite auslagern.
• Theoretischer Ansatz:
-
nur in Hardware realisierbar,
64 Bit Zeitstempel in Kacheltabelle halten,
Zeitpunkt des letzten Zugriffs eintragen,
bei jedem Zugriff aktualisieren kostspielig.
• Realisierung von LRU mit N*N Matrix:
- N phys. Kacheln N-Bit Vektor pro Kachel.
- Zugriff auf Kachel k:
o Bits der Zeile k auf ’1’
o Bits der Spalte k auf ’0’
- älteste Seite = Zeile mit kleinstem Binärwert.
- Bsp.: 4 Kacheln
Zugriff: 0 1 2 3 2 1 0 3 2 3
0
1
2
3
012
011
000
000
000
3
1
0
0
0
0
1
2
3
012
000
101
100
100
3
0
1
1
0
0
1
2
3
0123
0011
1011
0000
0000
0
1
2
3
0123
0111
0011
0001
0000
0
1
2
3
0123
0101
1001
1101
0000
0
1
2
3
0123
0110
0010
0000
1110
0
1
2
3
0123
0000
1000
1100
1110
0
1
2
3
0123
0100
0000
1101
1100
0
1
2
3
0
0
1
1
1
123
000
000
101
100
0
1
2
3
0
0
0
1
1
123
100
000
100
110
Betriebssysteme 2003, MS, VS-Informatik, Ulm
67
• LRU-Simulation in Software:
- pro Kachel ein Zähler,
- periodisch werden die Zähler gealtert,
- Kachel mit niedrigstem Zähler auslagern.
• Arbeitsweise des Zählers:
Zähler vor Verschiebung
1)
01011000
2)
0101100
USE-Bit wird
vorne eingefügt
1
Rechtsverschiebung
0
herausgeschobenes Bit
entfällt
Leistungsaspekte
• Jedes Prog. benötigt Mindestanzahl Kacheln.
• Allokationsalgo.: gleichverteilt, proportional,
prioritätenabhängig, ...
• Lokale Strategie:
- Bei einem Seitenfehler werden nur Seiten des
betroffenen Prozesses ausgelagert.
- Die Proz. haben Speicherbereich fester Größe.
- Vorteil: andere werden nicht beeinträchtig.
- Nachteil: Speicherbedarfs schwer schätzbar.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
68
• Globale Seitenersetzungsverfahren:
- Tritt ein Seitenfehler auf, so stehen die Seiten
aller Prozesse zur Disposition.
- Die Proz. haben Speicherbereich var. Größe.
- Vorteil: mehr Flexibilität.
Trashing
• Prozeß hat weniger Seiten zur Verfügung als
er ständig nutzt sehr häufig Seitenfehler.
• Trashing: Prozeß verbringt die meiste Zeit mit
dem Ein- und Auslagern von Seiten.
• Mögliche Ursachen:
- Lokale Verfahren: Zahl der Seiten zu gering.
- Globale Verfahren: ein Prozeß braucht zu einem
Zeitpunkt sehr viele Seiten, wodurch die
Bereiche aller anderen sehr klein werden.
• Abhilfe:
- Eventuell Prozeß mit niedriger Priorität ganz
auslagern Speicher wird frei
- Zuordnen ausreichend vieler Kacheln
Problem: Bestimmen dieser Anzahl
Lösungsansatz: Working-Set-Modelle
Betriebssysteme 2003, MS, VS-Informatik, Ulm
69
Working-Set-Modell
• Lokalitätsprinzip:
- Programm greift in einem kleinen Zeitraum ∆t
nur auf einen kl. Teil seines Adreßraums zu.
- Räumliche Lokalität: nach Zugriff auf Adr. a ist
ein Zugriff in der Nähe von a wahrscheinlich.
- Zeitliche L.: nach Zugriff auf Adr. a ist ein
erneuter Zugriff (in Kürze) auf a wahrscheinl.
- Gründe: sequentielle Ausführung, Schleifen, ...
• Bem.: Lokalität ist Grundlage für Caching.
• Approximation durch Working-Set-Modell:
-
Working Set: in ∆t benutzte Seitenmenge.
Problem: richtige Wahl von ∆t.
Lösungsansatz: Timer & Referenzbit
Bem:
o ∆t bzgl. der Rechenzeit des Proz.
o Working Set Size ändert sich ständig.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
70
4.5.4 Shared Memory
• Kacheln gemeinsam nutzen:
- Datenaustausch zw. Prozessen,
- Redundanz von Code vermeiden.
• Speicherbereich kann an verschied. logischen
Adressen eingeblendet werden:
Hintergrundspeicher
shared
shared
Logischer AR
System
M
M
U
Physikalischer AR
System
• Muß beim Auslagern berücksichtigt werden
betrifft auch bei lokalen Strategien andere!
• Copy-On-Write:
- Speicher nur zum Lesen gemeinsam nutzen.
- schreibt ein Proz., so wird die zugehörige Seite
kopiert Änderungen für andere unsichtbar.
- für Unix fork, globale Variablen in Windows
DLLs, ...
Betriebssysteme 2003, MS, VS-Informatik, Ulm
71
4.5.5 Fallstudie: Intel i386
Adressierung im Protected Mode
Segmentselektor
virtuelle
Adresse
GDTR LDTR
Lokale
Deskriptortabelle
Globale
Deskriptortabelle
SEGMENTIERUNG
• Segmentierung und Paging kombinierbar:
PAGING
lineare
Adresse
CR3
Page
Directory
Page
Table
physikalische
Adresse
Betriebssysteme 2003, MS, VS-Informatik, Ulm
72
Intel Arbeitsregister ab i386
• Für Anwendungsprogramme zugänglich,
• Arbeitsregister verknüpft mit bestimmtem
Segmentregister, aber umsteuerbar.
• Funktionsbezogene Arbeitsregister:
- Stack, Code,
- Daten, Extra-Daten,
- Flags (mit IO-Privilege Level).
SS
CS
ESP
EIP
SP
DS
EAX
AX
AL
EBX
ECX
EDX
BX
BL
CX
CL
DX
DL
ES
FS
ESI
EDI
SI
GS
EBP
BP
Eflags
Flags
IP
DI
Betriebssysteme 2003, MS, VS-Informatik, Ulm
73
Intel Steuer- & Kontrollregister
• Verwendung:
Erweiterte Adressierung im Protected Mode,
Zugriffsschutz & Maschinenzustand
Prozessorsteuerung (Control [0..3]).
SS
CS
DS
ES
FS
GS
SS-Basis/-Limit
CS-Basis/-Limit
SegmentDS-Basis/-Limit
DeskriptorES-Basis/-Limit
caches
FS-Basis/-Limit
GS-Basis/-Limit
TR
LDTR
TSS-Basis/-Limit
LDT-Basis/-Limit
IDTR
GDTR
IDT-Basis/-Limit
GDT-Basis/-Limit
CR0
CR1
CR2
CR3
Debug,
Test
Betriebssysteme 2003, MS, VS-Informatik, Ulm
74
• Segmentregister bzw. -selektor hält Index in
die globale oder die lokale Deskriptortabelle.
• Gleichzeitig mit dem Segmentregister wird
implizit der Segmentdeskriptorcache geladen.
• Dabei geschehen unter Umständen mehrere
Hauptspeicherzugriffe.
• Auch für das aktuelle Task-State Segment und
die lokale Deskriptortabelle werden Deskriptoren gepuffert (gecached).
• Segmentdeskriptorcache nicht zugreifbar.
• 4(5) Kontrollregister:
CR0 PG
......
TS, EM, MP, PE
reserviert
CR1
Lin. Pagefault-Adresse
CR2
CR3 PageDirectory Adr.
CPU Erweiterungen
CR4
• CR0:
Paging, Taskswitch, Coproc., Protected Mode.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
75
Segmentdeskriptoren
• Die Originaldeskriptoren liegen in der lokalen
oder der globalen Deskriptortabelle.
• Segmentdeskriptorcaches unsichtbar in CPU.
• Potential für einen segmentierten virtuellen
Speicher ohne Seiteneinteilung:
-
für jedes Objekt einen Segmentdeskriptor,
anstatt eines Zeigers nur Segment-Selektor,
gleichzeitig 8000 lokale & 8000 globale D.
evtl. Segment-Deskriptoren in LDT und GDT
ein- & auslagern und Selektoren ergänzen.
• Schutzfunktion bei Segmentierung:
- Zugriffsmodus (exec, read, write ),
- Protection Level (0..3)=(privileged .. non-priv.)
- Segmentlänge im Deskriptor.
• Die Segmentregister arbeiten im Protected
Mode als 16 Bit Segmentselektoren:
Requ.
Tabellenindex
15
LDT Priv.
GDT Level
2
1
0
Betriebssysteme 2003, MS, VS-Informatik, Ulm
76
Formate von Segmentdeskriptoren
• Deskriptor für Applikationssegmente:
Granularität
32/16 Bit,
Reserve,
OS use,
8
31..24
19...
4
Basis 15..0
Present,
Protect 0..3,
Application-Deskr.,
Typ 23..16 4
Limit 15..0
0
• "Historium" aus der Intel 286 Architektur.
• Granularität der Länge: 1 Byte / 4K Page.
• 32 Bit oder 16 Bit Instruktionen & Adressen.
• Beim Zugriff auf ein ausgelagertes Segment
erfolgt ein Interrupt an das Betriebssystem.
• Nur Deskriptoren mit gleicher oder
niedrigerer Sicherheitsstufe dürfen geladen
werden (CS).
Betriebssysteme 2003, MS, VS-Informatik, Ulm
77
Applikations-Segmente
• DT-Bit=1: Kennung für Applikationsseg.
#11: EXE (code/not data)
#10: E/C (downward,conforming),
#9: W/R (write data, read code),
#8: A (accessed).
1 Typ
P
• Bit#11=true (EXE-Bit): Code
- Codesegment, darf ausgeführt werden,
- darf auch gelesen werden, falls Bit9=true (W/R),
- falls Bit#10=true (conforming), ist Ausführung
durch ein unterprivilegiertes Segment gestattet.
• Bit#11=false (EXE-Bit): Data
- Datensegment, nicht ausführbar,
- schreiben erlaubt, falls Bit9=true (W/R),
• falls Bit#10=true (abwärts), erstreckt sich das
Segment von Basisadresse nach unten (Stack).
• Bit#8=true (Access-Bit):
- dieses Segment wurde benützt,
- nützlich für die Speicherauslagerungsstrategie.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
78
Intel386 System-Segmente
• Haben das DT-Bit gelöscht.
• Call-Gate Deskriptor (Typ = 12):
-
beschreibt den Einsprung in geschützte Routine,
normalerweise in anderem Segment (far call),
referenziert einen weiteren Segmentdeskriptor,
ändert kurzzeitig die Privilegierungsebene,
übernimmt bis zu 128 Parameterbytes:
present, privilege, typ12
Zieloffset 31..16
Zielsegment #
DWcnt
Zieloffset 15..0
• Interrupt- & Trap-Gate Deskr. (Typ = 14/15):
- beschreibt den Einsprung in Interruptroutine,
- 8 Byte Einträge in Interrupt-Deskriptortabelle,
- IDT-Basis/Limit geladen über LIDT-Instruktion,
present, privilege, typ14/15
Zieloffset 31..16
Tables
Zielsegment #
Zieloffset 15..0
Tables
• Trap-Gate Deskriptoren (Typ = 15) arbeiten
ähnlich, jedoch ohne Interrupts zu maskieren.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
79
• Task-Gate Deskriptor (Typ = 5):
- referenziert ein Task-State Segment (TSS),
- evtl. mehrere Task-Gates für ein TSS,
- enthält Privilegierungsstufe:
present, privilege, typ=5
Tables
TSS Zielsegment #
• Task-Switch falls:
- Far-Call oder Far-Jump, falls Sprungzielselektor
Task-Gate oder TSS,
- Interrupt oder Exception, falls zugehöriger IDTEintrag auf Task-Gate verweist.
- IRET von. nested Task.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
80
• Task-State Segment Deskriptor (Typ = 9/11):
-
Enthält akt./geretteten Prozessorzustand (TSS),
Segmentselektor für lokale Deskriptortabelle,
Basisadresse für Seitentabellendirectory,
Stacks der Privilegierungstufen 0,1,2,
aktuell sichttbare Prozessorregister,
Zugriffsmaske für die E/A-Ports,
Link zum vorherigen Tasksegm.,
aktives TSS mit Typ=11.
Task-State Segment
11111111
TSS-Limit
IO-Permission
Bitmap
OS Zeux
IO-Bitmap
TSS-Base
Register
Stacks 0,1,2
PrevTSS
Task-Register
Betriebssysteme 2003, MS, VS-Informatik, Ulm
81
Zugriffsschutz-Mechanismen
• Zugang über Gate-Deskriptoren.
• Max. vier Privilegierungsebenen, zum Bsp.:
3:
2:
1:
0:
Anwendungsprogramme,
Laufzeitumgebungen, GUI ...
Gerätetreiber,
Kernel.
1
2
3
0
Privilegierungscode:
CPL im aktuellen Codesegment,
RPL im Selektorargument,
DPL im Deskriptor,
IOPL in Flags.
• Zur privilegierteren Ebene nur über ein Gate:
Call, Trap, Interrupt, Task, TSS,
Ausnahme: Conforming Deskriptors.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
82
4.6
Beispiele: Linux & Windows NT
4.6.1 Linux
• Unterteilung des virtuellen Adreßraums:
- User Mode: 0-3GB.
- Kernel Mode: 3-4 GB.
• Zonen des physikalischen Adreßraums:
-
ZONE_DMA: für ISA Geräte.
ZONE_NORMAL: Standardzone.
ZONE_HIGHMEM: > 896 MB RAM.
Zonen-Information siehe auch Befehl dmesg.
4 GB
virtueller
Adreßraum
physikalischer
Adreßraum
Kern
3 GB
ZONE_HIGHMEM
User
896 MB
ZONE_NORMAL
16 MB
0
ZONE_DMA
0
• Dreistufige Seitentabellenstruktur:
- Entwickelt für 64-Bit Alpha.
- IA 32 unterstützt nur zweistufige Tab.
Eintrag im Page-Directory wird als mittlere
Seitentabelle mit nur einem Eintrag behandelt.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
83
• Kachelverwaltung:
-
mit Hilfe der Buddy-Technik,
freier Block schnell auffindbar,
mildert externe Fragmentierung,
aber interne Fragmentierung problemat.,
Kacheln des Kerns werden nicht ausgelagert.
• Slab Allocator:
-
gruppiert Objekte gleichen Typs in Caches
ein Cache ist in mehrere ‚slabs’ unterteilt.
Zum Bsp.: voll, partiell gefüllt, leer, ...
pro ‚slab’ eine oder mehrere Kacheln.
Allokation in den Größen 2x (x>5).
Mildert interne Fragmentierung.
Info: cat /proc/slabinfo
• Seitenersetzung:
- Modifizierter Clock Algorithmus.
- Use-Bit erweitert durch 8-Bit Altersvariable.
- Wird bei jedem Anpassen des Zeigers erneuert.
• Insgesamt komplizierte Speicherverwaltung.
• Weitergehende Informationen unter:
- http://linux-mm.org
- http://kt.zork.net/kernel-traffic/kt20030124_202.html#22
Betriebssysteme 2003, MS, VS-Informatik, Ulm
84
4.6.2 Windows NT
• Unterteilung des Adreßraums:
- User Mode: 0-2GB.
- Kernel Mode: 2-4 GB.
• Zustände der Seiten eines Prozesses:
- Verfügbar: ungenutzte Seiten.
- Reserved: logischer Adreßbereich reserviert.
- Commited: Kacheln bzw. Platz in Paging Datei
wird alloziert.
- Vorteil: Kacheln möglichst spät allozieren.
• Kacheln je nach Zustand in eigener Liste
page frame database
• Seitenersetzung:
- variabel großer Working Set; Standardwerte für
Minimum und Maximum.
- lokale Strategie:
o FIFO bei Multiprozessor-Systemen.
o Clock bei Einzel-CPUs.
- Anpassung des Working Set (WS):
o Wenn genügend Kacheln vorhanden sind
wächste der WS bei einem Seitenfehler.
o Wenn HS knapp wird, so werden die WSs
geschrumpft (ältere Seiten auslagern).
- Clustering: Beim Einlagern einer Seite werden
Nachbarseiten mit eingelagert.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
85
4.7
Automatische Freispeichersammlung
• = „Garbage Collection“
• Explizite Speicherrückgabe durch den Programmierer ist fehleranfällig und mühsam.
• Manche Prog.sprachen sammeln Speicherbereiche, die nicht mehr adressierbar sind auto.
wieder ein (Java, Oberon, .NET, ...).
Motivierung & Voraussetzungen
• Freigabe von Speicher ist fehleranfällig:
- dangling Pointers
- Code notwendig zum Abbauen komplexer
Strukturen
- bei modularer Programmierung werden
Kontrollstrukturen benötigt
(müssen explizit programmiert werden)
- Nicht Freigabe von Speicher ist ebenfalls eine
Fehlerquelle (Memory leaks)
• Voraussetzungen:
- Sämtliche Referenzen auf einen Speicherblock
müssen auffindbar sein.
- Typsichere Sprache dringend empfohlen.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
86
Assignment-Listen:
Heap Blöcke
Nil
Nil
• Die Freispeichersammlung sammelt nun alle
Blöcke mit leerer Assignment-Liste ein.
• Heap-Kompaktifizierung:
- Verschieben von allozierten Blöcken
- Zeiger mit Hilfe der Assignment-Liste anpassen.
• Beispiel: Plurix Backchain.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
87
Grundtechnik
• 2 Phasen Modell
- 1. Phase: Erkennung von referenzierbaren und nicht
mehr referenzierbaren Objekten (Garb. Detection)
- 2. Phase: Freigabe des Speichers von nicht mehr
referenzierbaren Objekten (Garbage Reclamation).
• Nicht mehr referenzierbare Objekte erkennen:
es existiert kein Pfad zwischen dem Objekt und
einer Zustandsvariablen (Root-Set).
• Zustandsvariablen:
- globale/statische Variablen,
- lokale & Modulvariablen.
• Jeder (allozierte) Block führt eine Liste mit
Zeigern, welche auf ihn zeigen.
• Im Falle einer Allozierung (New...) wird der
zugeordnete Zeiger eingetragen.
• Wird ein gültiger Zeigerinhalt einem anderen
Zeiger zugewiesen (assigned), so wird auch dieser
Zeiger eingetragen.
• Wird eine Zeigervariable freigegeben, so muß sie
aus der Assignment-Liste entfernt werden. Das
kann schwierig werden.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
88
4.7.1 Mark & Sweep
• Der Sammelalgorithmus markiert alle noch
erreichbaren Blöcke im Heap:
Garbage
Z
Z
Z
• Nicht markierte Blöcke sind dann frei (bzw.
Garbage) und können eingesammelt werden.
für jede Zustandsvariable s:
Markiere(s);
für jedes Objekt o, für das gilt o.mark = 0 :
Speicherfreigabe(o)
Markiere(s):
wenn s.mark = 1 dann beende Prozedur
s.mark := 1;
für jedes von s referenzierteObjekt o:
Markiere(o)
Betriebssysteme 2003, MS, VS-Informatik, Ulm
89
• Ausgehend von einer Menge von Wurzelzeigern werden alle noch aktiven (live) Zeiger
und deren Objekte gefunden.
• Das Verschieben von Blöcken zur Gewinnung
von größeren Bereichen (Kompaktieren) ist
möglich aber mühsamer.
• Die Freispeichersammlung muss in einem
Manipulation an
Stück zu Ende laufen.
Zeigern durch das Anwenderprogramm
würden die Freispeichersammlung verwirren.
• Die hierzu erforderlichen Symbol- und Typentabelle wird vom Compiler erzeugt.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
90
4.7.2 Compilerunterstützung
• Referenzen innerhalb eines Blocks müssen
identifizierbar sein, benötigt wird:
-
Offset und Typ der globalen Zeigervariablen,
Offset und Typ der lokalen Zeigervariablen,
Identifikation der Prozedurframes im Stack,
Zeigerfelder in dynamisch allozierten Records.
X
X
^Y
^Y
B
Y
A
^X
^Y
^X
^Y
Global
Stack
Global Frame
Proc-A Frame
Proc-B Frame
Record-X Type
Record-Y Type
…
Y
^X
^Y
Heap
– – –
– –^X
–^Y –
– – –
–^X –
– –
– –
– –
–^Y
– –
–^Y
– –
– –
– –
–^Y
Tabelle
– –
– –
– –
– –
– –
Betriebssysteme 2003, MS, VS-Informatik, Ulm
91
4.7.3 Kopierende Freispeichersammlung
• Die Objekte werden solange von einer alten
Region in eine neue kopiert bis der Rootset
nur noch Referenzen in die neue Region hat.
• Ein kopiertes Objekt darf nicht mehr in die
alte Region zeigen.
• Ein Objekt wird zusammen mit den Objekten
kopiert auf welche es zeigt.
• Eventuell Zugriffe auf die alte Region mit
MMU abfangen.
Alte Region
Neue Region
Betriebssysteme 2003, MS, VS-Informatik, Ulm
92
5. Plattenspeicher
5.1
Aufbau einer Festplatte
5.1.1 Physikalischer Aufbau
• Platten:
-
magnetisierbare Schicht.
rotieren mit 5.400 - 15.000 U/min.
unterteilt in konzentrische Spuren (Tracks).
Spuren sind wiederum in Sektoren unterteilt.
äußere Spuren mit bis zu 40% mehr Sektoren.
Zylinder = Menge aller Spuren, die mit fester
Armposition gelesen werden können.
• Kamm mit Leseköpfen.
• Adressierung:
- über Zylinder, Kopf, Sektor (CHS),
- oder über logische Block Nummer (LBA)
Betriebssysteme 2003, MS, VS-Informatik, Ulm
93
5.1.2 Aufbau eines Sektors
GAP3
DATA
ECC
DAM
SYNC
GAP2
ECC
ID
IDAM
SYNC
SPD
GAP1
IAM
SYNC
• typischerweise 512 Bytes pro Sektor: entsteht
durch phys. bzw. Low-Level-Formatierung.
• Wichtige Felder:
-
ID: Zylinder; Head und Sektor
ECC: Error Correction Code
DATA: zur Informationspeicherung
GAP4: Nach letztem Sektor eines Zylinders
Aufbau des Bootsektors:
• Position ist (Zylinder 0, Kopf 0, Sektor 1)
• Wird durch BIOS beim Systemstart geladen
und angesprungen.
000
Bootlader (446 Bytes)
446
Partitionstabelle
510
Signatur (2 Bytes)
Betriebssysteme 2003, MS, VS-Informatik, Ulm
94
Fehlerbehandlung:
• Disks sind fehleranfällig
- Köpfe schweben über Oberfläche.
- Staubkorn kann zum Headcrash führen.
- Teilweise fehlerhafte Blöcke bei Auslieferung.
• Sector Forwarding:
- Controller hat Liste „schlechter“ Blöcke und
leitet Zugriffsversuch auf fehlerhaften Block
(unsichtbar für BS) auf einen Reserveblock um.
- Auswirkungen auf Disk-Scheduling !
- Reserveblöcke in allen Zylindern und / oder in
einem Reservezylinder.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
95
5.1.3 Partitionstabelle
• Beschreibt logische Laufwerke (Volumes):
Offset Größe
Inhalt
446
16
Partition 4
462
16
Partition 3
478
16
Partition 2
494
16
Partition 1
• Arten von Partionen:
- Primäre: max. vier Stück möglich bei PCs,
- Erweitert: primäre Part. mit log. Unterpart.,
- Logisch: einer erweiterten Partition zugeordnet.
• Nicht alle Partitionierungsprgramme arbeiten
gleich Vorsicht!
• Vorteile:
-
verschiedene Dateisysteme auf einer Festplatte,
mehrere Betriebssysteme auf einer Disk,
Trennung von System & Benutzerdaten,
Besonderheit in Linux: Swap-Partition.
• Namensgebung:
- Windows: Laufwerksbuchstaben „c:“, „d:“, ...
- Unix: interner Name: z.B. „/dev/hda2“.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
96
Aufbau eines Partitionseintrages
Offset Größe Inhalt
0
1
Boot – Flag
(80h aktiv; 00h inaktiv)
1
3
Beginn der Partition
4
1
System Kennung
(z.B. 1: DOS 12-Bit FAT;
4: DOS 16-Bit FAT …)
5
3
Ende der Partition
8
4
Startsektor als logischer Sektor 0
12
4
Größe der Partition in Sektoren
• Probleme bei großen Festplatten
- 224 Sektoren zu 512Bytes = 8 Gigabyte
- 232 Sektoren zu 512Bytes = 2 Terrabyte
Mounting:
• Mounting: Einblenden einer Partition in
einem Verzeichnis des Dateisystems.
• Windows-Diskmanager, Unix: mount
mount
Betriebssysteme 2003, MS, VS-Informatik, Ulm
97
5.2
Festplatten-Scheduling
• Aufgabe des BS: effiziente Nutzung der Disk:
- Suchzeit: Kopf auf Zylinder positionieren.
- Rotationsverzögerung bis Sektor unter Kopf.
• Positionierung teuer:
- Möglichst sequentiell schreiben & lessen.
- Schreiben auf einer modernen IDE-Disk:
sequentiell: ~ 45 MB/s; verstreut: ~ 1 MB/s.
• Strategien zur Kopfpositionierung:
- Zufallsstrategie (Random): Aufträge werden in
zufälliger Reihenfolge ausgewählt.
- FCFS (First Come First Serve): Abarbeitung der
Aufträge in der Ankunftsreihenfolge.
- Prioritätsstrategie: Die Reihenfolge wird
entsprechenden der Priorität der Aufträge
erstellt.
- SSTF (Shortest Seek Time First): Auftrag mit
kürzester Armpositionierung zuerst
- SCAN (Fahrstuhlstrategie): Der Plattenarm
bewegt sich in eine Richtung, bis alle
Anforderungen abgearbeitet sind. Erst
anschließend ist Bewegung zurück oder in
andere Richtung erlaubt.
• Beispiel: Start bei 53; Sequenz: 98, 183, 37,
122, 14, 124, 65, 67
Betriebssysteme 2003, MS, VS-Informatik, Ulm
98
• FCFS (First Come First Serve):
- Kopfbewegung über 640 Zylinder.
• SSTF (Shortest Seek Time First):
- Kopfbewegung über 236 Zylinder.
- Mögliches Aushungern.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
99
• SCAN (Fahrstuhlstrategie):
- Kopfbewegung über 208 Zylinder.
• Anmerkungen:
- FCFS erfordert im Mittel (Gleichverteilung) ein
Überfahren von 1/3 der Spuren.
- SCAN, und SSTF bringen vor allem bei starker
Last Vorteile, denn im Grenzfall ist nur eine
Spur weit zu springen.
- SCAN und SSTF benachteiligen die
„Randspuren“.
- SSTF ist i.a. am besten, kann jedoch zum
„Verhungern“ von Aufträgen führen.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
100
5.3
Speicherverwaltung
• Sequentielle Natur einer Platte erfordert
andere Verfahren als im Heap:
- Armbewegungen sind kritisch,
- kleines Abbild im Hauptspeicher,
- optimale Suchverfahren für Verzeichnisse …
• Ausgangssituation: fast alle Dateisysteme
unterteilen Partition in feste Blockgröße:
- Kompromiß zw. Zugriffsgeschwindigkeit und
Fragmentierung bei Wahl der Blockgröße.
- Typische Werte: 0,5 – 32 KB (je nach Disk).
5.3.1 Freispeicherverwaltung
Bit-Vektoren
• Partition in Blöcke fester Größe unterteilen.
• Jeweils ein Bit zeigt an, ob ein Block frei ist
oder nicht (0=belegt,1=frei).
• 10 GB Disk, 1 KB pro Block
Bitmap.
1,25 MB für
• Bewertung:
- fortlaufende Blöcke einfach identifizierbar.
- u.U. große Bitmap bei kleinen Blöcken.
- Bitmap im virtuellen Speicher halten.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
101
Verkettete Freispeicherliste
• Finden von N zusammenhängenden Blöcken
schwieriger.
• Ermitteln N aufeinanderfolgendener Blöcke
erfordert Durchlaufen von mind. N Blöcken.
• Ggf. effizienter als Bitmap, da nur freie
Blöcke gespeichert werden müssen.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
102
Freispeicherverwaltung mit Zählen
• Verkettete Liste.
• Speichern von Zeiger und Anzahl unmittelbar
nachfolgender freier Blöcke in einem freien
Block.
• Vereinfacht die Suche nach N aufeinanderfolgenden Blöcken.
1
1
3
1
2
2
1
2
1
2
Betriebssysteme 2003, MS, VS-Informatik, Ulm
103
Freispeicherverwaltung mit Gruppieren
• Speichern der ersten N freien Blöcke im
ersten Block.
• N-1 dieser Blöcke sind frei.
• Im N-ten Block sind weitere N freie Blöcke
gespeichert - usw.
• Beispiel: N=4 Speichern von Zeiger und Anzahl unmittelbar.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
104
Beispiel: Macintosh
• Vergabeeinheiten:
Logischer Block (512 Bytes)
phys. EOF
Belegungsblock
Erweiterungsquantum
• Log. Blöcke à 512 Bytes werden normalerweise auf einen phys. Sektor abgebildet.
• Die Belegungseinheit (Allocation Block) ist
jeweils mindestens 2 logische Blöcke. Dies
reduziert die Größe der Vergabetabellen.
• Die Zuteilung erfolgt aber in Erweiterungsquanten (Clumps) von mehr als einer Belegungseinheit:
- typisch sind 4 Belegungseinheiten,
- teilweise erfolgt Rückgabe nach Close,
- fördert zusammenhängende Dateiplazierung.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
105
5.3.2 Speicherallokation
• Allokation von Blöcken für Dateien.
• Ziele:
- effektive Ausnutzung der Festplatte (Disk),
- schneller Dateizugriff.
Zusammenhängende Allokation
• Jede Datei belegt zusammenhängende Blöcke.
• Problem bei der Expansion von Dateien.
• Platzverschwendung (externe Frag.).
• Einfach Implementierung.
• Effektiver Zugriff.
Datei
Test.java
.profile
Plan
News
Mail
Start Länge
0
2
6
2
16
3
19
6
28
4
Betriebssysteme 2003, MS, VS-Informatik, Ulm
106
Verkettete Allokation
• Datei als verkettete Liste von Blöcken.
• Beliebige Anordnung der Blöcke einer Datei.
• Expansion von Dateien einfach.
• Keine Platzverschwendung.
• Speichern von Zeigern in Blöcken.
• Bei einem beschädigtem Block geht die ganze
Datei verloren.
• Zugriffsgeschw. abhängig von Zersplitterung.
• Z.B. FAT (leicht abgewandelt).
Datei
Test.java
…
Start Länge
9
25
…
…
Betriebssysteme 2003, MS, VS-Informatik, Ulm
107
Multilevel-Index Allokation
• Limitierte Dateigröße bei einem Indexblock:
- 1 Block = 512 Byte
- Z.B. 1 Zeiger = 4 Bytes
max. 128 Zeiger Datei max. 64 kB
• Verketten von Indexblöcken.
• Multilevel Index:
- Beispiel: 2 Level
- 128*128 Zeiger 16384 Zeiger
- max. Dateigröße = 8 MB
• mehrere Levels z.B. in Unix I-Nodes (Typen:
Dateien, Verzeichnisse, Links, ...).
VerwaltungsInformation
Direkte
Blöcke
Blöcke mit 1er
Indirektion
Blöcke mit 2
Indirektionen
Betriebssysteme 2003, MS, VS-Informatik, Ulm
108
5.4
Dateisysteme
• Anforderungen: Persistenz, Zugang per Name,
Schutz durch Zugriffsrechte, ...
• Logische Formatierung = Initialisierung
einer Partition mit einem Dateisystem.
• Datei (File):
- Def.: Behälter zur dauerhaften Speicherung von
beliebigen Informationen (Daten & Prgs).
- Dateistruktur abhängig vom Dateityp.
- Attribute: Name, Typ, Grösse, letzte Änderung,
Zugriffsschutz, ...
• Verzeichnis (Directory):
- Vom Dateisystem verwaltete Datei zur
Strukturierung externer Speichermedien.
- Problem: Organisation der Dateinamen
o flacher Namensraum alle Dateienamen
müssen systemweit eindeutig sein.
o hierarchische Organisation besser.
• Verweis (Link, Shortcut):
- Direkter Zugriff, ohne navigieren zu müssen.
- Links in Unix:
o fest: Verweis auf I-Node.
o symbolisch: Verweis auf Dateinamen.
- Problem beim Löschen: ungültige Links.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
109
5.4.1 Beispiel: Dateizugriff
• Unter Windows NT:
#include <string.h>
#include <windows.h>
int main() {
HANDLE
DWORD
char
hFile;
dwWritten;
*data=“hello world“;
hFile = CreateFile(
"c:\\test.txt",
GENERIC_WRITE,
// write access
0, NULL,
// share mode & security
CREATE_ALWAYS,
// creation mode
FILE_ATTRIBUTE_NORMAL|
FILE_FLAG_NO_BUFFERING,
NULL
// template file
);
WriteFile(hFile,
&data, strlen(data),
&dwWritten,
NULL
);
// file handle
// data + len
// #bytes written
// overlapped I/O
CloseHandle(hFile);
}
Betriebssysteme 2003, MS, VS-Informatik, Ulm
110
5.4.2 FAT16
• Allokation durch abgesetzt Verkettung in
FAT = File Allocation Table.
• Dateizuordnungstabelle:
- auf den ersten Spuren einer Festplatte,
- sicherheitshalber oft repliziert,
- für jeden Block einen Eintrag.
• Alle Belegungseinheiten (Blöcke) einer Datei
sind über die File Allocation Table verkettet:
- 0 = leerer Block.
- $FFF7 = schadhafter Block.
- $FFFF = letzter Block einer Datei.
0 fff7
#1 #2
4
#3
7
#4
0 fff7
#5 #6
8
#7
a ffff
#8 #9
b ffff
#a #b
• Verzeichnis zeigt auf den ersten Block einer
Datei, bzw. den ersten Eintrag in der Tabelle.
• Verzeichnisse sind ebenfalls Dateien.
• Größe einer Zuordnungseinheit:
- variabel, aber fest für eine Partition.
- üblich sind 512, 1024, 4096 Bytes.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
111
• FAT16: DOS, Win 3.x
- 16-Bit max. 65.536 Cluster,
- max. 2 GB pro Partition bei 32KB Cluster.
• FAT32: Windows 98/Me
- 32-Bit keine 2 GB Beschränkung,
- weniger Verschnitt durch kleinere Cluster.
• VFAT16/32: virtual FAT; lange Dateinamen.
• Weitere Eigenschaften:
- FAT bietet keine Schutzmechanismen.
- aber Daten unter vielen BS zugänglich.
- optionale Kompression möglich.
Aufbau eines FAT16 Dateieintrages:
• Sind in Verzeichnisdateien untergebracht.
Offset
0
Größe
8
8
11
3
1
12
22
24
26
28
10
2
2
2
4
Inhalt
Dateinamen
Sonderfälle für das 1. Zeichen:
00h: leerer Eintrag
E5h: Eintrag wurde gelöscht
Dateinamen-Erweiterung
Attribute:
Archiv-Bit, read-only, Verzeichnis/Datei,
versteckt
Reserviert
Uhrzeit der Erstellung
Datum der Erstellung
Start Cluster
Dateilänge
Betriebssysteme 2003, MS, VS-Informatik, Ulm
112
5.4.3
I-Nodes in Unix
• I-Node ! Index-Nodes.
• Zentrale Struktur für Dateien.
• Aufbau eines I-Nodes:
-
„mode“ (16-Bit): Dateityp und Berechtigungen.
„link count“: Anzahl harter Links auf die Datei.
„owner gid“: Projektgruppe des Eigentümers.
„owner uid“: User-ID des Eigentümers.
„file size“: Größe der Datei in Bytes.
Zeiger auf Daten- und Indexblöcke.
Datumseinträge, ...
I-Node
data blocks
mode
link count
owner uid
owner gid
file size
...
direct blocks
(12)
single indirect
double indirect
triple indirect
...
...
index blocks
• Multilevel-Index Allokation (dreifach):
- Direkte Datenblöcke,
- und Extent-Blöcke per Index.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
113
• Dateityp:
-
Verzeichnis,
reguläre Datei,
Special File für Block Device,
Special File für Character Device,
Special Files für Pipes und Sockets.
• Verzeichnisse:
-
Implementiert als Dateien.
Kennzeichnung im Typfeld.
Eintrag: Dateinnamen & I-Node-Nummer.
Zusätzliche Attribute in I-Nodes der Dateien.
Beispiel: Verzeichnisstruktur für /usr/ms
„/usr“
Wurzelverz.
I-Node #6
(Block 132)
I-Node #26
1
.
Modus
6
.
Modus
1
..
Grösse
1
..
Grösse
4
bin
...
19
ps
...
7
dev
132
26
ms
406
14
lib
51
sf
9
etc
30
rg
6
usr
8
tmp
• Implementierung in Linux ext2.
• Journaling Dateisysteme
ReiserFS, ext3, ...
(mit
Logging):
Betriebssysteme 2003, MS, VS-Informatik, Ulm
114
• Plattenstruktur:
BootBlock
SuperBlock
I-Nodes
...
Datenblöcke
...
- Boot-Block: Bootprogramm.
- Super-Block:
o Verwaltungsinfos: Blöckgröße, Liste freier
Blöcke, Liste freier I-Nodes, ...
o Wird im Hauptspeicher gehalten.
- I-Nodes: Liste fortlaufender I-Nodes.
- Datenblöcke: folgen im Anschluß an I-Nodes.
Zugriffsrechte
• Mit jeder Datei wird Besitzer und Gruppe, zu
der eine Datei gehört abgespeichert.
• Als Gruppe wird normalerweise die primäre
Gruppe des Besitzers verwendet.
• Ferner gibt es neun Zugriffsbits (r,w,x), für
den Besitzer, die Gruppe und den Rest.
• Zugriffsbits bei Verzeichnissen:
- r: Inhalt darf aufgelistet werden,
- x: mit cd darf in das Verz. gewechselt werden,
- x+w: neue Dateien dürfen angelegt werden.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
115
• Beispiel Zugriffsbits: Besitzer, Gruppe, Rest
drwxr-xr-x 2 ms users 1024 Feb 10 10:39
-rwxr-x--- 1 ms users 224 Feb 10 10:36
-rw------- 1 ms users 103 Feb 12 09:39
Typ+Rechte #Links
Größe Datum
Mail/
hello.c
test
Name
Spezialbit: Setuid
• Problembeispiel:
- Nur root darf auf die Passwortdatei zugreifen.
- User sollten gelegentlich ihr Passwort ändern,
dürfen aber nicht auf die Datei zugreifen.
• Lösungsansatz:
- Passwortprogramm gehört root und hat sein
Setuid-Bit gesetzt.
- Wird es vom User gerufen, so läuft es nicht etwa
mit der Zugriffsberechtigung des Users, sondern
mit derjenigen des Eigentümers (z.B. root).
- Nur der Eigentümer kann das Setuid-Bit setzen
(und immer auch root).
- Es geht nicht um die Ausführungsberechtigung
von /bin/passwd, sondern um den Zugriff auf
/etc/passwd.
- Verfahren patentiert (durch Dennis Ritchie).
• ls –l zeigt bei den Benutzer-Zugriffsbits ein
s (statt eines x) an.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
116
Spezialbit: Setgid
• Bei der Ausführung des Programms wird
immer die GID der Datei verwendet (und
nicht die GID des aktuellen Benutzers).
• ls –l zeigt bei den Gruppen-Zugriffsbits ein
s (statt eines x) an.
• Bei Verzeichnissen bewirkt dieses Bit, daß
neu angelegte Dateien der Gruppe des Verz.
angehören (nicht der Gruppe des Benutzers).
Spezialbit: Sticky
• Bewirkt bei Verzeichnissen, auf denen alle
Benutzer Dateien ändern dürfen, daß nur
eigene Dateien gelöscht werden dürfen.
• Zum Beispiel
für /tmp.
• ls –l zeigt bei
allen gültigen
Zugriffsbits ein t
(statt eines x) an.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
117
5.4.4
NTFS
Allgemeine Eigenschaften
• Fehlertoleranz:
- Transaktionskonzept (all-or-nothing).
- Logging: undo/redo nach Absturz.
- RAID: Diskfehler tolerieren.
• Sicherheit:
- Zugriffskontrolle,
- Verschlüsselung (EFS).
• Unterstützung für große Disks & Dateien
64-Bit für Blocknummern
• Mehrere Datenströme pro Datei
Zugriff über datei:stream
• Alle Informationen des Dateisystems werden
als Datei gespeichert, auch Metadaten.
• Optionale Kompression möglich.
Volumes
• Unterteilung der Partition in Clusters.
• Cluster besteht aus einem oder mehreren
fortlaufenden Sektoren.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
118
• Struktur eines Volumes:
PBS
MFT
SystemFiles
File Area
• PBS (Partition Boot Sector):
- Boot-Programm (optional).
- Sektoren pro Cluster.
- Plattengeometrie, ...
• MFT (Master File Table):
-
MFT ist auch eine Datei.
entspricht I-Node Tabelle.
pro Datei/Verzeichnis ein Eintrag.
beschreibt die Lage der Datenblöcke.
• Systemdateien:
- MFT2: erste drei Zeilen der MFT
- Log-Datei: Änderungen an MFT protokollieren
- Volume-Datei: Größe & Name des Volumes,
Versionsnummer der Part.
- Bitmap-Datei: freie & belegte Cluster.
- Boot-Datei:
o Größe eines Clusters,
o und eines MFT-Eintrags,
o sowie Boot-Code (Kopie von PBS).
- Bad-Cluster-Datei: vermerkt defekte Cluster.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
119
• Aufbau eines MFT-Eintrages:
- Sammlung von Attributen.
- „standard info“: verschied. Datumseinträge.
- „security descriptor“: für Zugriffskontrolle.
standard
info
file
name
security
descr.
data
starting starting no. of
VCN
LCN clusters
VCN
0
1355
3
4
1388
4
VCN
0
1
2
VCN
3
data
LCN 1355
4
5
6
data
1357
LCN 1388
1391
- kleine Dateien wird direkt in MFT abgelegt.
- große Dateien belegen mehrere Einträge in MFT
(Base-Record enthält nur Zeiger).
• Adressierung:
- über Cluster-Nummern (CN).
- virt. CN (VCN): Adressierung in einer Datei.
- log. CN (LCN): Adressierung in einer Partition.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
120
• Attribute:
- Jede Datei ist ein Satz von Attributen.
- Sämtliche Elemente, wie z.B. der Dateiname,
die SicherheitsID, die Daten sind Dateiattribute.
• Aufbau eines Verzeichnisses:
-
Sammlung von Referenzen auf Dateien.
Dateinamen im Verzeichnis repliziert.
Referenziert über Position in MFT.
Sequentielle Suche in kleinen Verzeichnissen
(die in einem MFT-Eintrag Platz finden).
- Für umfangreiche Verzeichnisse ein B*-Baum
indiziert nach Namen der Dateien.
- Aber kein B*-Baum über alle Dateien auf einem
Volume.
Fehlertoleranz
• Nur die Integrität der MFT gewährleistet.
• Jede Modifikation an der MFT wird in eine
Transaktion gekapselt.
• Transaktionen können wiederholt und rückgängig gemacht werden.
• Hierzu werden Update-Operationen einer TA
in einer Logdatei protokolliert (Undo+Redo).
• Mehr Infos: Helen Custer, „Inside Windows
NT File System“, Microsoft Press, 1994.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
121
5.4.5 Memory-Mapped Files
• (Teil einer) Datei wird in den virtuellen
Adreßraum eingeblendet.
• Speicherzugriffe auf diesen Bereich werden
wie Dateizugriffe behandelt.
• Implementierung:
-
logischen Adreßraum reservieren.
Seitentabellendeskr. zeigen auf Disk-Blöcke.
bei einem Seitenfehler wird von Disk geladen.
Zurückschreiben beim Schließen der Datei.
• Beispiel: Unix
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/mman.h>
void main() {
char * p;
int fd;
fd = open("txt", O_RDWR);
p = mmap(0, getpagesize(), PROT_READ|PROT_WRITE,
MAP_PRIVATE,fd, 0);
printf("%08X\n", p);
munmap(p, getpagesize());
close(fd);
}
Betriebssysteme 2003, MS, VS-Informatik, Ulm
122
5.5
Redundanz & Spiegelung
• RAID:
-
Redundant Array of Inexpensive Disks.
mehrere Levels def. von Universität Berkeley.
Software- und Hardware-Lösungen vorhanden.
Hardware sollte ebenfalls dupliziert werden.
• RAID Level 0:
- keine Redundanz der Daten.
- Daten werden auf mehrere Platten verteilt
hohe Lese- und Schreibleistung.
• RAID Level 1:
-
z.B. Windows NT.
benötigt zwei Festplatten.
wird auch als „Spiegeln“ bezeichnet.
Gesamtkapazität entspricht einer Platte.
Schreiboperationen immer auf beiden Disks.
• RAID Level 4:
-
Platten werden nicht mehr komplett gespiegelt.
Festplattenkapazität wird besser ausgenutzt.
Redundanz durch Checksumme (XOR).
Nachteil: Parity Platte ist Flaschenhals.
• RAID Level 5:
- Paritätsinfo verteilt über alle Festplatten.
- z.B. Windows NT.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
123
6. Nebenläufigkeit
6.1
Prozesse und Threads
6.1.1 Begriffliches
• Nebenläufig.: paralleler od. verzahnter Ablauf
• Parallelität: simultaner Ablauf.
P1
P2
P3
1 Prozessor
P2
P1
P3
3 Prozessoren
• Ziele: Wartezeiten ausnutzen und den Eindruck der Gleichzeitigkeit erwecken.
• Programm: statische Darstellung eines Algo.
• Prozeß = Adreßraum + Thread(s)
Betriebssysteme 2003, MS, VS-Informatik, Ulm
124
• Task = Aufgabe, die durch einen oder mehrere
Prozesse erledigt wird.
• Thread (Leichtgewichtsprozeß, Ausf.-Spur):
-
gehört zu einem Adreßraum,
teilt sich Daten, Code u. BM,
separater Registersatz & Laufzeitkeller,
beschreibt dyn. Ablauf der Verarbeitung.
Instruktionsteil
Programm
zähler
Gemeinsame Daten
• Multithreading: mehrere Threads pro Prozeß
• Multitasking: Mehrere Tasks werden (scheinbar) gleichzeitig ausgeführt.
• Preemptives Multitasking:
BS kann einer Task CPU jederzeit entziehen.
• Kooperatives Multitasking:
Tasks müssen Prozessor freiwillig freigeben.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
125
6.1.2 Prozeßmodelle
• Sequentiell: viele Module und ein Thread
(~ Modula-2):
• Nebenläufig:
- Viele Threads u. ein gemeinsamer Adreßraum
(Light-Weight Process),
- Viele Threads und pro Thread ein eigener
Adreßraum (trad. Unix-Prozeß).
• Terminologie in Literatur nicht einheitlich.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
126
• Verwaltung durch einen Prozeßkontrollblock:
- Charakteristika,
- Zustandsinformation,
- Verwaltungsdaten für BS.
ID
Programmname
Speicherinformation
Betriebsmittel
Priorität
User-ID
• Prozeßzustände:
blockiert
debloc
neu
start
warten
freigeben
bereit
läuft
beendet
stop
zuordnen
Betriebssysteme 2003, MS, VS-Informatik, Ulm
127
Unix
• Viele Prozesse mit eigenem Adreßraum, aber
jeweils mit nur einem Thread.
• Moderne Varianten bieten mehrere Threads
pro Proz. (z.B. spezielle Bibliothek in Linux).
• Erzeugen von Prozessen durch „fork“:
- Vater-Sohn-Beziehung,
- erzeugt Kopie des aktuellen Prozesses.
• Hintergrundprozesse werden als Daemon bezeichnet (z.B. Spooler).
• Prozeßzustände in Unix:
Betriebssysteme 2003, MS, VS-Informatik, Ulm
128
Windows NT
• Prozeß:
- ein oder mehrere Thread(s),
- keine Verwandtschaft zw. Prozessen,
- in BS-Verwaltung als Objekt implementiert.
• Dienste als Hintergrundprozesse:
- siehe „Dienste“ in Systemsteuerung,
- kontrolliert durch Service Control Manager.
• Taskmanager zeigt Prozeßliste.
• Threadzustände:
Betriebssysteme 2003, MS, VS-Informatik, Ulm
129
• Prozeß starten durch „CreateProcess“:
#include <windows.h>
main() {
STARTUPINFO
si; // window stuff
PROCESS_INFORMATION pi; // handles
CreateProcess(
„MyProg.exe“, // Programm (Pfad)
„“,
// command line
NULL,
// process attributes
NULL,
// thread attributes
FALSE,
// inherit handle
CREATE_NEW_CONSOLE,
NULL,
// env. Block
NULL,
// curr. Directory
&si,
// startup info.
&pi
// process info.
);
...
}
Betriebssysteme 2003, MS, VS-Informatik, Ulm
130
6.1.3 Multithreading
• pro Thread ein separater Adreßraum ist teuer:
- Start ist aufwendig,
- Kontextwechsel ist teuer (Cache & TLB),
- kontextübergreifende Komm. ist langsam.
mehrere Threads in einem Adreßraum
• Verwaltung durch Thread-Kontrollblöcke:
ID
Programmzähler
Register
Priorität
Ausführungszeit
• Typische Einsatzgebiete:
- Blockierendes Warten auf Ereignisse,
- Benutzerschnittstelle am Leben erhalten,
- gleichzeitige Bearbeitung von unabhängigen
Aufgaben innherhalb eines Programmes.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
131
• Beispiel: Thread in Windows NT:
#include "stdio.h"
#include "windows.h"
DWORD
HANDLE
HANDLE
loop = 500*1000*1000;
hEvent;
hChild;
DWORD WINAPI Child( LPVOID lpParm ) {
while (loop>0){
--loop;
};
printf("'Child' signalisiert:\n");
SetEvent(hEvent);
return 0;
}
int main(int argc, char* argv[]) {
hEvent =CreateEvent(NULL, 0, 0, NULL);
// defaultSecurity, autoReset, nonsignalled, noname
hChild =CreateThread(NULL, 8, &Child, &loop, 0, 0);
// defaultSecurity, stack, procAddr, tParam, noname
printf( "'main' wartet auf Signal.\n" );
result =WaitForSingleObject( hEvent, INFINITE );
printf( "Signal ist angekommen !\n\n" );
}
Betriebssysteme 2003, MS, VS-Informatik, Ulm
132
Threads in Java:
• Sprachunterstützung für Threads.
• Java Virtual Machine bietet:
- Green threads: emuliert durch JVM.
- Native threads: abgebildet auf Betriebssystem.
• Thread-Funktionen in java.lang.Thread:
-
Starten: start();
Unterbrechen: suspend();
Aufwecken: resume();
Verzögern: sleep();
Abbrechen: stop();
Warten auf Beendigung: join();
• Beispiel:
class ExampleThread extends Thread {
int param;
ExampleThread (int p) { param = p; }
public void run() {
// was soll der neue Thread ausführen?
}
public static void main(String[] args) {
ExampleThread t = new ExampleThread(42);
t.start();
}
}
r
Betriebssysteme 2003, MS, VS-Informatik, Ulm
133
6.2
Koroutinen & Fibers
Koroutinen in Modula-2:
• Explizit zwischen Prozessen wechseln:
TRANSFER(VAR FromProz, ToProz: PROCESS)
IOTRANSFER(
VAR Handler,
Interrupted: PROCESS;
IntVec: CARDINAL);
NEWPROCESS( proc : Proc;
addr : ADDRESS;
size : CARDINAL;
VAR new : PROCESS);
• NEWPROCESS reserviert Speicher für Stack
des neuen Proz. (addr=Beginn & size=Größe).
• IOTRANSFER erlaubt Interrupt-Handler in
Modula-2 zu schreiben.
Fibers in Windows NT:
• Für BS unsichtbare Threads.
• Anwendung verwaltet Fibers in eigener Regie
und übernimmt Scheduling.
• API: “CreateFiber”, “SwitchToFiber”, …
Betriebssysteme 2003, MS, VS-Informatik, Ulm
134
6.3
Kontextwechsel
• Dispatcher: Modul welches Kontextwechsel
implementiert.
• Beim Umschalten auf einen anderen Thread
muß der aktuelle Kontext gesichert werden:
- hierzu dienen diverse Felder im PCB/TCB,
- teuer ist das Umschalten des Adreßraumes
Caches & TLB spülen
- Beschleunigung durch HW-Unterstützung
(z.B. Intel Tast State Segment).
• Gründe für einen Kontextwechsel:
-
Interrupt von HW,
Rechenzeit abgelaufen,
Warten auf Betriebsmittel,
freiwillige Abgabe der CPU.
• Umschalten muß teilweise verhindert werden,
z.B. bei HW-Zugriff in Treibern.
• Reentranter Code, falls Umschalten erlaubt:
- durch mehrere Threads gleichzeitig nutzbar.
- keine Zustandsinformation in globalen Var.
• Bem.: Compiler berücksichtigt auch Kontextwechsel, aber Klassen- und Modulkontexte.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
135
• Ablauf:
laufend
Status von P1 sichern
schlafend
P2
P1
Status von P2 sichern
laufend
Status von P1 laden
schlafend
laufend
schlafend
Status von P2 laden
Betriebssysteme 2003, MS, VS-Informatik, Ulm
136
6.4
Ablaufplanung
• Scheduler:
- regelt die Zuteilung des Prozessors
- wählt nächsten Threads aus der Ready-Queue.
• Verdrängung = entziehen der CPU
• Ziele:
-
faire CPU Verteilung,
Wartezeiten bestmöglichst ausnutzen,
Verweilzeit von Programmen minimieren,
mögl. viele Threads pro Zeitintervall bedienen,
Antwortzeit f. interaktive Benutzer minimieren.
• Scheduler tritt in Aktion wenn ein Thread:
-
startet,
terminiert,
freiwillig die CPU freigibt,
auf ein Betriebsmittel wartet,
seine Zeitscheibe voll ausgenutzt hat.
6.4.1 Strategiealternativen
• ohne / mit Prioritäten
• ohne / mit Verdrängung (Preemption)
• unabhängig / abhängig von Bedienzeit
Betriebssysteme 2003, MS, VS-Informatik, Ulm
137
First Come First Served (FCFS)
• Bearbeitung der Threads in der Reihenfolge
ihrer Ankunft in der Bereitliste.
• Prozessorbesitz bis zum Ende oder freiwilligen Aufgabe.
• Beispiel:
- Laufzeit: t(T1)=24, t(T2)=3, t(T3)=3
- Ankunftsreihenfolge: T1, T2, T3
- durchschnittliche Wartezeit: (0+24+27) / 3 = 17.
T1
T2
0
24
T3
27
30
- Ankunftsreihenfolge: T2, T3, T1
- durchschnittliche Wartezeit = 3!
T2
0
T3
3
T1
6
30
• Probleme:
- Konvoi-Effekt = schnelle Threads hinter einem
langsamen.
- CPU-lastige Threads halten I/O-lastige auf.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
138
Shortest Job First (SJF)
• Thread mit der kürzesten Bedienzeit wird als
nächster bis zum Ende oder freiwilligen
Aufgabe bearbeitet.
• Bevorzugt kurze Threads.
• Bedienzeit muß bekannt sein, lang laufende
Threads können verhungern.
• Beispiel:
- Laufzeit: t(T1)=7, t(T2)=4, t(T3)=1, t(T4)=5
- Ankunftszeiten: at(T1)=0, at(T2)=1, at(T3)=2,
at(T4)=3.
- non-preemptive: durchschn. Wartezeit = 6,75
T1
T3
0
7
T2
T4
8
12
17
- preemptive: durchschnittliche Wartezeit = 3,5
T1 T2 T3
0
1
2
T2
3
T4
6
T1
11
17
Betriebssysteme 2003, MS, VS-Informatik, Ulm
139
Round Robin (Zeitscheibenverfahren)
• Ziel: gleichmäßige Verteilung der CPU.
• Bearbeitung der Threads in der Ankunftsreihenfolge.
• Nach Ablauf einer vorher festgesetzten Frist
(z.B. 20-50ms) findet eine Verdrängung statt.
• Einreihung des Threads nach Ablauf des Zeitquantums in die Ready-Queue (sofern nicht
blockiert).
• Verbreitete Strategie.
• Problem: richtige Wahl der Zeitscheibe.
• Beispiel:
- Laufzeit: t(T1)=53, t(T2)=17, t(T3)=68,
t(T4)=24
- Ankunftszeiten: at(T1)=0, at(T2)=1, at(T3)=2,
at(T4)=3.
- Zeitscheibe = 20.
T1
0
20
T2
T3
37
57
T4
77
T1
97
T3
T4
117
T1
121
T3
134
T3
154
162
Betriebssysteme 2003, MS, VS-Informatik, Ulm
140
Prioritäts-Scheduling
• Jeder Thread erhält eine Prioritätsnummer.
• Threads mit der höchsten Priorität wird aus
der Ready-Queue selektiert.
• Bem: SJF ist Prioritäts-basiertes Verfahren
mit Priorität = erwartete Burst-Zeit.
• Implementierung: mehrere Ready-Queues:
- Vordergrund- und Hintergrundprozesse,
- oder für jede Priorität eine Warteschlange.
Gruppen gleicher Priorität
TCBs
• Problem Aushungern (Starvation): ein Thread
mit niedriger Priorität bekommt die CPU nicht
zugeteilt, da immer Threads mit höherer
Priorität rechenbereit sind.
• Lösung: Altern (Aging): Priorität steigt mit
der Wartezeit.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
141
• Problem: Prioritätsinvertierung
Zustand
“blockiert”
wartet auf
Thread C
Prio=12
Ressource
besitzt
Thread A
Prio=4
Zustand
“bereit”
Thread B
Prio=8
Zustand
“rechnend”
- Thread C „verhungert“, trotz höchster Priorität.
- Thread B dominiert die CPU.
- Dadurch kommt Thread A nicht zum Zuge und
kann daher die Ressource nicht freigeben.
Thread C auf unbestimmte Zeit blockiert.
- Lösung Altern mit der Wartezeit:
o Priorität von Thread A steigt langsam an.
o Sobald sie >8 ist, löst sich das Problem.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
142
6.4.2 Strategien für Echtzeitsysteme
• Echzeitsysteme müssen def. Zeitschranken
einhalten, auch in Fehlersituationen.
• Für krit. Anwendungen (z.B. Kernkraftwerk).
• Threads erhalten Sollzeitpunkte (Deadlines).
- Voraussetzung: Laufzeit vorab bekannt.
- Unterscheidung bei Sollzeitpunkten zwischen:
o Harter Echtzeit: Verletzung bedeutet
Ausfall des Systems (nicht tolerierbar).
o Weicher EZ: Qualitätseinbußen bei Verletzung, aber in Grenzen tolerierbar.
• Keine Desktop-Betriebssysteme, sonder mehr
für eingebette Systeme (z.B. OSEK).
Offline-Scheduling
• Scheduling vor der eigentlichen Ausführung
zur Vermeidung von Scheduling-Overhead.
• Vorberechnung eines vollständigen
führungsplans in Tabellenform.
Aus-
• Einfacher Tab.zugriff während Ausführung.
• Sinnvoll für harte Echtzeitanforderung.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
143
Earliest Deadline First (EDF)
• Verbreitete Strategie.
• Threads mit Ausführungsfristen.
• Thread mit engster Frist wird bevorzugt.
• Beispiel: Earliest Deadline First
- Laufzeit: t(T1)=4, t(T2)=5, t(T3)=3
- Fristen: f(T1)=10, f(T2)=7, f(T3)=17
- non-preemptive; gleiche Ankunftszeit.
T2
T1
0
T3
5
9
12
- preemptive: Ankunftszeiten: at(T1)=0, at(T2)=1,
at(T3)=2.
T1
0
1
T1
T2
6
9
T3
11
• Dynamischer Einplanbarkeitstest notwendig,
wenn ein neuer Thread hinzukommt.
• CPU Auslastungsgrenze 100%.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
144
Rate Monotonic Scheduling (RMS)
• Zur Beschreibung periodischer Systeme:
- hohe Priorität für Aktivitäten mit hoher Freq.
- niedrige Prio. für Akt. mit kleiner Frequenz.
• Ende der Periode entspricht Deadline.
• Voraussetzung: Threads sind unabhängig voneinander.
• Vorteil: minimale Verzögerung hochfreq.
Aktivitäten
• Nachteil: Zerstückelung niederfrequenter Akt.
wegen höherer Anzahl von Kontextwechseln
zu Threads mit höherer Priorität.
• Situation, die durch Verzögerung eines höher
priorisierten Threads, zu einem gültigen Ablauf führen, sind nicht lösbar.
• CPU Auslastungsgrenze 82,8%.
• Nicht optimal, aber große Bedeutung in Echtzeitsystemen.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
145
6.4.3 Mehrprozessor-Aspekte
• Wahllose CPU-Zuteilung schlecht.
• Hat Thread t zuletzt Prozessor p genutzt, so
besteht die Chance, dass noch wesentliche
Teile seines Adressraums im Cache von p
vorhanden sind.
• Einführung der Prozessor-Affinität: TCB wird
um zuletzt benutzte CPU erweitert.
• Nachteil: Aufweichung von Prioritäten
6.4.4 Leerlaufproblem
• Falls alle Threads warten ist die CPU frei
• In dieser Zeit läuft ein Leerlauf-Thread:
- darf nicht anhalten,
- hat geringste Priorität,
- muß jederzeit verdrängbar sein.
• Im Leerlauf können diverse Aufgaben bearbeitet werden:
- Prüfungen,
- Garbage Collection,
- Heap Kompaktifizierung.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
146
6.4.5 Scheduling in Unix
-m
Systemprozesse
…
-1
0
…
Benutzerprozesse
n
• Benutzerprozesse haben eine statische Basispriorität von 0 (erhöhbar mit „nice“).
• Dynamische Priorität:
- jede Sekunde angepaßt nach der Formel:
dyn_prio := base_prio + recent_cpu_usage / 2
- Prozessornutzung gemessen in „Uhr-Ticks”.
- Vorher wird schrittweise „vergessen”, wie groß
die Prozessornutzung war:
recent_cpu_usage := recent_cpu_usage / 2
• starke CPU-Nutzung
schlechten Priorität.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
147
• Idee:
- Rechenintensive Prozesse werden
benachteiligt“.
- I/O-intensive Prozesse werden bevorzugt!
- Sie belegen den Prozessor nur kurz, um einen
E/A-Auftrag abzusetzen.
- Man erreicht dadurch eine hohe Parallelität
zwischen den aktiven Rechnerkomponenten
(CPU und Peripherie).
• Round Robin (z.B. 100ms bei BSD Unix) als
Scheduling-Strategie.
Linux:
• Verwendet eine Mischung aus verschiedenen
Schedulingklassen.
- SCHED_FIFO: FiFio-Strategie.
- SCHED_RR: Zeitscheiben-Verfahren.
- SCHED_OTHER: traditionelles Unix-Verfahren
• Scheduling für alle Klassen mit mehreren
Queues, je nach Priorität.
• SCHED_FIFO und SCHED_RR:
-
statische Priorität.
für Echtzeitprozesse.
reserviert für Superuser.
FiFo unlimitierte CPU-Zeit.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
148
6.4.6 Scheduling in Windows NT
• Verdrängendes, auf Zeitscheiben basierendes
Scheduling mit Prioritäten:
- Workstation-Zeitscheibe: 20-30 ms.
- Server-Zeitscheibe: 150-180 ms.
• 32 Prioritätsklassen (32 FiFo-Queues):
- Leerlaufthread: 0.
- Variable Priorität: 1-15.
- Echtzeitpriorität 16-31 (statisch).
höchste (31)
Echtzeitpriorität
…
geringste (16)
höchste (15)
…
variable Priorität
geringste (0)
Betriebssysteme 2003, MS, VS-Informatik, Ulm
149
• Richtige Echtzeitfähigkeiten nicht vorhanden,
sondern nur höhere Prioritäten.
• Prioritätsklasse berechnet sich aus der Prozeßklasse und dem relativen Thread-Prioritätslevel (von –2 bis +2).
• Anpassung von Prioritäten durch Scheduler:
- Priorität wird um 1 erniedrigt, falls Zeitscheibe
komplett verbraucht.
- Wenn E/A-Auftrag beendet ist, auf den ein
Thread gewartet hat, so wird dessen Priorität
erhöht (1-8 Level) = Priority Boost.
- Nach einem Priority-Boost, wird nach jedem
Ablauf einer Zeitscheibe, die Priorität wieder
um 1 erniedrigt, bis zum Ausgangswert.
• Prioritätserhöhung, wenn der Thread lange
(~ 3 sec.) in der Bereitliste war:
- vermeidet Verhungern.
- und Prioritätsinversion.
• Zeitscheibe kann für Vordergrundprozesse
Systemsteuerung):
angepaßt werden (
doppelt oder dreifach lange Zeitscheiben.
• CPU-lastige Threads neigen zu niedrigeren
Prioritäten und I/O-lastige zu höheren.
• Prioritätsklasse über Taskmanager anpaßbar.
en
Betriebssysteme 2003, MS, VS-Informatik, Ulm
150
7. Synchronisierung
7.1
Lese/Schreibkonflikt
• = race condition: wenn nebenläufige Threads
auf gemeinsamen Variablen schreiben, so ist
das Ergebnis nicht deterministisch:
Thread-2
Thread-1
1
2
2
t
• Synchronisierung der nebenläufigen Threads
macht das Resultat deterministisch:
Thread-2
Thread-1
wait()
2
signal()
1
t
1
• Bemerkung:
- Nebenläufigkeit führt zu einer implizitzen oder
expliziten gegenseitigen Beeinflußung.
- Synchronisierung notwendig.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
151
7.2
Serialisierung mit Signal/Wait:
• Oft muß ein Thread warten, bis ein anderer
Thread einen vorgesehenen Punkt erreicht:
-
warten auf richtige Drehzahl der Platte,
warten auf vorherige DB-Transaktion,
Berechnung im Koprozessor,
nachstehendes Beispiel "Warten auf Puffer",
warten bis der Partner einen kritischen Bereich
verlassen hat …
• Wartefunktion wait(event) suspendiert den
aktuellen Thread solange bis das Ereignis
event gemeldet wird.
• Die Funktion signal(event) meldet das
Ereignis event. Der signalisierende Thread
läuft ungehindert weiter.
• Ein signal-Aufruf lässt maximal einen
wartenden Thread weiterlaufen. Wartet
keiner, so geht der Aufruf verloren.
• Mit jeder Ereignisvariablen ist auch eine
Queue für wartende Thread verknüpft.
• Eventuell gleichzeitig
Ereignisse warten:
auf
verschiedene
- WaitForMultipleObjects( …, &Handles, …).
Betriebssysteme 2003, MS, VS-Informatik, Ulm
152
7.3
Kritische Abschnitte
• = Critical Regions: Programmabschnitte, die
auf gemeinsame Variablen zugreifen und deshalb einer Synchronisierung bedürfen.
• Unterschiedliche Programmabschnitte können
dieselben Variablen nutzen.
=> Nicht der Programmabschnitt sondern das
Variablenobjekt wird geschützt.
• Ziel: wechselseitiger Ausschluss (mutual
exclusion) = max. 1 Thread in krit. Abschnitt.
• Fehlerhafte Lösung:
while (busyFlag) {}; ->
busyFlag=true;
count++;
busyFlag=false;
<- while (busyFlag) {};
busyFlag=true;
count++;
busyFlag=false;
- Dies ist keine Lösung, weil "Testen & Setzen"
des Flags hier wieder nicht atomar geschieht.
• Bem.: Threadprioritäten u. U. verletzt.
• Das Schlüsselwort "synchronized" definiert in
Java einen Kritischen Abschnitt:
- einzelne Anweisung oder Anweisungsgruppe,
- statische oder dynamische Methode,
- ganze Klasse.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
153
7.3.1 Programm "Incrementer.java":
• Zwei Threads inkrementieren gemeinsame
Variablen:
- auf dem Umweg über eine Zwischenvariable,
- Variable "asyn" ohne Synchronisierung,
- Variable "sync" mit Synchronisierung:
public class Incrementer extends Thread{
static Incrementer lnx,rxz;
static long sync=0;
static long asyn=0;
long count=1000*10000;
public static void main(String[] s){
lnx = new Incrementer();
rxz = new Incrementer();
lnx.start(); rxz.start();
}
public void run(){
long zwisch;
// force non atomic
while (count-- > 0) {
zwisch=asyn+1; asyn=zwisch;
synchronized(lnx)
{ zwisch=sync+1; sync=zwisch;};
}
System.out.println("asyn: " + asyn);
System.out.println("sync: " + sync);
}}
• Synchronisierung ist in Java nur auf Objekte
möglich. Hier z.B. auf Objekt "lnx" - ersatz–
weise für die Variablen (asyn, sync).
Betriebssysteme 2003, MS, VS-Informatik, Ulm
154
• Ausgabe von Incrementer z.B.:
asyn: 18213815
sync: 18761335
asyn: 19452479
sync: 20000000
• Wenn eine Inkrementierung unterbrochen
wird und der andere Thread ebenfalls inkre–
mentiert geht eine Inkrementierung verloren.
“lost update problem”
• Ausnahmsweise und je nach Last und Laune
des Betriebssystems läuft das Programm auch
ohne Verlust:
asyn: 19843320
sync: 19843320
asyn: 20000000
sync: 20000000
Betriebssysteme 2003, MS, VS-Informatik, Ulm
155
7.4
Wechselseitiger Ausschluss
7.4.1 Peterson's Algorithmus
• Realisiert wechselseitigen Ausschluß nur abgestützt auf sequentiellen Speicherzugriff:
Program Peterson;
var latest: (first,secnd);
p1Tries, p2Tries: Boolean;
Process Process1;
begin
repeat p1Tries:= true;
latest:= first;
while p2Tries and latest=first do { loop} ;
KritischeRegion1;
p1Tries:= false;
OtherStuff1
until false;
end { Process1 };
Process Process2;
begin
repeat p2Tries:= true;
latest:= secnd;
while p1Tries and latest=secnd do { loop} ;
KritischeRegion2;
p2Tries:= false;
OtherStuff2
until false;
end { Process1 };
Begin p1Tries := false; p2Tries := false;
parbegin Process1; Process2 parend
end { Peterson }.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
156
• Fall A:
p1 kommt zuerst und p2 kommt später. p2 muss
warten bis p1 die Warnungsvariable p1Tries
freigibt.
p1Tries
latest
p2Tries
• Fall B:
p2 kommt als einziger und muss nicht warten bis
p1 die Warnungsvariable p1Tries freigibt.
p1Tries=false
latest
p2Tries
• Bemerkung:
- auf mehrere Threads erweiterbar.
- benötigt keine HW-Unterstützung.
- SW-Erweiterungen ebenfalls unnötig.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
157
7.4.2 Atomare Maschinenoperationen
• Viele CPUs haben Test&Set-Instruktionen:
- für atomare bzw. unteilbare Bustransaktion,
- lesen eines Speicherwortes,
- Speicherwort schreiben:
Speicher
Bus
Prozessoren & DMA
• Unteilbare Bustransaktion:
-
reservieren des Speicherbusses,
kein Zugriff durch andere CPUs,
Cache-Konsistenz gewährleisten,
keine Interrupts an der eigenen CPU,
kein Zugriff durch DMA oder Bus-Master.
• Assembler-Fragment (hypothetisch):
locked
wait:
WORD 0
; = nicht gesperrt
......
TestSet 1
; testen und setzen
JumpH wait ; loop while high
• Bei Uniprozessoren genügt es meist, Unter–
brechungen zu unterdrücken: Intel (CLI, STI).
Betriebssysteme 2003, MS, VS-Informatik, Ulm
158
7.4.3 Semaphor-Variablen
sem>0
sem=0
Warteschlange
• Wartende Threads zu Semaphor.
• Binäre Semaphore mit Werten 0 oder 1.
• Zählende Semaphore mit Werten 0 .. n.
• Semaphor-Operationen:
-
Initialisieren:
InitSem( semVar ),
Prüfen:
P( semVar ),
"Versenden":
V( semVar ),
Originalsprache Holländisch,
vorgeschlagen durch E. Djikstra.
• P(semVar) & V(semVar) sind etwa aequivalent zu Wait(ev) & Signal(ev). Allerdings
verpuffen unerwartete Signale hier nicht.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
159
Beispiel: Synchronisierung mit Semaphor
• Semaphor-Variable dient hier dazu, die Anzahl Nutzer einer Ressource zu beschränken:
#include <windows.h>
#define userLimit = 20;
HANDLE hSem;
void SomeUser() {
// =P();
WaitForSingleObject(hSem,INFINTE);
// kritischer Abschnitt
use_resource();
// =V(); semaphor,release-cnt., before-cnt.
ReleaseSemaphore(hSem,1,NULL);
END SomeUser;
int main() {
// security descr., start-cnt., max.-cnt., name
hSem=CreateSemaphore(NULL,0, userLimit,NULL);
…
}
Betriebssysteme 2003, MS, VS-Informatik, Ulm
160
Realisierung atomarer Semaphoroperationen
• Semantik für P(semVar):
if semVar > 0
then semVar:=semVar-1
else { warten auf V(semVar) }
• Semantik für V(semVar):
if { kein Prozess wartet auf semVar }
then semVar:=semVar+1
else { wartenden Prozess anstossen }
• P und V als atomare bzw. unteilbare Operationen realisieren, sonst entstehen NichtDeterminismen:
• Zur Realisierung von Semaphor-Variablen
verwendet man i. d. R. eine Interruptsperre
oder besondere Test&Set-Instruktionen.
• Für den Fall von scheinbarer Nebenläufigkeit
auf einem Uniprozessor genügt es die Priorität
der P & V-Routinen soweit zu erhöhen, daß
eine Unterbrechung nicht mehr möglich ist.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
161
7.4.4 Monitore
• C. A. Hoare und P. B. Hansen, 1974.
• Sprachkonstrukt für Synchronisierung
serially reusable Module
• Die Monitor-Prozeduren garantieren:
- nur ein Thread jeweils im Monitor,
- kein externer Zugriff auf Monitorvariablen,
- auto. Freigabe des Monitors beim Rücksprung:
Shared Resource
MonitorModul
Proc
Proc
• Im Vergleich dazu sind Semaphore etc. lowlevel Sprachelemente:
- Risiko von Programmierfehlern,
- ohne P() kein gegenseitiger Ausschluß,
- ohne V() eventuell Verklemmung.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
162
Incrementer-Monitor
• Beispiel in "Concurrent Pascal":
monitor Incrementer;
var zaehler: integer;
procedure PlusEins;
begin
zaehler:= zaehler+1
end { PlusEins };
{ P(IncSem) implizit }
{ V(IncSem) implizit }
procedure PlusZwei … end;
begin
zaehler := 0
end { Incrementer }.
• Die Laufzeitumgebung sorgt mit Unterstützung des Compilers dafür, daß sich nur ein
Thread im Monitor befindet.
• Realisiert eine geschützte kritische Region
oder auch mehrere verbundene.
• Passives Programmelement
Modula-2 Module:
ähnlich
wie
- Kapselung ("Information hiding"),
- Module-Initialisierung.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
163
Erweiterung: Warten im Monitor
• Zusätzlich zum impliziten P & V auch noch
Signal & Wait in Monitoren drin erlaubt.
monitor PrintMon;
var printerBusy: Boolean;
printerFree: Condition;
procedure ReservePrinter;
begin
if printerBusy
then wait( printerFree);
printerBusy:= true
end { ReservePrinter};
procedure ReleasePrinter;
begin
printerBusy:= false;
signal( printerFree);
end { ReleasePrinter};
begin
printerBusy:= false
end { PrintMon}.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
164
• Warten im Monitor würde zur Blockierung
führen. wait(<condition>) bewirkt deshalb
eine Verdrängung des Threads nach aussen.
• Aus didaktischen Gründen nicht einfach wait(
printerFree).
• Diskussion um verschachtelte Monitoraufrufe:
- bleiben eingekellerte Monitore blockiert?
- oder wird ein Monitor beim Aufruf des nächsten
freigegeben?
• Signal( thisCondition ) nur am Prozedurende:
- Aufruf aktiviert anderen Thread im Monitor
- und aktueller Thread verläßt Monitor.
wenn Awaited( thisCondition)
dann Resume(thisCondition)
sonst Release(thisMonitor);
Betriebssysteme 2003, MS, VS-Informatik, Ulm
165
7.4.5 Message Passing
• Eine Nachricht ist eine Verallgemeinerung
eines Signales.
• Sie enthält neben der Ereignis-Information
auch noch Daten.
• Empfänger wartet auf eine Nachricht:
receive() anstelle von wait().
• Sender sendet eine Nachricht:
send() anstelle von signal().
• Typisch besonders in Verteilten Systemen:
- RPC, Remote Procedure Call,
- RMI, Remote Method Invocation,
- Socket-gestützte Kommunikation ...
• Socketkommunikation mit den Urfunktionen
("Primitives"):
- Send( SocketID, Message),
- Receive( SocketID, Message),
- Blocking/Nonblocking Send…
• Alternativ: Kommunikation mit Hilfe eines
gemeinsamen Speicherbereichs (lokal oder
verteilt) bzw. gemeinsamer Variablen.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
166
7.5
Klassische Problemstellungen
7.5.1 Erzeuger/Verbraucher-Problem
int
buffer[N];
// Puffer
int
in,out;
// Pufferzeiger
semaphore full=0, empty=N, mutex=1;
Erzeuger:
int item_w;
for (;;) {
produce(&item_w);
P(empty);
P(mutex);
buffer[in]=item_w;
in=(in+1)%N;
V(mutex);
V(full);
}
// noch Platz im Puffer?
// Eintritt in krit. Abschnitt
// ein weiterer Eintrag belegt
Verbraucher:
int item_r;
for (;;) {
P(full);
P(mutex);
item_r=buffer[out];
out=(out+1)%N;
V(mutex);
V(empty);
consume(item_r);
}
// Daten im Puffer?
// Eintritt in krit. Abschnitt
// ein Eintrag wird frei
Betriebssysteme 2003, MS, VS-Informatik, Ulm
167
• Schutz eines Puffers zwischen vielen
parallelen Konsumenten- und Produzententhreads.
• Bem.: Bei nur je einem Konsumenten und
Produzenten können die Event-Variablen
noch als Boolean realisiert werden.
7.5.2 Leser/Schreiber mit Semaphore
• N Leser oder 1 Schreiber parallel erlaubt.
int
readcount=0;
// Anzahl aktiver Leser
semaphore mutex=1, wrt=1;
Leser:
P(mutex);
readcount++;
if (readcount==1)
P(wrt);
V(mutex);
reading();
P(mutex);
readcount--;
if (readcount==0)
V(wrt);
V(mutex);
Schreiber:
P(wrt);
writing();
V(wrt);
// kein Leser aktiv?
// mit Schreiber sync.
// kein Leser mehr aktiv?
// Schreiber zulassen
// jeweils nur 1 Schreiber
Betriebssysteme 2003, MS, VS-Informatik, Ulm
168
7.5.3 Dining Philosophers
• N Philosophen sitzen um einen Tisch; sie
denken und wollen Spaghetti essen.
• Zum Essen benötigt jeder zwei Gabeln gleichzeitig.
• Lösungsansatz 1:
- Funktioniert, aber wenig Parallelität
Philosoph i:
think();
P(mutex);
take_fork(i);
take_fork((i+1)%5);
eat();
put_fork(i);
put_fork((i+1)%5);
V(mutex);
// linke Gabel nehmen
// rechte Gabel nehmen
// linke Gabel ablegen
// rechte Gabel ablegen
Betriebssysteme 2003, MS, VS-Informatik, Ulm
169
• Lösungsansatz 2:
- “state”: THINKING, HUNGRY, EATING.
- Essen nur mögl., wenn kein Nachbar gerade isst.
- N Semaphore S[]: blockieren hungriger
Philosophen, falls Gabeln in Gebrauch.
- LEFT=(i-1)%N; RIGHT=(i+1)%N;
Philosoph i:
think()
take_forks(i);
eat();
put_forks(i);
// beide Gabeln aufnehmen
// beide Gabeln ablegen
take_forks(i) {
P(mutex);
state[i]=HUNGRY;
test(i);
// Versuch beide Gabeln zu nehmen
V(mutex);
P(S[i]); // blockiere, falls Gabeln nicht frei waren
}
put_forks(i) {
P(mutex);
state[i]=THINKING;
test(LEFT);
// will linker Nachbar Gabel?
test(RIGHT);
// will rechter Nachbar Gabel?
V(mutex);
}
test(i) {
// beide Gabeln frei?
if (state[i]==HUNGRY && state[LEFT]!=EATING
&& state[RIGHT]!=EATING)
state[i]= EATING;
V(S[i]);
}
take_
Betriebssysteme 2003, MS, VS-Informatik, Ulm
170
7.6
Verklemmungen
• Verklemmung (engl. Deadlock): zwei oder
mehrere Threads sind blockiert, weil sie
Ressourcen besitzen, die von einem anderen
blockierten Thread benötigt würden.
• Verklemmungsgefährdete Ressourcen: Hauptspeicher, Drucker, Bandstationen, ...
Beispiel: System mit drei Bandstationen
• Drei Threads verlangen erst eine Bandstation
und später noch eine zweite.
• Günstiger Verlauf, die Threads terminieren:
T1
T2
T3
r1
r2
r3
wartet auf
Bandstation
Betriebssysteme 2003, MS, VS-Informatik, Ulm
171
• Ungünstig, kein Thread terminiert:
T1
T2
T3
r1
r2
r3
wartet auf
Bandstation
• Deadlock ist möglich, aber nicht zwingend.
7.6.1 Wartegraph
• Ein gerichteter Graph mit den Threads als
Knoten und Wartebeziehungen als Pfeile heißt
Wartegraph (engl. wait-for graph).
• Eine Verklemmung ist charakterisiert durch
einen Zyklus im Wartegraphen:
T3
wartet auf
T1
wartet auf
T2
wartet auf
T1
T2
wartet auf
direkter
Deadlock
indirekter
Deadlock
Betriebssysteme 2003, MS, VS-Informatik, Ulm
172
7.6.2 Notwendige Bedingungen
• Ist eine dieser Bedingungen verletzt, so ist
keine Verklemmung möglich:
1. wechselseitiger Ausschluss: Die betroffene
Ressource ist nicht gemeinsam benutzbar.
2. Halten und Warten: Wartender Thread besitzt
eine Ressource, während er auf weitere wartet.
3. Keine Verdrängung: Ressourcen können einem
Thread nicht entzogen werden.
4. Zirkuläre Wartesituation.
7.6.3 Gegenmaßnahmen
• Vorbeugen (prevention).
• Vermeiden (avoidance).
• Entdecken (detection).
• Auflösen (resolution).
• Bemerkung:
- die meisten Betriebssysteme ignorieren dieses
Problem (Unix & Windows NT).
- NT: Timeout bei „WaitForSingleObject“.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
173
7.6.4 Verklemmungsvorbeugung
• Methoden um zu verhindern, dass eine der
vier Verklemmungsbedingungen zutrifft.
• Summenbelegung (preclaiming):
- sämtliche jemals benötigten Ressourcen werden
einmalig zu Beginn angefordert.
- unökonomisch & Bedarf schwer abschätzbar.
• Totalfreigabe bei jeder Belegung:
- auch hier wird eine Anforderung aus einem
„besitzlosen“ Zustand vorgenommen und somit
eine zirkuläre Wartesituation vermieden.
Thread
Belegen (r1, r2)
Freigeben (r1, r2)
Belegen (r3)
evt. zwangsweise
Freigeben (r3)
Belegen (r1, r2)
• Belegung gemäß vorgegebener Ordnung:
- Zyklen werden durch das Einhalten einer vorgegebenen Ordnung vermieden.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
174
- Beispiel: Ressourcen seien geordnet (r1, r2, ...)
Thread-1
Thread-2
Belegen ( r1)
Belegen ( r2)
Belegen ( r3)
Belegen ( r3)
Belegen ( r4)
Belegen ( r5)
7.6.5 Verklemmungsvermeidung
• Für jede einzelne Ressourcenanforderung
wird entschieden, ob dadurch ein Deadlock
auftreten kann.
• Voraussetzung: Restanforderung aller Threads
muss bekannt sein.
• Im ungünstigsten Fall werden alle Restanforderungen gleichzeitig gestellt.
• Könnten diese zu einem Zeitpunkt alle erfüllt
werden, so heißt die aktuelle Situation sicher,
andernfalls unsicher.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
175
Beispiel: Bankier Algorithmus (Dijkstra)
• Jeder Thread
nennt die maximale
Anzahl Bandstationen,
die er benötigt
(max[i]=Kreditrahmen).
Deadlock
unsicher
sicher
• Jeder Thread leiht sich
eine Anzahl Stationen aus (loan[i] " max[i]).
• Für Ressourcen mit mehrfachen Instanzen.
• Wie ein Bankier beurteilt das BS die Kreditwürdigkeit der einzelnen Threads (max) und
verteilt entsprechend die Ressourcen (loans).
Sicherer Zustand (12 Stationen):
Anleihe
Kredit
Thread A
1
4
Thread B
4
6
Thread C
5
8
Verfügbar
2
• Vergabe einer Station an B ist zulässig.
• Vergabe an A oder C ist unzulässig und führt
zu einem unsicheren Zustand.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
176
Unsicherer Zustand (12 Stationen):
Anleihe
Kredit
Thread A
1
4
Thread B
4
6
Thread C
6
8
Verfügbar
1
• Für keinen der beteiligten Threads kann die
Terminierung garantiert werden.
• Hoffentlich gibt bald einer der Threads wieder
eine Einheit zurück.
Beurteilung:
• Verhinderung von Verklemmungen
Bedingungen 1 bis 4.
trotz
• Feste Anzahl von Benutzern und verfügbaren
Ressourcen (Defekte nicht einkalkuliert).
• Allozierung und garantierte Rückzahlung in
endlicher Zeit genügt nicht für EchtzeitSysteme.
• Vor.: Threads voneinander unabhängig.
• Bedarf muß zu Beginn der Verarbeitung angemeldet werden.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
177
7.6.6 Verklemmungsentdeckung
• Sind die Restanforderung nicht bekannt, so
kann keine Vermeidung durchgeführt werden.
• Bei Entdeckungsstrategien erlauben das Auftreten von Deadlocks.
• Der Bankier-Algorithmus kann auch hier eingesetzt werden, wenn die Restanforderungen
durch die akt. Anforderungen ersetzt werden.
• Es müssen alle Threads einbezogen werden.
• Aufruf: bei jeder Belegung, periodisch, im
Leerlauf, bei Verdacht, ...
7.6.7 Verklemmungsauflösung
• Durchbrechen einer zirkulären Wartesituation.
• Falls ein Entzug von Ressourcen nicht
möglich ist, so muss mindestens ein Prozeß /
Thread abgebrochen werden.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
178
7.7
Interprozesskommunikation
7.7.1 Klassifikation
• Synchron/asynchron:
- synchron: Sender wird bis zur Auslieferung der
Nachricht blockiert.
- asynchron: Sender arbeitet sofort weiter.
• Gepuffert/ungepuffert:
- gepuffert: u.U. mehrere Nachrichten bündeln.
- ungepuffert: direktes Empfangen/Übetragen.
• Verbindungsorientiert/verbindungslos:
- verbindungsorientiert: expliziter Verbindungsaufbau vor der Kommunikation notwendig.
- verbindungslos: Zieladresse in jeder Nachricht;
Multicast und Broadcast mögl.
• Meldungs-/autragsorientiert:
- Meldung: Sender wird bis zur Bestätigung der
Meldung blockiert.
- Auftrag: Sender wird bis zur Beendigung des
Auftrages blockiert.
• Kommunikationsarten:
- nachrichtenbasiert: Socket, RPC, RMI, Corba, ...
- speicherbasiert: (Distributed) Shared Memory.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
179
7.7.2 Beispiel: Linux
• Interprozesskommunikation (IPC) in UnixSystemen umfasst:
-
Warten auf externe Signale
Steuerung nebenläufiger Prozesse,
Übergeben von Daten und Nachrichten,
Synchronisierung des Ressourcenzugriffs.
• Dazu wird eine Vielfalt von Mechanismen
unterstützt:
Resource
Sharing
SynchroniSierung
Verbindungslose
Nachrichten
Verbindungs
orientierte
Nachrichten
im Kern
Datenstrukturen, Puffer
Semaphore,
CLI/STI
Queues
Signale
zwischen Prozessen
im Netz
Shared Memory
Dateien
Semaphore,
File Locking,
(NFS Files)
Lock Datei
Unix-Domain Datagr.,
Signale,
UDP
Queues
Sockets
(Named) Pipes,
Unix-Domain Streams TCP Sockets
• Zusätzlich System V IPC: Message Queues,
erweiterte Semaphore und Shared Memory.
• Der Linux Kern läuft in einem Adressraum
und im kooperativen Multitasking Modus.
Damit vereinfachen sich die IPC-Verfahren.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
180
Kommunikation über Signale
• Signale sind kurze wichtige Meldungen.
• 32 vordefinierte Systemsignale:
- SIGTERM: Terminierungsaufforderung,
- SIGKILL: ultimative Terminierung,
- SIGUSR1: für Anwendungen, ...
• Signalverarbeitung durch Handler:
- Default-Handler im Kern.
- für Anwendungen optional:
#include <stdio.h>
#include <signal.h>
// Signal auslösen mit: kill –SIGUSR1 pid
void myHandler(int parm) {
printf(“received SIGUSR1\n”);
}
int main() {
struct sigaction action,old;
action.sa.flags=0;
sigemptyset(&action.sa_mask);
action.sa_handler=myHandler;
// Signaltyp, neuer Handler, alter Handler
sigaction(SIGUSR1, &action, &old);
sleep(60);
sigaction(SIGUSR1, &old, NULL);
}
Betriebssysteme 2003, MS, VS-Informatik, Ulm
181
Kommunikation über Dateien
• Konkurrierende Schreibzugriffe auf Dateien
werden durch Open/Close-Routinen geregelt.
• Eventuell nur im Read-Only Mode öffnen.
• Wird die Datei im Multiple Writer Modus
geöffnet, so riskiert man Inkonsistenzen.
• Sperren ganzer Dateien:
- per Lock Datei.
- Oder mit Aufruf flock().
• Sperrung von Dateibereichen:
int sys_fcntl( unsigned int fileDeskriptor,
unsigned int command, /* F_GETLK, ... */
struct flock * fileLock ) ;
• Datenstruktur im Betriebssystem:
FileLock
FileLock
FileLock
FileDeskriptor
• struct flock:
- Lesesperre, Schreibsperre, Dateibereich, PID.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
182
Kommunikation über Pipes
• Klassische IPC Methode unter Unix.
• Für Kommunikation zw. verwandten Proz.
• Implizite Erzeugung einer anonymen Pipe
mit der Befehlszeile:
% ls -l | more
• Nutzung einer benannten Pipe (named pipe)
mit Befehlszeilen:
% mkfifo nmPip
% ls -l >nmPip & more <nmPip
• Lesen und Schreiben auf eine benannte Pipe
wie auf eine Datei (halbduplex).
• Zusätzlich jedoch mehrfache Leser und
Schreiber möglich:
named pipe
writers
readers
Betriebssysteme 2003, MS, VS-Informatik, Ulm
183
• Beispiel: Unix-Pipe zwischen Vater und Sohn
#include <stdio.h>
#include <unistd.h>
int main() {
char
int
in
data[80];
rb;
// nr of read bytes
pipe_ends[2]; // handles: read=0; write=1
pipe(pipe_ends);
if (fork()==0) {
// child process
close(pipe_ends[1]); // code write port
rb=read(pipe_ends[0], data,80);
data[rb]=’\0’;
// terminate string
printf ("%s\n",data);
close(pipe_ends[0]); // close read port
}
else {
// father process
close(pipe_ends[0]); // close read port
write(pipe_ends[1],"hello",5);
close(pipe_ends[1]); // close write port
}
}
Betriebssysteme 2003, MS, VS-Informatik, Ulm
184
7.7.3 Beispiel: Windows NT
• Vielfältige Mechanismen:
-
Mutex, Events, Semaphore,
Named Pipes, Mailslots,
Shared Memory,
LPC & RPC.
Local Procedure Call
• Prozeduraufruf über Adressraumgrenzen hinweg, abgebildet auf Nachrichtenübertragung.
• LPC Varianten:
a) Nachricht an Port-Objekt im Server,
b) Zeiger auf gemeinsamen Speicher senden,
c) "Quick LPC".
• Nachrichtentransport zum Port-Objekt im
Server-Subsystem (Fall a,b):
OpenConnection
Connection
Port
connected
Server
Subsystem
Klient
service reply
service request
Betriebssysteme 2003, MS, VS-Informatik, Ulm
185
Quick LPC:
• Komponenten, jeweils pro Klient:
- 64 KB gemeinsamer Speicher,
- eigener Server-Thread,
- ein Event-Paar.
• Vermeidet Communication-Ports mit Queues.
• Nachrichten und Daten in Shared-Memory.
• Executive signalisiert die Events.
• Bewertung:
- schnelle Signalisierung,
- Speicheroverhead für die Threads.
Klient
Server
Subsystem
Betriebssysteme 2003, MS, VS-Informatik, Ulm
186
8. Ein-/Ausgabe
8.1
Peripherie
PC Busstrukturen:
CPU
AGP
Host-PCI
Brücke
Speicher
PCI
USB
IDE
UDMA
PCI-ISA
ISA
- Host-PCI Brücke (auch Nordbrücke) als DatenDrehscheibe zw.: Frontside-, PCI-, AGP-Bus.
- PCI: 32/64 Bit; Bandbreite: 132 - 512 Mbyte/s.
- PCI-ISA Brücke (auch Südbrücke) zur
Anbindung von USB-, IDE-, ISA-Bus.
- ISA: 8/16 Bit; Bandbreite: 8 - 16 Mbyte/s.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
187
Datenübertragung:
• Programmed I/O:
- CPU überträgt wortweise Daten aus dem
Hauptspeicher in Datenregister des Gerätes.
- wird in der Regel nicht verwendet, da teuer.
• Direkter Speicherzugriff:
- DMA für ISA-Geräte
- Busmaster für PCI-Geräte.
- CPU initiert nur den Transfer.
CPU
RAM
Gerät
Steuerung:
• CPU startet einen E/A-Auftrag.
• Nach Beenden eines E/As muss der Prozessor
informiert werden:
- Polling: CPU kann Statusregister des Geräts
gelegentlich prüfen, was aber ineffizient ist.
- Interrupt: Am Ende des E/As löst das Gerät
eine Unterbrechung aus (üblicher Ansatz).
Betriebssysteme 2003, MS, VS-Informatik, Ulm
188
8.2
Unterbrechungen
• Ein Programm wird unterbrochen zugunsten
einer Aufgabe mit höherer Priorität:
• Der Zustand des unterbrochenen Programmes
wird aufgezeichnet und nach Abschluß der
Unterbrechung wiederhergestellt.
• Mit der Ausführung des unterbrochenen
Programmes wird später unmittelbar nach der
Unterbrechungstelle fortgefahren:
Anwenderprogramm
Unterbrechungsroutine
Device
Ret.-Adr.
Flags
Stack
Betriebssysteme 2003, MS, VS-Informatik, Ulm
189
• Lesen & Schreiben aus externen Gerätepuffern:
-
Tastatur, Serielle Datenleitung,
Festplattenkontroller,
Netzwerkkarte,
Strahlrücklauf ...
• Behandlung von internen Fehlersituationen:
-
allgemeine Speicherschutzverletzung,
ungültige Maschineninstruktion,
Paritätsfehler im Hauptspeicher,
arithmetische Fehlersituation,
ausgelagerte Speicherseite,
Debugging ...
• Explizite Anforderung von DOS-Diensten:
- Assemblerinstruktion INT <intcode>,
- DOS-Dienste über INT 21h.
• BIOS-Dienste anfordern:
-
INT
INT
INT
INT
INT
INT
INT
INT
10h
11h
12h
13h
14h
16h
17h
1Ah
Videokarte
Konfiguration feststellen
RAM-Speichergrösse feststellen
Disketten & Festplatten steuern
Serielle Schnittstelle steuern
Tastatur steuern
Parallelschnittstelle
Uhrzeit, PCI & PCMCIA(PC)
Betriebssysteme 2003, MS, VS-Informatik, Ulm
190
8.2.1 Maskieren von Interrupts
• Aufruf von Interrupts möglichst nicht rekursiv
zulassen, da schwer handhabbar.
• Zu Beginn einer Interrupt-Sequenz sind die
Interrupts automatisch ausgeschlossen.
• Anschliessend wird der Interrupt bestätigt und
nachfolgende Interrupts kommen durch:
- IRET oder POPF beim Rücksprung der Routine,
- EOI-Befehl an den Interrupt-Kontroller.
• Interrupts im Prozessor expizit maskieren:
- CLI löscht Interrupt-Enable Bit im Statusreg.,
- STI setzt das Bit wieder.
• Möglichkeiten der Interruptmaskierung:
- Enable-Bit im CPU-Statusregister,
- Mask-Register im 8259A-Kontroller,
- auch NMI kann maskiert werden (Port $70).
Betriebssysteme 2003, MS, VS-Informatik, Ulm
191
8.2.2 Interrupttabelle
• Externe und interne Unterbrechungen wählen
jeweils einen aus 256 Tabelleneinträgen aus:
NMI
255
Slave
INTR
INTA
Vektor#
Master
CPU
Interrupt
Entry
IRQ-Pin#
8259A
Programmierter
Offset
IRQ 0,1,3-15
0 IDTR
• Index in die Tabelle:
- für interne U. durch CPU-Hardware,
- für externe U. durch Interrupt-Kontroller,
- Ausnahme: NMI direkt auf Eintrag #2.
• Startadresse der Interrupttabelle:
- Real-Mode:
ab Speicherstelle 0,
- Protected M.: via IDTR-Register.
• Maximal 256 Einträge:
- Real-Mode: jeweils 4 Byte als Segment:Offset,
- Protected: 8 Byte Interrupt-Deskriporen.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
192
8.2.3 Externe Unterbrechungen
• Externe Interrupts von der Hauptplatine:
- IRQ-0: Timer-Interrupt,
- IRQ-1: Tastatur-Interrupt,
- IRQ-2: sekundärer Interrupt-Kontroller (wird
nicht ausgelöst)
- IRQ-8: Echtzeit-Uhr (RTC),
- IRQ-13: Koprozessor.
• Externe Interupts vom ISA-Bus:
- IRQ-[3 .. 7, 9 .. 12, 14,15],
- IRQ-[3, 4, 5] für COM1, COM2, LPT1 evtl. im
CMOS-Setup anders zuordnen,
- für Disks, Netzwerkadapter, Soundkarten, SCSIKontroller, Videokarten, Steuerungen, ...
• Interrupts vom PCI-Bus werden durch die
PCI-Bridge auf ISA-Interrupts abgebildet.
• PCI erlaubt "Shared Interrupts".
Betriebssysteme 2003, MS, VS-Informatik, Ulm
193
8.2.4 Verketten mit Interrupt-Routine
• Eine neuer Interrupt-Handler wird eingetragen
und ruft am Ende die bisherige Routine auf.
• Interrupt-Return (IRET):
- Flags vom Stack herunterholen,
- und ins Flag-Register laden,
- Rücksprungadresse holen.
• Die bisherige Routine erwartet ein Flagwort
auf dem Stack:
- Assemblereinschub "asm pushf end" lädt dieses.
• Das Schlüsselwort "Interrupt" sorgt für ein
"IRET" am Ende der eigenen Prozedur.
Interrupttabelle
Flags
:
Flags
neue Int.routine
IRET
alte Int.routine
IRET
Betriebssysteme 2003, MS, VS-Informatik, Ulm
194
Programmbeispiel "TimerChain.pas"
• Zählt die Systemuhr mit.
• Prozedurvariable für alten Handler.
• Ausgabe: ca. 1 Punkt pro Sekunde:
......... Done
(*$F+ Force far jumps *)
program TimerChain;
uses Crt, Dos;
var oldHandler : procedure;
ticks
: integer;
procedure MyHandler; Interrupt;
begin ticks := ticks + 1;
if ( ticks mod 18 )=0 then write( ' .' );
asm pushf end; (* simulate flags on stack *)
oldHandler; (* chain to old Handler *)
end;
begin ticks:=0;
GetIntVec( 8 , addr(oldHandler) );
SetIntVec( 8 , addr(MyHandler) );
repeat until ticks=182;
SetIntVec( 8 , addr(oldHandler) );
writeln( 'Done' );
end.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
195
8.2.5 Timer-Interrupt
• Alte Int.Routine aufbewahren & ersetzen.
• Prozeduradressen übergeben.
• Interrupt-Kontroller explizit mit EOI auf
Port[$20] zurücksetzen.
(*$F+ Force far jumps *)
program MilliTimer; (* provides a Millisecond timer *)
uses Crt, Dos;
const milliSec = 4772720 div 4000;
var
oldHandler : procedure;
ticks
: real;
procedure SetTimer( Handler: pointer; period: integer);
begin Port[$43] := $34; (* select timer 0, function 2 *)
Port[$40] := period mod 256; (* Low byte *)
Port[$40] := period div 256; (* High byte *)
SetIntVec( 8 , Handler);
end;
procedure MyHandler; Interrupt;
begin ticks := ticks + 1;
port[$20] := $20; (* EOI to 8259 *)
end;
begin ticks:=0;
GetIntVec( 8 , addr( oldHandler ) );
SetTimer( addr( myHandler ), milliSec );
repeat until keypressed;
SetTimer( addr( oldHandler), 0 (* is Maximum*) );
writeln( ticks/1000:8:3, ' sec' );
end.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
196
8.3
E/A-Software
Ziele:
• Komplexität und Heterogenität der Geräte
verbergen.
• Geräteunabhängigkeit:
- E/A-Schnittstelle soll unabhängig vom Gerät
implementiert werden können.
- einheitl., geräteunabhängige Namensstrukturen.
• Virtualisierung von Geräten.
• Fehlerbehandlung.
• Pufferung von Daten.
• Zugriffskontrolle.
E/A-Software Struktur:
Anwendungen
User-Level E/A-Software
E/A-Subsystem
Gerätetreiber
Hardware
Betriebssysteme 2003, MS, VS-Informatik, Ulm
197
8.3.1 User-Level E/A-Software
• Bereitstellung von Bibliotheksfunktionen:
- open, read, write, close, ...
- printf, ioctl, ...
• Systemaufruf zur Ausführung eines Betriebssystemdienstes
Bilden der notwendigen
Parameterstruktur.
• Spooling: (z.B. Drucker)
- Unterstützung paralleler E/A auf Geräte, die
nicht gleichzeitig mehrfach nutzbar sind.
- Alle Aufträge werden in Spooling-Verzeichnis
abgelegt.
- Spezieller Daemon-Prozess selektiert Aufträge
und führt E/A auf Gerät durch.
8.3.2 E/A-Subsystem im Kern
• Bereitstellen einheitl. Geräteschnittstellen für
Gerätetreiber:
- Standard-Interfaces für Geräte-Kategorien:
z.B. Block- und zeichenorientierte Geräte.
- Verwaltung der Namen von Dateien & Geräten.
• Scheduling von E/A-Aufträgen (z.B. HDD).
• Zugriffskontrolle.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
198
• Konfiguration/Initialisierung der Geräte.
• Zuordnen & Freigeben von Geräten.
• Puffern:
- Eingaben: verzögert an Anwendung Puffern.
- Ausgaben: unterschiedliche Geschwindigkeit
von Erzeuger & Verbraucher Daten kopieren.
• Fehlerbehandlung und –berichte.
8.3.3 Gerätezugriff
Gerätezugriff in Unix
• Gerät:
-
Abstraktion=Datei (im Verzeichnis „/dev“)
spezieller I-Node,
werden wie Dateien angesprochen,
nicht direkt zugreifbar für Standard-Benutzer.
• Blockorientierte Geräte
- Speicherung der Informationen in BlockEinheiten, z.B. 1024 Bytes.
- Beispiel: Festplatten.
- Kommandos: read, write.
• Zeichenorientierte Geräte
- Erzeugen bzw. Akzeptieren von Zeichenströmen
- Beispiel: Tastatur
- Kommandos: get, put.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
199
Gerätezugriff in Windows NT
• Gerät:
- Abstraktion=Objekt,
- tauchen nicht im Dateisystem auf.
- nicht direkt zugreifbar für Standard-Benutzer.
• Kommandos: Öffnen, Lesen, Schreiben und
Schließen, wie bei Dateien.
• Aber verschiedene Geräteklassen (z.B. Netzwerk, Modem, Grafik, Drucker) mit jeweils
spezifischen Laufzeitfunktionen.
• Komplizierte Treiberarchitektur (~ 1.000 Fkt.
im Kern für Treiber-Entwickler vorhanden).
8.3.4 Pufferung
Eingangspufferung
• Ungepuffert: Problem häufige Prozeßwechsel
teuer (z.B. pro Tastendruck)
• Puffern im Anwendungsadressraum:
- Vorteil: kein Umkopieren
- Nachteil: Speicherseiten der anfragenden Anwendung müssen zugreifbar sein.
vielleicht ist gerade ein anderer Prozeß aktiv.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
200
• Doppeltes Puffern: Daten müssen umkopiert
werden, aber sonst keine Probleme.
User
Kern
ungepuffert
doppeltes
Puffern
Ausgangspufferung
• Benutzer übergibt mit write Daten an Kern.
• Kern übernimmt die Daten in seinen Puffer.
• Der Prozeß kann seinen eigenen Puffer sofort
weiterverwenden.
• Problem: Leistung.
• Beispiel: Datenübertragung über Netzwerk:
Computer-1
Computer-2
User
Kern
Netzwerkkarte
Betriebssysteme 2003, MS, VS-Informatik, Ulm
201
8.3.5 Gerätetreiber
• Treiber laufen in der Regel im BS-Kern:
-
greifen direkt auf HW zu.
haben höchste Privilegstufe.
Fehler führt zum Systemabsturz.
benötigen klar definierte Schnittstellen.
• Aufgaben eines Gerätetreibers:
-
Prüfen und Übersetzen der Parameter,
Statusüberprüfung, Starten d. Geräts,
Absetzen einer Befehlssequenz,
Fehlerbehandlung.
• API: Funktionen zum Öffnen, Schreiben,
Lesen, Schliessen, ...:
- verbirgt gerätespezifische Details,
- exportiert beim Laden des Treibers,
- Schnittstelle durch E/A-Subsystem definiert.
• Gerätekontrollblock: zum Speichern von
Zustandsinformationen pro Gerät.
• Gerätetreiber
(abstrakt):
GeräteKontrollBlock
API
Gerätetreiber
inkl. InterruptBehandlung
Betriebssysteme 2003, MS, VS-Informatik, Ulm
202
Windows NT Treiber
• Windows Driver Model (WDM):
-
Treiber werden dynamisch geladen,
PnP- und Power-Management,
geschichtetes Treibermodell,
Dateien mit Endung „.sys“,
in „\system32\drivers“.
Einstieg „DriverEntry“.
• I/O-Manager (Kernmodul) kommuniziert mit
Treibern nur asynchron über sogenannte I/O
Request Packets (IRPs).
• IRP ist variable große Datenstruktur für die
Unterstützung eines Treiber-Schichtenmodells
• Vordefinierte Funktionscodes: Create, Close,
Read, Write, ...
Stackeintrag
IRP_MJ_WRITE
Length
ByteOffset
Header
IoStatus
* SysBuffer
*Mdl
* UserBuffer
Cancel
IRP
Header
..
.
Stack
Betriebssysteme 2003, MS, VS-Informatik, Ulm
203
• Treiber kann beim Abschluss eines IRPs die
Priorität des wartenden Threads erhöhen.
• Treiber kommunizieren untereinander ebenfalls asynchron:
Driver -2
Driver -1
I/O-Manager
Driver -0
Gerät
• Aber auch direkte Aufrufe zwischen Treibern
möglich:
- nicht empfohlen.
- Funktionen exportieren (wie bei DLLs).
- Importieren eines anderen Treibers bedeutet, daß
dieser auto. mitgeladen wird.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
204
WDM-Treiberstapel:
• FDO behandelt typischerweise I/O IRPs.
• PnP & Power-IRPs traversieren ganzen Stack.
• PDO wird durch den Bus-Treiber erzeugt.
• FDO's und Filter werden in "AddDevice" erzeugt (Parameter ist PDO).
IRP
IRP
Upper
Upper Class
Class Filters
Filters
Upper
Upper Device
Device Filters
Filters
FDO
FDO
Functional
Functional Device
Device Object
Object
Lower
Lower Class
Class Filters
Filters
Lower
Lower Device
Device Filters
Filters
PDO
PDO
Physical
Physical Device
Device Object
Object
DevNode
• Mehr Infos in Systemprogrammierung II.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
205
Linux Treiber
• Treiber:
- statisch mit Kern gebunden
- oder dynamisch ladbares Modul.
• Modul:
- muss zwei Funktionen exportieren:
int init_module(void);
void cleanup_module(void) ;
- Treiber registriert sich mit register_chrdev.
- hierbei Fkt. in definierter Struktur exportieren.
• Zuordnung über Spezialdateien in /dev:
- Major-Number: identifiziert Treiber.
- Minor-Number (0-255): Geräte-ID.
Typ+Rechte
Maj.,Min.
brw-rw---- 1 root disk 3,0
brw-rw---- 1 root disk 3,1
crw-rw-rw- 1 root tty 2,176
Name
Aug 31 01:31 hda
Aug 31 01:31 hda1
Aug 31 01:31 ptya0
• Kein Schichtenmodell wie in Windows NT.
• Nebenläufigkeit:
- verschiedener Warteschlangen im Kern,
- entspricht Koroutinen,
- kein Threads.
• Rubini, Alessandro: Linux Device Drivers,
O’Reilly, 2nd Edition, 2001.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
206
8.3.6 E/A- Aufrufe
• Synchroner Aufruf (blockierend):
- Aufruf kehrt erst zurück, wenn E/A fertig.
- Anwendung wird verdrängt und am Ende des
Systemaufrufs wieder aktiviert.
- Blockierende E/A ist für Entwickler einfacher
Realisierung durch separaten Thread.
• Asynchroner Aufruf (nicht-blockierend):
- kehren sofort zum Aufrufer zurück.
- Programm selbst kann E/A-Wartezeiten
berücksichtigen
- Ergebnis als Nachricht oder Callback-Aufruf.
Aufrufer
Callback
Request-Queue
Element
I/O-Task
Async.
Aufruf
BS
CompletionCode
Betriebssysteme 2003, MS, VS-Informatik, Ulm
207
Beispiel: Windows NT
• Beispiel: asynchrones Schreiben in eine Datei
dwErrorCode,
void CALLBACK Compl( DWORD
DWORD
dwWritten,
OVERLAPPED *pOverlapped.
);
int main() {
HANDLE
OVERLAPPED
char
hFile;
ov;
*data=“hello world“;
hFile = CreateFile(
"a:\\test.txt",
GENERIC_WRITE,
// write access
0, NULL,
// share mode & security
CREATE_ALWAYS,
// creation mode
FILE_ATTRIBUTE_NORMAL|
FILE_FLAG_OVERLAPPED,
NULL
// template file
);
ov.Offset
= 0;
ov.OffsetHigh = 0;
// file-pos
WriteFileEx(hFile, &data, strlen(data), &ov, &Compl);
CloseHandle(hFile);
}
Betriebssysteme 2003, MS, VS-Informatik, Ulm
208
9. Namensdienste
9.1
Namen & Adressen
9.1.1 Begriffliches
• people prefer names, machines use addresses
• Namen in Betriebssystemen:
-
WWW, E-Mail, ...
Rechner, Benutzer, ...
Dateien, Verzeichnisse, ...
Geräte, Dienste, Fenster, ...
Packages, Klassen, Methoden,Variablen, ....
• Gründe für Benennung:
- Erklärung,
- Lokalisierung,
- Identifizierung.
• Namenskonvention: Regeln für den Aufbau
von gültigen Namen:
-
UNC: \\fix\public
URL: http://cool.uni-ulm.de/zeux
Java: class Test1 aber class 1Test
Dateien: FAT16 Dateinamen mit 8+3 Zeichen
• Namensraum: Menge aller gültigen Namen,
die eine Namenskonvention erfüllen.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
209
• Binden: Beziehung zw. Namen und Adresse
• Strukturierung von Namen:
- Flach: unstrukturiert, beliebige Zeichenfolge.
- Hierarchisch: syntaktisch strukturiert.
• Flache Namen:
- Eindeutigkeit schwer prüfbar
- Bsp.: „Schulthess“, „Schoettner“, „Wende“
• Hierarchische Namen:
- „www.uni-ulm.de“
- „c:\winnt\system32\drivers“
• Namensdienst: Datenbasis, welche die Zuordnung von Namen zu Adressen speichert.
• Namensauflösung:
- Dynamisch zur Laufzeit,
- Statisch zur Übersetzungszeit,
- Rückwärtsrichtung: z.B. Debugger.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
210
9.1.2 Lokale Namensdienste
• Benutzerverwaltung:
- Flacher Namensraum,
- Benutzer- und Gruppennamen.
• Dateisysteme:
- Flache Dateinamen,
- Hierarchische Pfadnamen,
- Unix: eine Wurzel „\“, Microsoft: „A:“, „C:“, ...
Betriebssysteme 2003, MS, VS-Informatik, Ulm
211
• Software-Komponenten:
- JVM: Java Packages, Klassen,
- BS: DLLs, Shared Libraries, ...
- COM-Laufzeitbibliothek: COM-Objekte.
• GUI-Elemente und Betriebsmittel:
- Flache Namen,
- Betriebsmittel: Prozesse, Semaphore, ...
- GUI-Elemente: Fenster, Controls, Ressourcen.
• Compiler:
- Buchführung in Symboltabellen,
- Sichtbarkeitsregeln für Namen (Scopes),
- Namenskonventionen abhängig von Sprache.
• Lader: Zuordnung Klasse & Deskriptor, ...
• Konfigurationsverwaltung:
- Flache Namen,
- Benutzerkonfiguration: z.B. Desktop,
- Maschinenspez. Einstellungen (z.B. IP-Adresse)
Betriebssysteme 2003, MS, VS-Informatik, Ulm
212
9.1.3 Verteilte Namensdienste
• Ziele:
-
Effizienz,
Datenschutz,
Selbstkonfigurierung,
Verfügbarkeit & Skalierbarkeit.
• Verzeichnisdienste (z.B. X.500, NDS, ADSI):
- ähnliche Funktionalität wie ein Telefonbuch,
- Durchsuchen mit partiellen Informationen mögl.
- bieten hohe Flexiblität, aber oft eingeschränkte
Skalierbarkeit.
• Verteilte Dateisysteme (z.B. NFS, Coda):
- Logische Zusammenfassung lokaler Dateiverzeichnisse verschied. Rechner eines Netzes.
- Mount-Tabellen erforderlich mit u.U.
aufwendiger Administrierung.
- Konsistenzprobleme bei Replikation
• Globale Namensverwaltungen (z.B. DNS):
-
Delegation v. Zuständigkeiten f. Unterbereiche.
Hierarchische Organisation des Namensraumes.
Ausfallsicherheit durch Replikation.
Rekonfiguration ist aufwendig.
Effizienz durch Vorhalten.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
213
9.2
Beispiel: JavaOS
Root
Temp
Gerät
Interface
Alias
nicht-persistent
Software
Config
persistent
• Java System Database (JSD):
-
Hierarchischer Namensraum,
Sammlung von benannten Objekten,
Nachfolger sind horizontal verknüpft,
Objekt durch Pfadnamen eindeutig bestimmt.
• Format eines Eintrages:
Name(String)
Status (Drafted, Published, ...)
Parent Entry Link
Sibling Entry Links
Child Entry Link
Lock
Manager
Generation Number
+
Entry-Specific Properties
Betriebssysteme 2003, MS, VS-Informatik, Ulm
214
9.3
Beispiel: Windows NT
• Objekt-Manager mit zentralem Namensdienst:
- Funktionen in NTOSKRNL.EXE,
- Objekte werden nur zum Auffinden über den
Namen identifiziert, danach über ein Handle,
- Nicht alle Objekte sind im User-Mode sichtbar.
• Format eines Eintrages:
Name(String)
Directory
Security
Open
Handle
Descriptor
Permanent/Temporary
Counter
Kernel/User
Type
mode Pointer
...
Object
Header
Type
Object
Object Body
• Namen von Laufwerken (A:) sind intern durch
Aliase realisiert:
\
Device
DosDevices
...
Floppy0
A:
\Device\Floppy0
...
...
Betriebssysteme 2003, MS, VS-Informatik, Ulm
215
9.4
Konfigurationsverwaltung
9.4.1 Einführung
• Konfigurieren ist keine triviale Aufgabe:
- Viele Ebenen: Hardware, System, Benutzer,
- Viele Werkzeuge: BIOS-Setup, BS-Tools, ...
• Hardware:
- ISA: Interrupt-Nummer durch Jumper,
- PnP: dynamisches Aushandeln von Ressourcen.
• Plug and Play:
-
max. 31 Geräte pro PCI-Bus,
max. 255 PCI Busse (hierarchisch),
256 Byte Konfigurationsadressraum,
BIOS handelt Interrupts & Speicher aus.
• BIOS-Setup:
- Festplatten (logische Geometrie),
- Chipset Einstellungen (Timing für Speicher).
• BS-Konfiguration:
- Treiber: Parameter, Ladezeitpunkt, ...
- Protokolle: Bindungen, IP-Adresse, ...
- Benutzerkonten: Rechte, Gültigkeitsdauer, ...
• Benutzereinstellungen:
- Desktop (Ordner, Erscheinung, ...),
- Anwendungsspez.: E-Mail-Adresse, ...
Betriebssysteme 2003, MS, VS-Informatik, Ulm
216
9.4.2 Beispiel: JavaOS
• Informationen über Maschinen und Benutzer
auf einem zentralen Server gespeichert.
• Bootphase nutzt nur Teilbaum „Machine“
• Durch das Anmelden eines Benutzers werden
Teile aus „User“ eingeblendet.
Config
User
Users
Machine
Groups
Platforms
Identifiers
Profiles
• Werkzeug: JavaOS Configuarion Tool (JCT).
• JCT erzeugt ein Master Client File (MCF).
Betriebssysteme 2003, MS, VS-Informatik, Ulm
217
9.4.3 Beispiel: Windows NT Registry
• Registry: Zentrale Konfigurationsdatenbank.
• Aufbau:
- Persistente Daten: system.dat & user.dat,
- Flüchtige Infos im HS (z.B. laufende Prozesse).
• Programme greifen massiv auf Registry zu:
- Netscape Gold 3.0 starten: ~ 1.400 Zugriffe,
- Dokument in Winword öffnen: ~ 200 Zugriffe.
• Zugriff auf Registry über:
- Systemaufrufe,
- Werkzeuge: regedit.exe,
- Dateien mit Endung *.reg.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
218
• Probleme der Registry:
-
wächst durch Relikte von entfernten Prog.,
unübersichtlich, da zu wenig standardisiert,
falsche Einstellung führen u.U. zum Absturz,
je größer die Registry wird, desto langsamer
wird das BS Neuinstallation des Rechners.
• Systemkonfiguration in der Registry:
- Suchpfade: zusätzlich zu „PATH“
HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths
- DLLs:
HKLM\Software\Microsoft\Windows\CurrentVersion\SharedDLLs
- Deinstallationsprogramme:
HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
- Drucker:
HKCC\System\CurrentVersion\Control\Print\Printers
- Treiber:
HKLM\System\CurrentControlSet\Services
• Anwendungskonfiguration:
- Empfehlung:
HKLM\Software\<Firmen-Name>\<Programm-Name>\<Version>
• Benutzereinstellungen:
- Pfad der Benutzerprofile:
HKLM\Software\Microsoft\Windows\CurrentVersion\ProfileList
- Anpassen von Anwendungen:
HKCU\Software\<Firmen-Name>\<Programm-Name>
Betriebssysteme 2003, MS, VS-Informatik, Ulm
219
• Beispiel: Schlüssel und Wert anlegen
#define NAME "Software\\Abteilung VS\\PlurixServer"
main()
{
HKEY
char
char
DWORD
hNewKey;
*szNewKey=NAME;
*szCont = "zeux";
dwDisposition;
// handle to new key
// name of new key
// name of value
// performed action
RegCreateKeyEx(
HKEY_LOCAL_MACHINE, // root-key
szNewKey,
// new key
0,
// reserved
"",
// unused class str
REG_OPTION_NON_VOLATILE,// persistent
KEY_ALL_ACCESS,
// access rights
NULL,
// security
&hNewKey,
// handle to new key
&dwDisposition
// performed action
);
RegSetValueEx(
hKey,
"String",
0,
REG_SZ,
(LPBYTE)szCont,
strlen(szCont)+1
);
// handle to key
// name of value
// reserved
// type of value
// string data
// string length
RegCloseKey(hNewKey);
}
Betriebssysteme 2003, MS, VS-Informatik, Ulm
220
9.5
Internet Domain Name Service
• DNS wurde 1987 eingeführt (RFC 1034).
• Verwaltet den Internet Namensraum.
• Merkmale:
-
hierarchisch strukturiert,
ersetzt zentrale Hosts-Tabellen,
verwaltet Millionen von rel. stat. Adressen,
Zuordnung von DNS-Namen & IP-Adressen.
• Organisation des Namensraumes:
- organisatorisch innerhalb der USA,
- geographisch auf der restlichen Welt.
Root
COM
EDU
GOV
UNI-X
UNI-Y
INST-A
Host
A
DE
Host
B
Betriebssysteme 2003, MS, VS-Informatik, Ulm
221
• Domain-Namen:
- Zeichenketten durch „.“ konkateniert,
- ortsunabhängig & immer absolut zur Wurzel.
• DNS Namer-Sever:
- Namensdaten primär aus lokalen Domäne,
- zusätzlich Adressen anderer Name-Server.
• Namensdaten werden in Zonen unterteilt:
- Zonen def. administrative Einheiten,
- Zonen-Konfigurationsdatei enthält Adresse &
Namen von anderen Name-Servern.
• Verfügbarkeit:
- Replikation auf mind. zwei unabh. Servern,
- primäre und sekundäre Zonen-Server,
- Vorhalten von Anfragen mit TTL (TimeToLive)
• Beispiel: Domains und Zonen
„“
nz
au
gov
com
edu
Zone au
Domain au
Betriebssysteme 2003, MS, VS-Informatik, Ulm
222
• Im Schnitt wird eine Name durch zwei
Resolutionsschritte aufgelöst
my.mac.gov.au ?
Name
Server
siehe au
„“
Name Server
au
gov.au
Name Server
gov.au
mac.gov.au
Name Server
Antwort
Anfrage
mac.gov.au
my.mac.gov.au
Name Server
Anfrager
• siehe auch: www.scit.wlv.ac.uk/~jphb/comms/dns.html
Betriebssysteme 2003, MS, VS-Informatik, Ulm
223
10.
Bibliotheken
10.1 Programmierschnittstellen
• Viele Schnittstellen auf verschied. Ebenen:
- HW: Register memory-mapped od. port-basiert.
- Treiber:
o nutzen Kernfunktionen.
o Implementieren vordef. Schnittstelle.
- Kern:
o Aufruf aus User-Mode per SW-Interrupt.
o Funktionsnummer indiziert in Fkt.-Tab.
- System-DLLs:
o prüfen Parameter, zusätzl. Fkt.
o führen Kernaufruf durch.
- User-DLLs & Dienste: zusätzliche Fkt.
Anwendungen
Middleware
User-DLLs
Dienste
System-DLLs
user-mode
kernel-mode
Kern
Treiber
Hardware
Betriebssysteme 2003, MS, VS-Informatik, Ulm
224
10.2 Prozedurbasierte Bibliotheken
• Als Arbeitserleichterung für Programmierer.
• Programmierschnittstelle zum System (API).
• Beispiele:
-
DirectX:
"Win32"
Open GL:
RPC:
Multimedia & Spiele,
Betriebssystemdienste,
Open Graphics Language,
Remote Procedure Call, …
10.2.1 Statische Bibliotheken
• Bibliotheken werden mit einem Programm in
einer Datei gebunden:
winword.exe
• Linux: test.a.4
excel.exe
Windows: myBib.lib
• Vorteile: immer alle Funktionen vorhanden.
• Nachteile:
- längere Ladezeiten,
- Speicherverschwendung,
- schlechte Erweiterbarkeit.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
225
10.2.2 Dynamische Bibliotheken
• Gemeinsam nutzbar durch mehrere Prozesse.
• Unterstützt in allen Betriebssystemen:
- Apple Shared Library Manager für MacOS.
- Dynamic Link Libraries für Windows.
- Shared Libraries in Linux.
• Linux: libc.so.6.0.1
winword.exe
Windows: gdi32.dll
excel.exe
• Eine DLL ist eine Bibliothek, die zur Laufzeit
(beim Programmstart) geladen und mit dem
Programm verbunden (gelinkt) wird.
• Vorteile:
- nur benötigte Bibliotheken laden,
- gute Erweiterbarkeit,
- Speicherersparnis.
• Nachteile:
- Es können Laufzeitfehler durch unabsichtlich
gelöschte Bibliotheken entstehen.
- Meist verschied. Versionen einer Bibliothek im
System (teilw. unbenutzt) „DLL hell“.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
226
10.2.3 Fallstudie: Windows DLLs
Aufruf einer Biblioheksfunktion
• Konsolenapplikation in C:
#include "windows.h"
int main(int argcount, char* argvec[]){
return MessageBoxA(
NULL, "Boxtext(s)", "Boxtitel", MB_OK);
}
• Zeigt eine MessageBox (ASCII-Variante):
• #include "windows.h":
- includiert rekursiv weitere *.h-Dateien,
- für Signaturen und Typeninformation,
- für "MessageBoxA", "NULL" und "MB-OK" ...
• Compiler erzeugt ein Objektmodul mit einer
Importtabelle für den Linker, u.a.:
- .... External ... __imp__MessageBoxA@16 ...
Betriebssysteme 2003, MS, VS-Informatik, Ulm
227
Erzeugungsschritte eines C-Programmes:
*.c
Compiler
*.h
*.obj
Linker
*.lib
*.exe
Lader
*.dll
run
• Dateierweiterungen für Windows.
• Static Library (*.LIB):
- Bindung durch Linkage Editor,
• Dynamic Link Library (*.DLL):
- Bindung zum Ladezeitpunkt,
- Bindung zur Laufzeit.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
228
Inspektion von Dateien mit Dumpbin:
• Dumpbin analysiert *.obj, *.lib, *.dll, *.exe.
• Unsere *.exe Datei enthält eine Importtabelle
für benötigte Bibliotheken, diese werden vom
Lader eingebunden.
C:\>dumpbin linkstatic.exe /imports
... USER32.dll
42428C Import Addr Table
42414C Import Name Table
...
1BE
MessageBoxA
KERNEL32.dll
42417C Import Addr Table
42403C Import Name Table
...
19D
19B
CA
174
7D
51
152
2DF
1AD
1F5
13E
1C2
1B0
124
29E
HeapDestroy
HeapCreate
GetCommandLineA
GetVersion
ExitProcess
DebugBreak
GetStdHandle
WriteFile
InterlockedDecrement
OutputDebugStringA
GetProcAddress
LoadLibraryA
InterlockedIncrement
GetModuleFileNameA
TerminateProcess ...
Betriebssysteme 2003, MS, VS-Informatik, Ulm
229
Laden einer DLL zur Laufzeit:
• Vorgehen in 3 Schritten:
- Laden der Dymaic Link Library (User32.dll),
- Suchen der Funktion (MessageBoxA),
- Rufen der Funktion.
#include "windows.h"
int main(int argc, char* argv[]){
HANDLE hLib;
FARPROC hBxProc;
hLib = LoadLibrary("User32.dll");
hBxProc = GetProcAddress( hLib, "MessageBoxA");
return hBxProc(NULL, "Boxtext(d)", "Boxtitel", MB_OK);
}
Programmierung einer DLL:
• Funktionen explizit exportieren:
#include <windows.h>
BOOL WINAPI DllMain(
HINSTANCE hinstDLL, // handle to DLL module
DWORD fdwReason,
// reason for calling function
LPVOID lpvReserved
// reserved
)
{ return TRUE; }
void __declspec(dllexport) PrintString(char *str) {
MessageBox(GetFocus(),str, "MyDLL", MB_OK);
}
Betriebssysteme 2003, MS, VS-Informatik, Ulm
230
10.2.4 Fallstudie: Linux Shared Libraries
• Name der Bibliothek:
-
z.B. libHello.so.1.0.1
Präfix „lib“ (optional).
Suffix „.so“: (Shared Library).
gefolgt von „Major-Versionsnummer“.
anschließend „Minor-Versionsnummer“.
und schließlich noch „Release-Nummer“.
• Name für Linker: symbolischer Link auf die
Bibliothek ohne Versionsnr., z.B. libHello.so
• Name für Lader: symbolischer Link “soname”
mit Major-Versionsnr. z.B. libHello.so.1.
• Bessere Handhabung von verschiedenen
Versionen, als bei Windows DLLs.
• Fkt. müssen nicht explizit exportiert werden.
• Standard-Speicherort: /lib, /usr/lib, ...
• Beim Laden des Programms werden Shared
Libraries automatisch gesucht & geladen:
- Pfade in Var. LD_LIBRARY_PATH.
- Pfade mit ‘:’ konkateniert.
• Suche nach Bibiotheken langsam -> Cache in
/etc/ld.so.cache (verwaltet mit ldconfig).
Betriebssysteme 2003, MS, VS-Informatik, Ulm
231
• Beispiel:
libhello.c:
/* libhello.c - demonstrate library use. */
#include <stdio.h>
void hello(void) {
printf("Hello, library world.\n");
}
demo.c:
/* demonstrate direct use of the "hello" routine */
#include "libhello.h"
int main(void) {
hello();
return 0;
}
Übersetzen, Binden & Starten:
gcc -fPIC -c libhello.c
# compile library
# (-fPIC position independent code)
gcc -shared -Wl,-soname,libhello.so.0
# create library
-o libhello.so.0.0.0 libhello.o –lc
# -lc link library
ln -sf libhello.so.0.0.0 libhello.so.0
# set up soname
ln -sf libhello.so.0 libhello.so
# set up linker name
gcc -c demo.c -o demo.o
# compile demo prg
gcc -o demo demo.o -L. –llibhello
# bind demo prg
# (-L lib search path for linker)
LD_LIBRARY_PATH="." ./demo
# test program
• Inspektion von Dateien mit ldd.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
232
Laden einer Shared Library zur Laufzeit:
• Vorgehen wie bei Windows:
#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h>
// Shared Libs. dynamisch laden
int main(int argc, char **argv) {
void *handle;
double (*cosine)(double); // Funktions-ptr.
char *error;
// Fehler-String
// RTLD_LAZY=Symbole dyn. auflösen
handle = dlopen ("/lib/libm.so.6", RTLD_LAZY);
if (handle==0) {
fputs (dlerror(), stderr); // Fehler des letzten Aufrufs
exit(1);
}
cosine = dlsym(handle, "cos");
error = dlerror();
if (error!=NULL) {
fputs(error, stderr);
exit(1);
}
// GetProcAddress
printf ("%f\n", (*cosine)(2.0));
dlclose(handle);
// Fkt. aufrufen
// Shared Lib. freigeben
}
• Übersetzen des Programms:
gcc -o test test.c -ldl
Betriebssysteme 2003, MS, VS-Informatik, Ulm
233
10.3 Objektorientierte Bibliotheken
• COM = Component Object Model, 1992.
• Verwendet unter Microsoft Windows.
• Grundlage für viele weitere Dienste: OLE,
OCX, ActiveX, DCOM.
• Merkmale:
- Objekte in DLLs oder Programmen,
- sprachunabhängig (C++, Java, Basic, ...).
• Grundidee: Zusammenfassen von Funktionen
eines Serverobjektes zu Einheiten (Interfaces).
Klient
COMObjekt
Realisierung:
• Def. lediglich Speicherlayout von Interfaces.
• Layout entspricht dem einer abstrakten C++
Klasse.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
234
• COM-Speicherlayout:
IfcPtr
virtualTable
private
Daten
func-1
func-2
func-3
ObjektCode
• C++ Notation:
class Interface1 {
public:
virtual void func1()=0;
virtual void func2()=0;
virtual void func3()=0;
}
class MyObject : public Interface1 {
void func1();
void func2();
void func3();
}
• Aufruf einer Interface-Methode:
C++:
o = new MyObject;
o->func1();
C:
o->vtbl->func1();
Betriebssysteme 2003, MS, VS-Informatik, Ulm
235
Instanziierung:
• Können nicht mit „new“ instanziiert werden.
• Obj. über COM-Laufzeitbibliothek erzeugen.
• Objekte durch UUID eindeutig identifizierbar.
• UUID = Universal Unique Identifier (128-Bit
Zahl mit guidgen.exe erzeugen).
• Ablauf der Instanziierung:
Server
COMObjekt
Klient
(1)
anc
bra
ry
(3)
L
nst
oa
dL
i
eI
eat
Cr
Co
(4)
ClassFactory
e
t
ea
r
C
(4)
e
nc
a
t
s
eI n
COM-Bibliothek
(2)
Registry
• Für den Klienten bleibt transparent, ob das
Objekt in einer DLL oder einem Programm
untergebracht ist.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
236
Interfaces:
• Sind durch UUID eindeutig identifizierbar.
• Konventionen:
- jedes COM-Objekt muss mindestens das
Interface IUnknown implementieren
- und von IUnkown abgeleitet sein.
interface IUnknown {
HRESULT QueryInterface(REFIID riid, void **Obj);
ULONG AddRef();
ULONG Release();
}
In-Process-Server:
• COM Objekte in einer DLL:
- Im selben Adreßraum (DLL).
- COM-Bibliothek lädt die DLL bei Bedarf.
• Beispiel: ein eigenes Interface:
class CTest : public IUnknown {
public:
CTest();
STDMETHODIMP QueryInterface(REFIID, PPVOID);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
virtual STDMETHODIMP Print(char *str);
};
Betriebssysteme 2003, MS, VS-Informatik, Ulm
237
• Beispiel Klassenfabrik:
class CTestClassFactory : public IClassFactory
{
public:
CTestClassFactory();
STDMETHODIMP QueryInterface(REFIID, PPVOID);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
STDMETHODIMP CreateInstance(LPUNKNOWN, REFIID,
PPVOID);
STDMETHODIMP LockServer(BOOL);
};
• Beispiel Registrierung:
[HKEY_CLASSES_ROOT\CLSID\{6F922D61-D801-11D0-A2200020182C05E3}\InprocServer32]
@="e:\\BS\\InProcServer\\Debug\\comdll.dll"
• Zusätzlich notwendige Funktionen in DLL:
- DllGetClassObject:
o liefert Zeiger auf die Klassenfabrik,
o zum Erzeugen von Objekten.
- DllCanUnloadNow:
o teilt mit, ob die DLL noch benötigt wird.
o wird periodisch vom System gerufen.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
238
Local- Server:
• COM-Objekte in einem separatem Programm
(EXE) residieren in fremden Adressraum.
• Server:
- eigenständiges Programm,
- Kommunikation über RPC,
- registriert seine Klassenfabrik beim Start.
• Für Interfaces eines fremden Adreßraumes,
werden Proxy-Stub-Objekte geladen:
- Signatur gemäß RPC Notation,
- Erzeugung mittels MIDL-Compiler,
- es gibt vordef. Interfaces: IStream, IStorage, ...
Klient
Server
Proxy-DLL
COMObjekt
ClassFactory
• Ablauf der Instanziierung:
-
Klient ruft „CoGetClassObject“
COM-Bib. lädt LocalServer und Proxy-Dll
Klient ruft „CreateInstance“ der ClassFactory
LocalServer gibt Klient Zeiger auf Interface
Betriebssysteme 2003, MS, VS-Informatik, Ulm
239
10.4 Systemaufruf am Beispiel von NT
DWORD CreateEventDirect(
HANDLE
*SemaphoreHandle,
// result handle
DWORD
DesiredAccess,
// access bits
UNICODE
*ObjectName,
// name of evt-object
ULONG
ManualReset,
// after use
ULONG
InitialState
// initial value
{ __asm { mov eax, 0x23;
// # of NtCreateSemaphore
lea edx,[ebp+0x8]; // parameters (skip 2 W)
int 0x2e;
// _KiSystemService
}
}
// end assembly, end CE
void main() {
HANDLE hEvt;
// the desired handle
DWORD
status;
// status code
DWORD
acc = EVENT_ALL_ACCESS;
// create an event-object via software-interrupt INT 2e :
status = CreateEventDirect(&hEvt, acc, NULL, 1, 1);
if (status!=STATUS_SUCCESS) printf(" error \n");
else printf("success, handle: %x\n", hEvt);
// or create an event-object via kernel32.dll :
hEvt = CreateEventW(NULL, 1, 1, NULL); // W=wide
if (hEvt==NULL) printf(" error \n");
else
printf("success, handle: %x\n", hEvt);
}
// kernel-mode unicode strings
typedef struct _UNICODE_STRING {
USHORT Length;
// used length
USHORT MaximumLength; // max. length of buffer
PWSTR Buffer;
// WCHAR buffer
} UNICODE;
typedef UNICODE * PUNICODE_STRING ;
Betriebssysteme 2003, MS, VS-Informatik, Ulm
240
• Im NtOSkernel.exe findet sich eine Funktion
mit einer Signatur wie CreateEventDirect:
NTSTATUS NtCreateSemaphore(
OUT HANDLE
IN
ACCESS_MASK
IN
PUNICODE_STRING
IN
ULONG
IN
ULONG
);
*SemaphoreHandle,
DesiredAccess,
ObjectName,
ManualReset,
InitialState
• Diese Funktion NtCreateSemaphore wird
indirekt gerufen:
- über den LPC Manager.
- da in einem anderen Adressraum,
- über einen Software-Interrupt (int 0x2e),
• CreateEventDirect präpariert die Parameter
auf dem User-Stack:
- zusätzlicher Parameter: Funktionsnummer,
- zusätzlicher Parameter: Zeiger auf Stackframe,
• LPC kopiert diese dann in den Kernel-Stack.
• Alternativ wird derselbe Effekt erreicht durch
Aufruf von CreateEventW in Kernel32.dll.
Die DLL übernimmt die Vorbereitung der
Parameter und ist komfortabler zu benutzen.
• Bem.: es wird hier nur der NT-Kern, aber kein
Server-Prozess gerufen.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
241
11.
Benutzerschnittstellen
11.1 Überblick
• Ziel: Interaktion mit dem Benutzer
• Gliederung nach Art der Interaktion:
- Batchorientierte Systeme,
- Interaktive Betriebssysteme,
- Transaktionsorientierte Systeme.
• Unterscheidung nach Ein-/Ausgabegeräten:
-
Automaten,
Textbildschirm,
Grafikbildschirm,
Sprachausgabe & -erkennung.
Textbildschirm / Konsole
• Historisch: Fernschreiber (Teletype)
- Eingabe: Tastatur,
- Ausgabe: serielle Leitung,
- Programme: TTY (Unix & Windows).
• Textbildschirm:
- ASCII-Zeichensatz,
- 80*25 Zeichen oder besser,
- Farbe möglich, aber keine Grafik.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
242
• Konsole: ASCII-basierte Interaktion
- MS-DOS: command.com
- Windows: cmd.exe
- Linux:
o verschiedene Shells (z.B. bash),
o virtuelle Konsolen mit ALT-Fx; xterm
• Zugang über Netzwerk mit Telnet oder SSH:
-
Remote-Login Dienst,
Übertragung über TCP,
Terminal-Typen: z.B. VT100,
Windows: telnet.exe, TTermPro
Linux: telnet, SSH.
Konsole
Anwendung
VT100Treiber
PseudoTerminal
TelnetClient
TelnetServer
Internet
Betriebssysteme 2003, MS, VS-Informatik, Ulm
243
Graphische Benutzerschnittstellen
• Pixelbasierte Ansteuerung des Bildschirms.
• Fenster:
- virtualisieren Bildschirmfläche.
- meist rechteckig, aber nicht zwingend.
- Anordnung überlappend oder gekachelt.
• Mehrere Applikationen können auf dem Bildschirm verwaltet werden.
• Grundelemente eines Fensters:
- Rahmen mit Verstellelementen,
- Titelleiste mit Menü,
- Klientenbereich,
• Ausgabe von Text und Grafik innerhalb eines
Fensterrahmens.
• Steuerelemente (Controls) ebenfalls Fenster.
• Eingabe per Maus & Tastatur.
• Symbole (Icons) statt langer Befehle.
• Vorteil: verwandtes Aussehen und Bedienung
für verschiedene Programme.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
244
11.2 Befehlsinterpreter
• Befehlsinterpreter:
- Nimmt Befehle und Parameter entgegen,
- Eingebaute Kommandos sind a priori bekannt,
- Zusätzliche Befehle durch externe Programme.
• Syntax: <Kommando> <Param1> ... <Pn>
-
Erstes Token wird als Kommando interpretiert,
Parameter: Trennung mit Space oder Komma,
Optionen: meist gekennzeichnet durch -, --, /,
Parameter & Optionen in argv[].
• Kommandos unter Microsoft Windows:
-
Interpreter: cmd.exe (Win9x: command.com).
Befehle sind nicht case-sensitiv.
Diverse eingebaute Kommandos „help“.
Externe Befehle:
o Programme (.exe),
o Dateien mit bekannter Verknüpfung,
o Suchpfade (beachte PATH-Variable).
• Kommandos unter Unix:
- Diverse Interpreter: bash, ksh, ...
- Befehle sind case-sensitiv.
- Eingebaute Befehle: Syntax & bekannte Befehle
abhängig von Shell.
- Externe Befehle: Ausführbare Dateien,
Betriebssysteme 2003, MS, VS-Informatik, Ulm
245
Standard Ein-/Ausgabe
• Jedes Programm besitzt geöffnete Dateien auf
Tastatur (stdin) und Bildschirm (stdout).
• stdin, stdout zeigen auf Gerät:
- „CON“: Windows
- „/dev/tty“: Linux
• Umleiten der Eingabe: <Datei.
• Umlenken der Ausgabe: >Datei & >>Datei.
• Mehrere Kommandos in einer Kette: „c1 | c2“:
Ausgabe von c1 ist Eingabe für c2 ( Pipe).
Umgebungsvariablen
• Konfiguration von Programmen & System.
• Zugriff in Programmen & Konsole möglich.
• Steuerung in Konsole (Windows):
- Setzen & Löschen: SET Name=Wert
- Ausgabe: echo %name%
• Verwendung unter Linux (bash):
- Setzen & Löschen: export Name=Wert
- Ausgabe: echo $name
• Konfiguration in Linux abhängig von Shell.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
246
Stapeldateien (BAT-Dateien)
• Zusammenfassung mehrerer hintereinander
auszuführender Kommandos (NT).
• Ziel: Automatisierung bestimmter Abläufe.
• Zugriff auf Argumente durch: %1 %2
• Anweisungen (siehe Hilfe „help“):
-
ECHO: Ausgabe,
PAUSE: Tastendruck abwarten,
GOTO: Sprung zu Marke ":NAME",
ERRORLEVEL: Fehlerstufe von Prg.aufruf,
IF, FOR, CALL, usw.
• Beispiel:
@ECHO OFF
REM das ist ein Kommentar
IF p%1 == pParam ECHO kein Parameter!
• Tutorials: www.antonis.purespace.de/batchtut
Betriebssysteme 2003, MS, VS-Informatik, Ulm
247
Erweitertes Scripting
• Windows Scripting-Host interpretiert mehrere
Sprachen: VB-Script, Java-Script, Perl ...
• Einsatzgebiete:
- Automatisierung von Abläufen,
- Erweiterung von Programmen & Systemen.
• Merkmale:
-
weniger Aufwand, da kein Compiler notwendig,
Erweiterung von Programmen & Systemen,
umfangreiche Sprachkonzepte.
basiert auf COM.
• Aufruf über:
- cscript Programm Konsolausgabe,
- wscript Programm Windows-Ausgabe,
- oder direkt durch die Erweiterung ".vbs".
• Nutzung von eingebauten Obj. z.B. „WScript“
• Zugriff auf externe Obj. mit „CreateObject“.
• Beispiel: Ausgabe des Namens des aktuellen
Benutzers:
Set net = Wscript.CreateObject("Wscript.Network")
MsgBox(net.UserName)
Betriebssysteme 2003, MS, VS-Informatik, Ulm
248
11.3 X Window
• Projekt Athena (MIT 84), derzeit Ver. X.11.
• Trennung von Programm (X Klient) und Ausgabegerät (X Window Server).
• Struktur:
• Window Server:
-
verwaltet Bildschirm, Tastatur & Maus,
kann mehrere Klienten bedienen,
Rückmeldung an App. (selektiv),
Grundoperationen auf Fenstern,
Ausgabe von Basisfiguren,
Schriften, Farbtab. , ...
• X Klient (Anwendung):
- Grafikausgaben & Ereignisverarbeitung,
- zu einem oder mehreren Servern verbunden.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
249
• Window Manager:
- eine X Window Server Anwendung,
- einmal gestartet pro X Window Server,
- definiert Look & Feel (z.B. olwm, fwm, ...).
• X Protokoll:
- Kommunikation zw. X Klient und X Server.
- asynchrone Verarbeitung.
- TCP, bzw. IPC lokal.
• X Lib:
-
C-Bibliothek.
realisiert X-Protokoll.
Verbindungsauf- und –abbau.
Eingabeereignisse in Warteschlange,
Ausgabefunktionen: Text und Grafik.
• X-Toolkits:
- erleichtern Entwicklung GUI-basierter Prgs.
- objektorientiert Bib., z.B. Qt (KDE).
• Desktop Systeme:
- erweiterten X Window Manager,
- gleiches „Look and Feel“ für Programme
- z.B. KDE, Gnome, ...
Betriebssysteme 2003, MS, VS-Informatik, Ulm
250
• Umlenkung des Displays:
xterm –display 134.60.77.99:0
• Berechtigung für lokales Display:
xhost +134.60.77.99 (setzen)
xhost -134.60.77.99 (löschen)
• Kommando-Interpreter unter X-Window:
Betriebssysteme 2003, MS, VS-Informatik, Ulm
251
11.4 Microsoft Windows
• Ursprünglich 16-Bit Aufsatz für MS-DOS.
• Kein separater Window-Manager.
• Toolkit: MFC.
• Tastatur- und Mauseingaben werden dem Programm meist als Nachricht übergeben:
typedef struct tagMSG {
HWND
hwnd;
UINT
message;
WPARAM
wParam;
LPARAM
lParam;
DWORD
time;
POINT
pt;
} MSG;
//
//
//
//
//
//
respektives Fenster
MessageCode
32 Bit in Win32
32 Bit
Stempel
Mauskoordinaten
• Tastatureingabe:
message:
wParam:
lParam:
WM_KEYDOWN
virtual key code
Scan-Code, Repeat, Modifier ...
• Maus-Ereignisse:
- WM_LBUTTONDOWN,
- WM_MBUTTONDOWN,
- WM_RBUTTONDOWN,
• Ca. 1000 weitere WM... Nachrichten und
Unternachrichten.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
252
Grobstruktur einer Benutzereingabe:
NewWClass
WindowFunkt.
NewWindow
GetMessage
Translate
DispatchMessage
MessageLoop in WinMain
• Programmstart über WinMain.
• Fensterklasse als Schablone für FenstererDekoration.
• Erzeugen von Fenstern mit gemeinsamer oder
separater Fensterfunktion.
• Nachrichten werden in einer zentralen
Nachrichtenschleife entgegengenommen.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
253
Beispielprogramm "SimpleWindow.c"
• Eintragen unserer Fensterklasse und erzeugen
eines Fensters:
#include <windows.h>
#define WINDOW_CLASS_NAME "SimpleWindowClass"
#define WINDOW_TITLE
"A SimpleWindow"
void NewWindowClass( HINSTANCE hProgram,
WNDPROC CallBackProc)
{ DWORD
res;
WNDCLASS
wc;
wc.style
= CS_HREDRAW|CS_VREDRAW;
wc.lpfnWndProc
= CallBackProc;
wc.cbClsExtra
= 0;
// class extra data
wc.cbWndExtra
= 0;
// window extra data
wc.hInstance
= hProgram; // associated prog
wc.hIcon
= NULL;
// when minimized
wc.hCursor
= LoadCursor( NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)( COLOR_WINDOW+1);
wc.lpszClassName = WINDOW_CLASS_NAME;
res
= RegisterClass( &wc );
}
void NewWindow(HINSTANCE hProgram)
{ HWND hWnd= CreateWindow(
WINDOW_CLASS_NAME,
WINDOW_TITLE,
WS_OVERLAPPEDWINDOW,
9, 9, 320, 200, // pos & size
NULL,
// no parent window
NULL,
// no menu
hProgram,
// associated prog.
NULL);
// no creation data
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
}
Betriebssysteme 2003, MS, VS-Informatik, Ulm
254
• Callback Funktion für unser Fenster und
Entry für das Programm:
LRESULT CALLBACK WndProc(
HWND hWnd, UINT msgCode,
WPARAM wPar, LPARAM lPar )
{ switch (msgCode) {
case WM_DESTROY:
PostQuitMessage(0); return 0;
default:
return DefWindowProc( hWnd,wmCode,wPar,lPar);
}
}
int WINAPI WinMain(
{ MSG
HINSTANCE
HINSTANCE
LPSTR
int
hProgram,
hPrevProg,
lpCmdLine,
nCmdShow)
msg;
NewWindowClass( hProgram, (WNDPROC) WndProc );
NewWindow( hProgram );
while ( TRUE )
// message loop
{
if ( GetMessage( &msg, NULL, 0, 0) ==WM_QUIT )
return msg.wParam ; // result of WM_QUIT
TranslateMessage( &msg ); // translate Characters
DispatchMessage( &msg ); // invoke callbacks
}
}
Betriebssysteme 2003, MS, VS-Informatik, Ulm
255
12.
Sicherheitsaspekte
12.1 Einleitung
• Ziel: Schutz vor Fehlern & Eindringlingen.
• Objekt: passive Ressource (z.B. Datei)
• Subjekt: aktive Einheiten (Proz. & Benutzer)
• Sicherheit: Fähigkeit eines BS, für seine Obj.
Vertraulichkeit & Integrität zu garantieren.
• Anfordernungen:
- Nur berechtigte Subj. dürfen mit Obj. arbeiten.
- Subjekte müssen sich zunächst authentisieren.
- Zugriffe sollen protokollierbar sein.
• Orange Book (DoD) definiert Klassen für die
Sicherheit von Computersystemen:
-
A: Verified Design
B3: Security Domains
B2: Structured Protection
B1: Labeled Security Protection
C2: Controlled Access Protection
C1: Discretionary Security Protection
D: Minimal Protection
A, B3, B2, B1, C2, C1, D
sicher
unsicher
Betriebssysteme 2003, MS, VS-Informatik, Ulm
256
12.2 Zugangskontrolle
• Nur best. Subjekte dürfen das System nutzen.
• Voraussetzung für die Nutzung ist eine:
- Identifikation (Angabe, welcher Nutzer) und
- Authentisierung (Nachweis, der Nutzerangabe).
• Nicht Aufgabe des BS-Kerns, sondern durch
Systemprozeß.
• Authentisierung durch: Paßwort, Chipkarte
oder biometrische Merkmale.
• Windows und Linux verwenden einen Benutzernamen zusammen mit einem Paßwort.
Passwörter in Unix:
• Verschlüsselung sofort nach Passworteingabe:
- Vergleich mit Passwortdatei.
- niemand (inkl. root) sieht Passwörter i. Klartext.
- aber Verschlüsselungsalgorithmus ist bekannt
Angriff per trial and error mit Wörterbuch
• Probleme früherer Versionen:
- Passwortdatei (/etc/passwd) für Benutzer lesbar.
Angriff: Datei kopieren und Ausprobieren.
- jetzt getrennte Speicherung der Passwörter in
nicht lesbarer Shadow-Datei (/etc/shadow).
Betriebssysteme 2003, MS, VS-Informatik, Ulm
257
12.3 Zugriffskontrolle
12.3.1 Zugriffsmatrix
• Zuordnung von Benutzerrechten und Objekten
in einer Matrix:
1
2
A
R
RW
B
R
C
R
D
R
3
4
5
6
RW
RWX
R
X
R
• Probleme:
- Matrix nur dünn besetzt,
- Einträge sind sehr dynamisch.
• Alternativen:
- Zugriffskontrollisten (access control lists).
- Berechtigungslisten (capability lists).
Betriebssysteme 2003, MS, VS-Informatik, Ulm
258
12.3.2 Zugriffskontrollisten
• engl. Access Control Lists
• Speicherung & Verarbeitung nach Spalten.
• Sicherheitsmanager prüft Berechtigung eines
Subjektes bei Zugriff auf ein Objekt.
• Verwendet in Windows NT/2000 und Unix.
234 567 8
• Bewertung:
+ Überblick beim Objekt
+ Rechte leicht widerrufbar
- Delegation umständlich
.
/0
1
/
Beispiel: Windows NT
• Arbeitet mir Zugriffskontrollisten.
• Sicherheitstoken besteht aus 128-Bit IDs.
& '()*+
$ %
! " " !#
, -
Betriebssysteme 2003, MS, VS-Informatik, Ulm
259
12.3.3 Berechtigungslisten
• engl. Capabilities.
• Speicherung & Verarbeitung nach Zeilen.
• Beim Zugriff auf ein Objekt muß das Subjekt
die passende Berechtigung vorweisen.
• Berechtigungen müssen geschützt werden.
• Nur in der Forschung verwendet (z.B. Hydra).
• Bewertung:
+ kompletter Überblick beim Subjekt
+ Delegation einfach
- schwierig widerrufbar
Betriebssysteme 2003, MS, VS-Informatik, Ulm
260
12.4 Supervisor Betriebsmodus
• HW-Unterstützung zur Unterscheidung zw.
User- und Supervisor-Modus.
• Zusätzliches Mode-Bit in Hardware:
- 0: supervisor-mode,
- 1: user-mode.
• Im Fall eines Traps oder Interrupts wird das
Mode-Bit gelöscht.
• Wenn das BS die Kontrolle an das Programm
abgibt, wird Bit wieder gesetzt.
• Privilegierte Befehle dürfen nur
Supervisor-Modus ausgeführt werden.
im
• Ggf. wird ein Trap ausgelöst.
• Systemaufrufe mittels Supervisor-Call (z.B.
SVC bei MVS).
• 4Verfeinerung durch mehrere Privilegstufen
Ringe bei x86-CPUs im Protected Mode.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
261
12.5 Isolation der Adressräume
• Getrennte Adreßräume durch:
- Segmentierung,
- mehrfach virtualisierten Speicher.
• Beispiel: Windows NT
-
Kernel- und User-Mode,
pro Prozeß jeweils 2 GB virt. Speicher,
Kernel-Mode Speicher gemeinsam genutzt,
Komm. Kernel- und User-Mode umständlich.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
262
12.6 Angriffsformen
• Ziel: Versuch, bestimmten Programmcode in
Rechtebereich auszuführen, in dem das nicht
vorgesehen war.
• Einschleusen von:
-
kompletten Programmen,
Code in Quellprogrammen,
Code in ausführbaren Dateien,
Code während der Programmausführung.
Einschleusen von kompletten Programmen
• Vorgehen: Komplettes Programm so platzieren, dass Rechteinhaber X es (bewusst oder
unbewusst) startet und ausführt.
• Bewusste Ausführung durch Rechteinhaber:
- Attraktives Programm anbieten, das Rechteinhaber ggf. selbst auf den Rechner überträgt und
dort ausführt.
- "Trojanisches Pferd": Erbringt möglicherweise
die erwartete Leistung, enthält aber zusätzlich
Codeteile, die Manipulationen vornehmen.
- Gegenmaßnahmen kaum möglich.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
263
• Unbewusste Ausführung:
- Platzierung so, dass der Rechteinhaber das
Programm unbewusst an Stelle eines anderen
Programms ausführt.
- Z.B. Mißbrauch der PATH-Umgebungsvariable.
- Gegenmaßnahmen kaum möglich.
• Platzierung in Daten:
- Nutzung von "Makro"-Mechanismen: in Daten
einbettbare Programme, die bei Bearbeitung der
Daten ausgeführt werden. "Makroviren".
- Die meisten weltweiten Virusangriffe der letzten
Jahre waren Makroviren.
- Gegenmaßnahme: Makros deaktivieren.
Einschleusen von Code in Quellprogrammen
• Programmquelle modifizieren oder erweitern.
• Relativ einfach und verwendbar für unterschiedl. Zielplattformen.
• Voraussetzung: Zugang zur Programmquelle.
• Z.B. best. Eingabe wird speziell behandelt
erlaubt Programmierer später Zugang zu
allen Systemen, die das Programm einsetzen.
• Gegenmaßnahmen: Begutachtung des Quellcodes durch mehrere Programmierer.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
264
Ausführbare Dateien modifizieren
• Ausführbares Programm modifizieren oder
erweitern.
• Voraussetzung: Schreibzugriff auf Programmdatei und gewisse Kenntnisse über Struktur
des ausführbaren Programms.
• Prinzip der klassischen "Viren".
• Gegenmaßnahmen: Virenscanner.
Einschleusen von Code während der
Programmausführung
• Programmcode modifizieren oder erweitern
im Hauptspeicher, während Programm durch
Prozess ausgeführt wird.
• Voraussetzung: Zugang zum Codebereich des
Prozesses im Hauptspeicher.
• Normalerweise nur Datenbereich zugänglich.
In gewissen (fehlerhaften) Fällen aber auch
Codebereich.
• Gegenmaßnahme: Prävention durch korrekte
sichere Programmierung.
Betriebssysteme 2003, MS, VS-Informatik, Ulm
265