Betriebssysteme 13/14



Ähnliche Dokumente
Prozesse and Threads WS 09/10 IAIK 1

Architektur Verteilter Systeme Teil 2: Prozesse und Threads

Prozesse. Stefan Janssen. Alexander Sczyrba

Dämon-Prozesse ( deamon )

Betriebssysteme. Dipl.-Ing.(FH) Volker Schepper

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

Was meinen die Leute eigentlich mit: Grexit?

5 Speicherverwaltung. bs-5.1 1

Statuten in leichter Sprache

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Wir machen neue Politik für Baden-Württemberg

Wie man Registrationen und Styles von Style/Registration Floppy Disketten auf die TYROS-Festplatte kopieren kann.

Zwischenablage (Bilder, Texte,...)

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

The ToolChain.com. Grafisches Debugging mit der QtCreator Entwicklungsumgebung

Virtueller Speicher. SS 2012 Grundlagen der Rechnerarchitektur Speicher 44

Einrichtung des WS_FTP95 LE

IBM Software Demos Tivoli Provisioning Manager for OS Deployment

Was ich als Bürgermeister für Lübbecke tun möchte

Primzahlen und RSA-Verschlüsselung

Tutorial -

Übungen Programmieren 1 Felix Rohrer. Übungen

Professionelle Seminare im Bereich MS-Office

C++ Tutorial: Timer 1

S7-Hantierungsbausteine für R355, R6000 und R2700

Erlebnisorientiertes Lernen mit Pferden

Bitte verwenden Sie nur dokumentenechtes Schreibmaterial!

Die integrierte Zeiterfassung. Das innovative Softwarekonzept

20. Algorithmus der Woche Online-Algorithmen: Was ist es wert, die Zukunft zu kennen? Das Ski-Problem

DOKUMENTATION VOGELZUCHT 2015 PLUS

Grundlagen verteilter Systeme

Idimager ein Bildverwaltungsprogramm-DAM Software

10.6 Programmier-Exits für Workitems

Sie wollen Was heißt das? Grundvoraussetzung ist ein Bild oder mehrere Bilder vom Wechseldatenträger

Vorl. 6: Single- und Multitasking

Windows 10 > Fragen über Fragen

4D Server v12 64-bit Version BETA VERSION

Wenn man nach Beendigung der WINDOWS-SICHERUNG folgendes angezeigt bekommt

Alle gehören dazu. Vorwort

Installation des Authorware Webplayers für den Internet Explorer unter Windows Vista

Anleitung zur Nutzung des SharePort Utility

Leichte-Sprache-Bilder

Erstellen einer digitalen Signatur für Adobe-Formulare

Leitfaden zum Sichern einer Festplatte als Image mit der System Rescue CD

Das Persönliche Budget in verständlicher Sprache

Die Post hat eine Umfrage gemacht

40-Tage-Wunder- Kurs. Umarme, was Du nicht ändern kannst.

Verschlüsselung mit PGP. Teil 1: Installation

Datenbank-Verschlüsselung mit DbDefence und Webanwendungen.

Woche 1: Was ist NLP? Die Geschichte des NLP.

Installation OMNIKEY 3121 USB

Installation Hardlockserver-Dongle

Beschreibung Regeln z.b. Abwesenheitsmeldung und Weiterleitung

Wie halte ich Ordnung auf meiner Festplatte?

Lernwerkstatt 9 privat- Freischaltung

SolBenefit. Photovoltaik- Anlagen- Betrachtung und -Auswertung

1. Weniger Steuern zahlen

5.2 Neue Projekte erstellen

Stepperfocuser 2.0 mit Bootloader

Computeria Solothurn

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Punkt 1 bis 11: -Anmeldung bei Schlecker und 1-8 -Herunterladen der Software

Einführung in PHP. (mit Aufgaben)

PicKit 3. Programmierung mit dem USB-Programmer PICkit3 (Microchip) AB

Konfiguration des ewon GSM Modems Kurzbeschreibung zum Aufbau einer GSM Verbindung

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER

Internet Explorer Version 6

Verschlüsselung mit PGP. Teil 1: Installation

~~ Swing Trading Strategie ~~

Lokale Installation von DotNetNuke 4 ohne IIS

Eine Anwendung mit InstantRails 1.7

Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit,

Einleitung. Hauptteil. Wir befinden uns nun im Demoarchiv.

PROBLEME BEIM INSTALLIEREN REALTEK HD AUDIO TREIBER

Catherina Lange, Heimbeiräte und Werkstatträte-Tagung, November

Print2CAD 2017, 8th Generation. Netzwerkversionen

Installation / Update Advantage Database Server. Die Software Hausverwaltung

Java: Vererbung. Teil 3: super()


Dow Jones am im 1-min Chat

50 Fragen, um Dir das Rauchen abzugewöhnen 1/6

Umwandeln und Exportieren von Adobe-Illustrator-Dateien in Illustrator für Artcut

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Maren Bennewitz

INHALT 1. INSTALLATION DES V-MODELL XT UNTER WINDOWS 7 2. INSTALLATION DES V-MODELL XT UNTER WINDOWS VISTA

Memeo Instant Backup Kurzleitfaden. Schritt 1: Richten Sie Ihr kostenloses Memeo-Konto ein

WAS finde ich WO im Beipackzettel

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

Serienbrieferstellung in Word mit Kunden-Datenimport aus Excel

Einrichten einer mehrsprachigen Webseite mit Joomla (3.3.6)

Connecting Content. User Manual. Version: 1.2

! " # $ " % & Nicki Wruck worldwidewruck

Zählen von Objekten einer bestimmten Klasse

Adobe Photoshop. Lightroom 5 für Einsteiger Bilder verwalten und entwickeln. Sam Jost

Wichtig ist die Originalsatzung. Nur was in der Originalsatzung steht, gilt. Denn nur die Originalsatzung wurde vom Gericht geprüft.

Was ist Sozial-Raum-Orientierung?

Transkript:

Betriebssysteme 13/14 Prozesse und Threads 2 Oktober 2013 1/72

Was ist ein Prozess? Was ist ein Thread? typischer Bootvorgang Bootloader (Grub,...) Kernel und initramfs Filesysteme, Devices init-prozess Wieso Prozess? Was ist ein Prozess überhaupt? Und wie entsteht er? 2/72

Am Anfang... main_console = new TextConsole ( 4 );... Scheduler :: instance () - > addnewthread ( main_console );... void TextConsole :: Run ( void ) // vereinfacht { } do { getkeyfromkbd ( key ) handlekey ( key ); Scheduler :: instance () - > yield (); } while ( 1 ); // until the end of time 3/72

Programm und Thread Ein Programm ist zuerstmal Code: vielleicht kompilierbar vielleicht lauähig vielleicht fehleranfällig Ein Prozess oder ein Thread ist eine Aktivität: die CPU führt programmierte Befehle aus Besteht aus Programmcode Input Output Zustand 4/72

Mehrere Prozesse oder Threads Eine CPU - zu einem Zeitpunkt ein aktiver Prozess bzw. Thread Wechsel zwischen Threads - wie macht das die CPU? 5/72

Mehrere Prozesse oder Threads Eine CPU - zu einem Zeitpunkt ein aktiver Prozess bzw. Thread Wechsel zwischen Threads - wie macht das die CPU? IP / PC woanders hinsetzen... 6/72

Mehrere Prozesse oder Threads (2) IP / PC woanders hinsetzen... Also so: JMP Thread2 Funktioniert das? 7/72

Mehrere Prozesse oder Threads (2) IP / PC woanders hinsetzen... Also so: JMP Thread2 Funktioniert das? Nein... Wohin genau? Wie zurück? Sicherheitsfragen... Schaun wir uns das mal in SWEB an. 7/72

switch.s (aus SWEB) mov ebx, dword [ currentthreadinfo ]... push dword [ ebx + 8] ; push eflags push dword [ ebx + 4] ; push cs push dword [ ebx + 0] ; push eip push dword [ ebx + 24] pop ebx ; restore ebx iretd ; switch to next Was passiert hier? 8/72

Switch currentthreadinfo gesetzt in schedule.cpp Datenstruktur mit Menge von Registern, die den Zustand der CPU zu einem vergangenen Zeitpunkt widerspiegeln Wieso iretd? 9/72

was macht IRETD? IRETD - Interrupt Return Returns program control from an exception or interrupt handler to a program or procedure that was interrupted by an exception, an external interrupt, or a software generated interrupt. komplexe Instruktion vereinfachte Darstellung: EIP <-- Pop(); CS <-- Pop(); EFLAGS <-- Pop(); 10/72

was macht IRETD? push dword [ ebx + 8] ; push eflags push dword [ ebx + 4] ; push cs push dword [ ebx + 0] ; push eip IRETD 11/72

was macht IRETD? push dword [ ebx + 8] ; push eflags push dword [ ebx + 4] ; push cs push dword [ ebx + 0] ; push eip EIP <-- Pop () ; CS <-- Pop () ; EFLAGS <-- Pop () ; 12/72

was macht IRETD? push dword[ebx + 8] ;push eflags push dword[ebx + 4] ;push cs push dword[ebx + 0] ;push eip EIP <-- Pop(); CS <-- Pop(); EFLAGS <-- Pop(); 13/72

Wieso Interrupt Return wenn wir doch nur zu einem neuen Thread wechseln wollen... CPU beherrscht viele nützliche Instruktionen manche davon haben - bei falscher Anwendung - unangenehme Nebenwirkungen z.b. CLI - Clear Interrupt Flag keine externen Interrupts mehr akzeptiert gefährlich! Anwenderprogramme sollen diese Instruktionen nicht ausführen dürfen 14/72

Privileged Instructions - Intel LGDT Load GDT register LLDT Load LDT register LTR Load task register LIDT Load IDT register MOV (control registers) Load and store control registers. LMSW Load machine status word. CLTS Clear task-switched ag in register CR0 MOV (debug registers) Load and store debug registers INVD Invalidate cache, without writeback WBINVD Invalidate cache, with writeback INVLPG Invalidate TLB entry HLT Halt processor RDMSR Read Model-Specic Registers WRMSR Write Model-Specic Registers RDPMC Read Performance-Monitoring Counter RDTSC Read Time-Stamp Counter. 15/72

User und Kernel Mode Wir unterscheiden unterschiedliche Privilege-Ebenen User Mode Kernel (oder supervisor) Mode Arbeitsmodus der CPU Manche CPUs: 2 Ebenen (MIPS) andere mehrere (Intel) 16/72

IA32 - Ringe 17/72

Ringwechsel Wechsel von Ring 3 auf Ring 0 muss überwacht werden Kontrollierter Übergang System Calls Intel: INT 0x80 oder SYSENTER/SYSCALL Unterschied: Geschwindigkeit In Sweb: INT 0x80 18/72

Wieso Interrupt Return 19/72

Wieso Interrupt Return 20/72

Wieso Interrupt Return 21/72

Wieso Interrupt Return 22/72

Wieso Interrupt Return Wechsel in Kernel-mode ursprünglich über Interrupt Instruktionsadresse über Tupel CS (Code Segment Selector) und EIP (Instruction Pointer) referenziert Rücksetzen des Zustandes des Prozessors (EFLAGS) wesentlich Gleichzeitiges Setzen von CS und EIP nötig IRET macht die Dinge in einem Schritt... (POP EIP; POP CS; POP EFLAGS) 23/72

Switch.s (aus SWEB) mov ebx, dword [ currentthreadinfo ]... push dword [ ebx + 8] ; push eflags push dword [ ebx + 4] ; push cs push dword [ ebx + 0] ; push eip push dword [ ebx + 24] pop ebx ; restore ebx iretd ; switch to next... das ist also der Kern des Wechsels zwischen zwei threads... 24/72

Threads Etwas vereinfacht: Wechsel zwischen threads durch Laden neuer Werte in CS/EIP thread A läuft bedeutet, CPU führt Code von thread A aus kernel läuft bedeutet, CPU führt Code vom kernel aus virtuell - threads sind ein Konzept, dass es uns erleichtert, uns Abläufe vorzustellen, diese zu steuern und zu programmieren CPU muss wenig bis nichts über threads wissen 25/72

Tasks (IA32) Threads auch ohne speziellen CPU-Support implementierbar CPU-support erleichternd IA32: Tasks unit of work that a processor can dispatch, execute, and suspend. task besteht aus execution space code segment stack segment (für jeden priviliege level eines) ein oder mehrere data segments task state segment (TSS) In SWEB nicht extensiv genutzt... 26/72

TSS 27/72

TSS 28/72

Thread, Prozess Thread benötigt genau das, was im TSS steht zwei Threads, die zusammenarbeiten: gleichen Speicher, unterschiedliche Statusinformationen / Stacks / Register... 29/72

Thread, Prozess einer oder mehrere zusammengehörige Threads und deren Ressourcen: Prozess typisch: Programm wird gestartet, nur ein thread aktiv Programm startet weitere threads nach Bedarf 30/72

Wann entsteht ein Prozess? BS muss sicherstellen, dass alle wichtigen Prozesse existieren. Manchmal: alle Prozesse die jemals benötigt werden beim Startup erzeugt Im allgemeinen: Möglichkeit zur Erzeugung / Beendigung erforderlich Wichtigste Ereignisse, die Prozess- Erzeugung veranlassen 1 System-Initialisierung (boot) 2 Ausführung eines process creation system calls 3 Benutzeranforderung 4 Start eines Batch-Jobs 31/72

Booten Mehrere Prozesse werden gestartet Prozesse zur Interaktion mit Anwender Prozesse für bestimmte Funktionen Email-service Drucker-Warteschlange Firewall 32/72

Prozesserzeugung Auch später... Technisch: Immer ein systemcall Unix: fork Windows: CreateProcess SWEB: existiert noch nicht (dann aber: fork) Beide Prozesse separaten Adressraum Bei Unix: vorerst exakte Kopie Bei Windows: von Beginn getrennt 33/72

fork - exec Unix / Linux / SWEB pid_t fork(void) Rückgabewerte: 0 an den neu gestarteten Prozess (child) Prozess-ID an den aufrufenden Prozess (parent) Jetzt laufen zwei beinahe idente Kopien desselben Programmes Unterschied nur im Rückgabewert 34/72

fork - exec Über den Rückgabewert unterscheidbar: bin ich der Vater oder das Kind Kindprozess überlagert seinen Speicher jetzt mit Code des neuen, zu startenden Programmes pid_t childpid ; childpid = fork (); if ( childpid < 0) { // Fehler bei fork } else if ( childpid == 0) { // ich bin das Kind, mach ein exec if ( execv (...)) { // execv fehlgeschlagen } } else { // ich bin der Parent, tu was immer nötig ist } 35/72

Prozess Terminierung Normal exit(freiwillig) Error exit (freiwillig) Fatal error (unfreiwillig) Killed by another process (unfreiwillig) 36/72

Process Hierarchies Parent erzeugt einen child process, die können wieder Prozesse erzeugen Bildet Hierarchie die können wieder Prozesse erzeugen... UNIX nennt das "process group" Windows kennt keine Hierarchie Alle Prozesse sind gleich 37/72

Process Hierarchies A forkt B,C B forkt D,E,F C forkt G D forkt H Abbildung: Prozesshierarchien 38/72

Prozesszustände Grep muster *.c sort Sort muss eventuell auf input warten Blockieren sinnvoll 39/72

Prozesszustände 40/72

Prozesszustände 41/72

Prozesszustände 42/72

Prozesszustände 43/72

Prozesszustände 44/72

Prozesszustände 45/72

Prozesszustände 46/72

Threads Traditionelles Modell: Prozess hat einen Adressraum einen Ausführungsfaden Manchmal wünschenswert, mehrere Ausführungsfäden parallel zu haben wie eigene Prozesse, aber gemeinsamer Adressraum 47/72

Threads Prozess ist Verwaltungseinheit - bündelt zusammengehörige Ressourcen. Ressourcen: Adressraum Oene Files Child Processes Accounting... 48/72

Threads Prozess besitzt einen Ausführungsfaden (thread) Threads: werden für die Ausführung auf CPU verwaltet besitzen: Befehlszähler (PC) Register Stack 49/72

Threads Erlaubt es, mehrere Fäden innerhalb eines Prozesses laufen zu lassen Hohe Unabhängigkeit Leichtgewichtige Prozesse (lightweight processes) Multithreading 50/72

Threads Weniger unabhängig als Prozesse Zugri auf Speicher der anderen Threads! Kein Schutz voreinander! Sollen kooperieren, nicht kämpfen! Zustände: ähnlich wie bei Prozessen - Ready Running Blocked Terminiert 51/72

Multithreading Üblich: zuerst nur ein Thread Startet weitere threads (z.b.pthread_create(...)) Manchmal hierarchisch, manchmal ach Wenn thread fertig: pthread_exit Warten auf thread-ende: pthread_wait CPU freiwillig hergeben: pthread_yield 52/72

Thread - Probleme Entstehen leicht durch die gemeinsamen Datenbereiche Gleichzeitiger Zugri auf gemeinsamen Speicher? Thread schlieÿt File, von dem ein anderer noch liest? Synchronisation! 53/72

Fork-Problem Prozess hat >1 thread Ein Thread eines Prozesses macht fork Neuer Prozess: auch mehrere threads? Wenn ja: Ein thread ist blockiert und wartet auf I/O was macht dieser thread im neuen Prozess? Design-Entscheidungen! Für KU - abzuraten, mehr als einen Thread zu haben! 54/72

Warum überhaupt threads Oft sollen Dinge parallel ablaufen Manche der Dinge blockieren Threads erzeugen einfacheres Programmiermodell Eigentlich dasselbe Argument wie für Prozesse Aber: threads haben Daten gemeinsam Ermöglicht Lösungen, die mit Prozessen nicht möglich oder nicht einfach wären 55/72

Warum überhaupt threads Weniger Ressourcen: einfacher zu Erzeugen und Zerstören Wechsel zwischen Threads eines Prozesses schneller als zwischen Prozessen Performancegewinn möglich Nicht wenn alle CPU-lastig Mehrprozessormaschinen 56/72

Beispiele Textverarbeitung Benutzereingabe Bildschirmanzeige Formattierung Rechtschreibprüfung Autosave Keine Chance mit mehreren Prozessen! 57/72

Beispiel Webserver Sammlung von sequentiellen threads Alle sehr einfach 58/72

Beispiel while ( TRUE ) { get_next_request (& buf ); handoff_work (& buf ); } while ( TRUE ) { wait_for_work (& buf ); look_for_page_in_cache (& buf,& page )); if ( page_not_in_cache (& page )) read_page_from_disk (& buf,& page ); return_page (& page ); } 59/72

Alternative Ein Thread Muss File von Platte lesen Prozess wird blockiert Schlechtere Performance Mögliche Alternative: Non-blocking read 60/72

Non-blocking read while ( TRUE ) { // sehr schematische Darstellung!! get_next_event (& buf ); if is_request_event (& buf ) { if ( page_not_in_cache (& page )) request_page_from_disk (& buf,& page ); save_request_in_table (& buf ); } else { return_page (& page ); } } else if is_disk_event (& buf ) { find_request_in_table ; mark_request_as_done ; return_page (& page ); // no error handling e. g. } else if is_... } 61/72

Non-blocking read Kein sequentieller Prozess mehr Finite-state-machine! Eigentlich werden threads simuliert! Daher: gleich threads! 62/72

Implementierung Zwei Möglichkeiten: Im User-Space Im Kernel (eventuell auch Hybrid) 63/72

User-Space threads Kernel weiÿ nichts von Threads - für Kernel nur ein Prozess Kann in allen BS realisiert werden, auch wenn sie keinen thread- support haben. Früher waren das alle... 64/72

User-Space threads 65/72

User-Space threads Thread table pro Prozess Analog zur Prozess-Tabelle im Kernel Von User-Mode-Runtime-System verwaltet Wenn Thread Funktion ausführt, die den Prozess blockieren könnte_ Aufruf einer Routine im Runtime-System Routine prüft: wird Thread blockieren? Ja: Sichern der Register in Thread-Table Anderen Thread im Zustand ready suchen, Register mit dessen Werten laden. SP und PC wechseln neuer thread ist aktiv Thread-switch auf diese Art: sehr schnell! 66/72

User-Space threads Vorteile: Kein Systemcall nötig Daher sehr schnell Kein context-switch memory-cache ush unnötig etc. Eigenes Scheduling verwendbar Nachteile Thread darf keine System-Calls machen könnte blockiert werden 67/72

User-Space threads : Lösungsmöglichkeit: Alle system-calls non-blocking Änderungen am BS nicht attraktiv Soll ja mit bestehenden BS arbeiten... Auch Auswirkungen auf Userprogramme Manchmal feststellbar ob Call blockiert Select-Systemcall Vor read: select (in library-routine) Wenn read blockieren würde: anderen thread wählen, und dann später wieder nachschauen Inezient und wenig elegant. 68/72

Andere Probleme Page-faults Nicht das gesamte Programm im Speicher Wenn nicht geladene Speicheradresse referenziert wird: page fault BS holt fehlenden Bereich von Platte Prozess: blockiert! (nicht nur thread!) Wenn Thread CPU nicht hergibt... Keine Chance gegen Bösewichte! 69/72

Kernel-Mode threads Kein runtime-system mehr Thread-Table im Kernel Infos wie vorher Tabelle Teil des Prozesstabelleneintrags Thread-Erzeugung etc. system-call Hauptnachteil: Aufwand für Systemcalls viel höher als vorher Thread-recycling 70/72

Kernel-Space threads 71/72

Hyrbride 72/72