BS Kapitel 4 + Fragen
This commit is contained in:
		
							parent
							
								
									c1bbfdb7e2
								
							
						
					
					
						commit
						334136bc0e
					
				
							
								
								
									
										161
									
								
								Betriebssysteme - Fragen.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										161
									
								
								Betriebssysteme - Fragen.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,161 @@ | ||||
| Fragen und Fragestellungen zum Verständnis zur Vorlesung | ||||
| 
 | ||||
| # Prozesszustände und Zustandsmodelle | ||||
| > Warum existieren Prozesszustände? Gehen Sie speziell auf die Prozesszustände „bereit“ und „blockiert“ ein. | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Welches sind die in praktisch jedem Betriebssystem implementierten (grundlegenden) Prozesszustände? | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Nennen Sie Gründe für die Einführung weiterer Prozesszustände. Welche weiteren Prozesszustände sind Ihnen bekannt? | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Was ist die Aufgabe von Zustandsmodellen? | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Charakterisieren Sie das 3/5- und das 7-Zustandsmodell. | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Welchen Zusammenhang gibt es zwischen Prozesszuständen, Zustandsmodellen und der Automatentheorie? | ||||
| 
 | ||||
| 
 | ||||
| # Scheduler | ||||
| > Aus welchen Gründen existiert im Betriebssystem die Komponente „Scheduler“ und welche Aufgaben hat diese? | ||||
| 
 | ||||
| --- | ||||
| > Besitzt jedes Betriebssystem einen Scheduler? | ||||
| 
 | ||||
| --- | ||||
| > Charakterisieren Sie die Arbeitsweise eines Schedulers. | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Welche Vorkommnisse können allgemein zu einer Aktivierung des Schedulers führen? | ||||
| 
 | ||||
| 
 | ||||
| # Scheduling-Strategie und Scheduling-Algorithmus | ||||
| > Nennen Sie mögliche strategische Ziele des Scheduling. | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Was ist der Unterschied zwischen Scheduling-Strategie und Scheduling-Algorithmus? | ||||
| 
 | ||||
| 
 | ||||
| # Kontextwechsel | ||||
| > Was bedeutet es, einen Kontextwechsel auszuführen? Was muss dabei alles getan werden? | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Wodurch entstehen die Kosten eines Kontextwechsels und worauf wirken sich diese aus? | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| # Last und Lastmuster | ||||
| > Was ist unter „Last“ in einem Computer-System zu verstehen? | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Welche charakteristischen Lastmuster könnten dabei vorliegen? | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Welcher mögliche Zusammenhang existiert zwischen verschiedenen Lastmustern und verschiedenen Schedulingstrategien? | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| # Batch-Systeme, Interaktive Systeme und Echtzeitsysteme | ||||
| > Wodurch sind die genannten Systeme jeweils charakterisiert? | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Nennen Sie jeweils geeignete Scheduling-Strategien und charakterisieren Sie diese. | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| # Privilegierungsebenen | ||||
| > Welchen Sinn haben Privilegierungsebenen? | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Welches sind die grundlegenden, typischerweise verwendeten Privilegierungsebenen? | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Wie wirkt sich die Ausführung einer Aktivität in einer bestimmten Privilegierungsebene auf deren Arbeitsweise aus? | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| # Synchronisation & Kommunikation | ||||
| > Was versteht man unter einem kritischen Abschnitt? | ||||
| 
 | ||||
| --- | ||||
| > Warum darf sich in einem kritischen Abschnitt immer nur 1 Thread aufhalten? | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Wie können kritische Abschnitte geschützt werden? | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Was ist eine exklusiv nutzbare Ressource? | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Welchen Zusammenhang gibt es zu kritischen Abschnitten? | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Welcher Zusammenhang existiert zwischen „exkluviv nutzbarer Ressource“, „kritischer Abschnitt“ und „race conditions“? | ||||
| 
 | ||||
| 
 | ||||
| ## Semaphor | ||||
| > Beschreiben Sie einen Semaphor? | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Wozu wird er verwendet? | ||||
| 
 | ||||
| 
 | ||||
| ## Monitor (Hoar‘scher) | ||||
| > Beschreiben Sie einen Monitor? | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Wozu wird dieser verwendet? | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Welche Vorteile bieten Monitore gegenüber Semaphoren?  | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| > Was bedeutet Atomarität (von Anweisungen)? | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Wo ist Atomarität bei Semaphoren notwendig? | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Wie kann Atomarität durch Maschinenbefehle unterstützt werden? | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| > Wozu dienen Bedingungsvariable? | ||||
| > a) bei Monitoren | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| > b) Welche Verwendungsmöglichkeiten sind noch denkbar? | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| @ -308,7 +308,7 @@ Ein Kontextwechsel umfasst: | ||||
| - bei Wechsel zwischen Threads desselben Prozesses | ||||
|   - Stackkontext | ||||
|   - Prozessorregister | ||||
|   - floating point unit (hohe Kosten) | ||||
|   - floating point unit (hohe Kosten) (FPU) | ||||
| - zusätzlicher Wechsel zwischen Threads verschiedener Prozesse | ||||
|   - Speicherlayout (sehr hohe Kosten) | ||||
| - starke Auswirkungen auf | ||||
| @ -505,4 +505,234 @@ Botschaften | ||||
| Sämtliche Schutz- und Sicherheitsmechanismen von | ||||
| - Anwendungsprozessen | ||||
| - Betriebssystem | ||||
| beruhen elementar auf 2 Bits: „Current Privilege Level“ (CPL) im Prozessor-Status-Register (PSR) | ||||
| beruhen elementar auf 2 Bits: „Current Privilege Level“ (CPL) im Prozessor-Status-Register (PSR) | ||||
| 
 | ||||
| 
 | ||||
| # Kommunikation und Synchronisation | ||||
| ## Elementare Konzepte | ||||
| Beispiele: | ||||
| - Aufträge an Geräte und (Dienstleistungs-)Prozesse, z.B. | ||||
| - Kooperative Arbeit von Betriebssystem-Komponenten | ||||
| - Arbeit verschiedener Betriebssystemkomponenten mit (gemeinsamen) Management-Datenstrukturen | ||||
| - Interaktionen zwischen Anwendungsprozessen | ||||
| 
 | ||||
| Die Auftragstabelle ist eine (Software-)Ressource. | ||||
| - Problem: ein Fehler entsteht dadurch, dass zwei (oder mehr) Prozesse oder Threads „durcheinander“ auf der Ressource arbeiten | ||||
| - Lösung: Unkoordiniertes Arbeiten mit der Ressource muss verhindert werden! | ||||
| Erst wenn ein Prozess (oder Thread) seine Arbeit mit der Ressource vollständig abgeschlossen hat, darf der nächste aktiv werden. | ||||
| Die Befehlsfolge innerhalb der Prozesse, während deren Abarbeitung auf die Ressource zugegriffen wird, ist ein kritischer Abschnitt.  | ||||
| - Außerdem: genauere Betrachtung eines einzelnen Auftrags; kann aus mehreren Komponenten bestehen | ||||
| - Problem: durch „unkoordiniertes“ Arbeiten mehrerer Threads kann es auch bei den Auftrags-Einträgen zu Inkonsistenzen kommen | ||||
| 
 | ||||
| Fazit: | ||||
| - Gesamte Arbeit an Auftragstabelle ist kritischer Abschnitt. | ||||
| - Nur 1 Thread darf zu einem Zeitpunkt mit Auftragstabelle arbeiten. | ||||
| - Erst wenn dieser Arbeit beendet hat, darf ein neuer Thread mit der Auftragstabelle arbeiten. | ||||
| 
 | ||||
| Definitionen:\\ | ||||
| Es gibt Ressourcen, die als ganzes oder bzgl. einzelner Operationen nur exklusiv, d.h. zu einem Zeitpunkt nur durch einen einzigen Thread nutzbar sind. | ||||
| 1. Eine Phase, in der ein Thread eine exklusive Operation auf einer Ressource ausführt, heißt kritischer Abschnitt. | ||||
| 2. Kritische Abschnitte erfordern den wechselseitigen Ausschluss (die Isolation) konkurrierender Threads bzw. Prozesse. | ||||
| 
 | ||||
| Beispiel 2: Kommunikation von 2 Prozessen über gemeinsamen Speicherbereich („Erzeuger-Verbraucher-Problem“) | ||||
| - Problembeschreibung: | ||||
|   - Ein Prozess schreibt Daten in den Speicherbereich ... | ||||
|   - Der zweite Prozess liest diese Daten ... | ||||
|   - Die Datenmenge ist so umfangreich, dass dieser Vorgang mehrmals (abstrahiert: unendlich oft) wiederholt werden muss. | ||||
| - 1. Problem (Puffer voll, Puffer leer); unterschiedliche Geschwindigkeiten von Erzeuger und Verbraucher | ||||
| - 2. Problem (Puffer wird gerade benutzt); gleichzeitiges Lesen und Schreiben des selben Pufferelements | ||||
| 
 | ||||
| ## Algorithmen zum wechselseitigen Ausschluss | ||||
| Genauere Definition des Problems (Annahmen) | ||||
| 1. konkurrierende Threads arbeiten asynchron, z.B. in einer unendlichen Schleife | ||||
| 2. dabei betreten und verlassen sie irgendwann einen kritischen Abschnitt | ||||
| 3. Betreten und Verlassen dieses Abschnitts: wird durch Algorithmen organisiert, die den kritischen Abschnitt umgeben (Entry/Exit-Code) | ||||
| 
 | ||||
| Grundsätzliche Anforderungen | ||||
| 1. Korrektheit: In einem kritischen Abschnitt befindet sich zu jedem Zeitpunkt höchstens ein Thread (**wechselseitiger Ausschluss**). | ||||
| 2. Lebendigkeit: Falls ein Thread einen kritischen Abschnitt betreten möchte, dann betritt (irgendwann) (irgend) ein Thread diesen Abschnitt. [Folglich kann **irgendwann** auch der erstgenannte Thread **den kritischen Abschnitt betreten**.] | ||||
| 3. Verhungerungsfreiheit: **Kein Thread wartet für immer** vor einem kritischen Abschnitt. | ||||
| 
 | ||||
| Wechselseitiger Ausschluss: ein erster (naiver) Versuch | ||||
| - Ideen | ||||
|   1. während Benutzung des Puffers: wird dieser als „busy“ markiert | ||||
|   2. bei Vorfinden eines so markierten Puffers: wird gewartet | ||||
| - Verhungern: z.B. bei Pseudoparallelität (fortwährende Unterbrechung des Writers im kritischen Abschnitt) | ||||
| 
 | ||||
| ## Synchronisations- & Kommunikationsmechanismen | ||||
| - Austausch von Daten zwischen Prozessen $\rightarrow$ Kommunikation (Inter-Prozess-Kommunikation, IPC) | ||||
| - Abweichende Geschwindigkeiten von Sender und Empfänger $\rightarrow$ Synchronisation | ||||
| 
 | ||||
| Betrachtete Mechanismen: | ||||
| - Semaphore | ||||
| - Hoare ́sche Monitore | ||||
| - Transaktionalen Speicher | ||||
| - Botschaften | ||||
| - Fernaufrufe | ||||
| 
 | ||||
| ### (binäre) Semaphore | ||||
| Idee: Flagge | ||||
| - mit 2 Zuständen | ||||
|     1. frei | ||||
|     2. belegt | ||||
| - mit 2 atomaren Operationen | ||||
|     1. belegen: P( Semaphorname ) („Passeren“) | ||||
|     2. freigeben: V (Semaphorname) („Vriegeven“) | ||||
| - Sämtliche Nutzer dieses kritischen Abschnitts müssen diese semaphore verwenden (Entry-/Exit-Code, Türwächter) | ||||
| - besser: kein aktives Warten | ||||
| 
 | ||||
| ```cpp | ||||
| // pic ← codePicFromCamStream(); | ||||
| if bufferBusy.zustand = frei then | ||||
| bufferBusy.zustand ← belegt | ||||
| else | ||||
| bufferBusy.warteliste ← aufrufer | ||||
| fi | ||||
| //write(buffer, pic); | ||||
| if bufferBusy.warteliste = leer then | ||||
| bufferBusy.zustand ← frei | ||||
| else | ||||
| bufferBusy.warteliste.vorne.continue | ||||
| fi | ||||
| ``` | ||||
| 
 | ||||
| Implementierung von Semaphoren z.B. als Klasse (Objekt-Orientiert), | ||||
| - die die Methoden P und V exportiert | ||||
| - mit einer lokalen Thread-Warteliste | ||||
| - mit (aus dem Maschinenraum) importierten Operationen atomicBegin und atomicEnd, die Atomarität herstellen | ||||
| ```cpp | ||||
| P(semaphore s) { | ||||
|   atomicBegin(s); | ||||
|   if (s.zustand = frei) | ||||
|     s.zustand ← belegt; | ||||
|   else | ||||
|     s.warteliste ← aufrufer; | ||||
|       scheduler.suspend(aufrufer); | ||||
|   fi | ||||
|   atomicEnd(s); | ||||
| } | ||||
| 
 | ||||
| V(semaphore s) { | ||||
|   atomicBegin(s); | ||||
|   if (s.warteliste = leer) | ||||
|     s.zustand ← frei; | ||||
|   else | ||||
|     scheduler.continue | ||||
|       (s.warteliste.vorne) | ||||
|   fi | ||||
|   atomicEnd(s); | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| Unterstützung durch Hardware: die TSL-Operation | ||||
| - Atomarität | ||||
| - Ausschluss paralleler Ausführung | ||||
| → TestAndSetLock („TSL“) im Instruktionssatz eines Prozessors | ||||
| ```cpp | ||||
| atomicBegin(s): | ||||
| TSL s.state, callingThread.Id // try to get lock | ||||
| CMP s.state, callingThread.Id // did I get it? | ||||
| JZE gotIt // yes | ||||
| CALL scheduler.yield // optional in manycores, mandatory | ||||
| // in monocores: yield processor | ||||
| JMP atomicBegin // try again | ||||
| gotIt: RET // got it, may enter critical region | ||||
| ``` | ||||
| 
 | ||||
| Nutzung von Semaphoren: | ||||
| - Multi-Thread-Anwendungen (Webserver, PowerPoint, etc.) | ||||
| - auf Betriebssystem Ebene von allen nebenläufigen Aktivitäten | ||||
| 
 | ||||
| Implementierung | ||||
| - im Ressourcenmanagement des Betriebssystems | ||||
| - mit Hilfe des „Maschinenraums“: atomicBegin(s), atomicEnd(s) | ||||
| 
 | ||||
| !ungelöst: Geschwindigkeitsdifferenz | ||||
| ```cpp | ||||
| //Writer-Thread: | ||||
| forever do {  | ||||
|   codePicFromCamStream(pic); | ||||
|   P(bufferEmpty); | ||||
|   P(bufferBusy); | ||||
|   write(buffer,pic); | ||||
|   V(bufferBusy); | ||||
|   V(bufferFull); | ||||
| } | ||||
| ``` | ||||
| - bufferBusy: verhindert gleichzeitigen Zugriff | ||||
| - bufferEmpty: gibt Weg frei, wenn der Puffer leer ist | ||||
| - bufferFull: gibt Weg frei, wenn er gefüllt ist | ||||
| 
 | ||||
| Mehrwertiger Semaphor (oder Zählsemaphor) mit mehreren Semaphoren; maximaler Sem-Wert = n, bestimmt maximale Anzahl von Threads, die gleichzeitig aktiv sein können | ||||
| 
 | ||||
| Zusammenfassend: | ||||
| | bei Eintritt in kritischen Abschnitt | Bei Verlassen eines kritischen Abschnitts | | ||||
| | -- | -- | | ||||
| | P(Sem) - binärer Semaphor | V(Sem) - binärer Semaphor | | ||||
| | Down(Sem) - Zählsemaphor | Up(Sem) - Zählsemaphor | | ||||
| | Wait(Sem) - allgemein |  Signal(Sem) - allgemein | | ||||
| | Haben die gleiche Wirkung auf den Wert des Semaphors: | Haben die gleiche Wirkung auf den Wert des Semaphors: | | ||||
| | - Dekrementieren, bis Wert „Null“ erreicht | - Inkrementieren des Semaphorwertes | | ||||
| | - Trifft ein Thread auf den Wert „Null“, wird dieser blockiert (und in eine Warteliste eingefügt) | | | ||||
| | - Nimmt der Semaphor wieder einen Wert > 0 an, setzt (normalerweise) erster Thread in Warteliste fort | | | ||||
| 
 | ||||
| ### Hoare'sche Monitore | ||||
| - Problem bei Anwendung von Semaphoren: Softwarequalität | ||||
| - Problematisch in größeren Systemen: | ||||
|   - Synchronisationsoperationen (P und V) | ||||
|     - umgeben kritische Operationen (z.B. read/write) | ||||
|     - müssen explizit gesetzt werden | ||||
| 
 | ||||
| Korrektheitsproblem. Die unabdingbare | ||||
|   - Vollständigkeit | ||||
|   - Symmetrie | ||||
| der P- und V-Operationen ist schwierig erreichbar und nachweisbar. | ||||
| 
 | ||||
| - Die Idee: implizite/automatische Synchronisation kritischer Operationen | ||||
| - Der Weg: Nutzung des Prinzips der Datenabstraktion | ||||
|   - Zusammenfassung von Daten, darauf definierten Operationen und der Zugriffssynchronisation zu einem abstrakten Datentyp, dessen Operationen wechselseitigen Ausschluss garantieren | ||||
|   - Zugriff auf Daten: über implizit synchronisierende Operationen („Inseln der Ruhe“ in turbulenten Multithread-Umgebungen) | ||||
|   - Die kritischen Abschnitte und die zugehörigen Daten liegen jetzt in einem durch einen Monitor geschütztem Bereich | ||||
| 
 | ||||
| Aufrufer muss nicht wissen | ||||
| 1. ob Synchronisation nötig ist | ||||
| 2. mit welchen Mechanismen dies erfolgen muss | ||||
| 3. welche Regeln dabei gelten | ||||
| 
 | ||||
| Ziel der Regeln\\ | ||||
| Wechselseitiger Ausschlusses der Monitoroperationen ⟺ zu jedem Zeitpunkt ist höchstens ein Thread in einem Monitor aktiv | ||||
| 1. Jede Monitoroperation ist am Eingang und an den Ausgängen durch einen Türsteher gesichert | ||||
| 2. Das Betreten des Monitors erfolgt nur mit dessen Zustimmung („Anklopfen“) | ||||
| 3. Falls ein anderer Thread im Monitor aktiv ist, wird die Zustimmung verweigert und der anklopfende Thread suspendiert ( $\approx$ P-Operation) | ||||
| 4. Wenn ein Thread den Monitor verlässt, wird ein wartender Thread eingelassen (fortgesetzt), ( $\approx$ V-Operation) | ||||
| 5. Gerät ein Thread innerhalb einer Monitoroperation in eine Wartesituation (Warten auf Bedingungsvariable), so verlässt er den Monitor | ||||
| 6. Bevor ein auf eine Bedingung wartender Thread fortgesetzt wird, muss er wieder am Türsteher vorbei | ||||
| 
 | ||||
| Implementierung der Regeln basierend auf Semaphoren | ||||
| - je Monitor: ein Semaphor | ||||
| - jede Operation eines Monitors enthält | ||||
|   - am Eingang: eine P-Operation | ||||
|   - an jedem (!) Ausgang: eine V-Operation | ||||
| $\rightarrow$ wechselseitiger Ausschluss | ||||
| 
 | ||||
| Bedingungsvariable „Puffer nicht voll“, „Puffer nicht leer“ mit 2 Operationen: | ||||
| 1. Warten auf das Vorliegen der Bedingung | ||||
| 2. Signalisieren des Vorliegens der Bedingung | ||||
| $\rightarrow$ Monitore mit Bedingungsvariablen | ||||
| 
 | ||||
| Monitore: komfortabler Mantel für Semaphore | ||||
| 
 | ||||
| Allgemeines Erzeuger/Verbraucher-Problem | ||||
| Lösung 2er Aspekte der Synchronisation | ||||
| 1. wechselseitiger Ausschluss der Zugriffe auf gemeinsame Daten („buffer“) | ||||
|     - durch wechselseitigen Ausschluss von Monitoroperationen | ||||
|     - kurzzeitiges Ausbremsen | ||||
| 2. Anpassung unterschiedlicher Geschwindigkeiten von Erzeuger und Verbraucher | ||||
|     - durch Warten auf und Signalisieren von Bedingungen (nonFull, nonMt) | ||||
|     - längerfristiges Ausbremsen | ||||
| 
 | ||||
| Methoden und Mechanismen verwendbar für | ||||
| 1. Threads und Prozesse innerhalb eines Betriebssysteme | ||||
| 2. Threads innerhalb eines Anwendungsprozesses | ||||
| 3. Anwendungsprozesse untereinander (notwendig: gemeinsamer Speicher!) | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user