Betriebssysteme
Ein Betriebssystem verwaltet das Zusammenspiel der Hardware- und Software-Komponenten eines Computers
- Computerarchitektur
- Von-Neumann-Architektur
- Komponenten eines VNR
- CPU
- Speicherwerk
- Ein- / Ausgabewerk
- Vom Quellcode zum Prozessor
- Ablauf der Steuerung
- Register auf der CPU - Stackregister
- Basisregister und Limitregister
- Interrupt-Controller
- DMA - Controller
- MMU - Memory Management Unit
- Count Programm (Assembler)
- Einführung in die Betriebssysteme
- Zentrale Aufgabe eines BS
- Zwischen Benutzer und Hardware
- Wichtige Fachbegriffe
- Betriebsmittel / Betriebssystemarten
- Batch-Job zum Multitasking
- Abarbeitung von Befehlen auf CPU
- Systemaufruf durch Programmierer
- Prozessverwaltung
- Prozesskontext
- Prozesse erzeugen
- Prozesskontrollblock
- Prozesstabelle
- Prozesszustände
- Prozessverwaltung
- Threads
- Scheduling
- Synchronisation
- Semaphore
- Deadlocks
- Interprozesskommunikation
- Speicherverwaltung
- Geräteverwaltung
- Dateiverwaltung
Computerarchitektur
Die Computerarchitektur ist ein Teilgebiet der Informatik, welche sich mit dem internen sowie externen Aufbau eines Computersystems beschäftigt
Von-Neumann-Architektur
Über Hauptplatine sind alle Komponenten miteinander verbunden. Das ist in Systemen ein kompliziertes Verbindungsgeflecht, weshalb man sich dieser Materie zunächst mit Hilfe einer sehr vereinfachten Darstellung nähert, der Von-Neumann-Architektur.
Computer, der nach Prinzipien der Von-Neumann-Architektur aufgebaut ist, nennt man Von-Neumann-Rechner
Dies ist Referenzsystem für Computer und bestehtaus einer CPU mit Steuerwerk und Rechenwerk, einem Ein- / Ausgabewerk, einem Speicherwerk und Bus-System. Das Bus-System verbindet die Komponenten miteinander.
- Grundlage nahezu jedes Betriebssystem
- Ein-/Ausgabewerk = HDD; Speicherwerk = RAM
- je dicker der Pfeil, desto mehr Informationen pro Sekunde
Von-Neumann-Flaschenhals
Nur eine angeschlossene Komponente kann zur selben Zeit schreibend auf das Bussystem zugreifen, da es sonst zu einer Kollision kommen würde. Das macht das Gerät insgesamt langsam.
Kollision
Sollten einmal zwei (oder mehr) angeschlossene Komponenten zur selben Zeit auf den Bus schreiben, so kommt es zu einer Überlagerung der Signale, wodurch diese unbrauchbar werden. Man nennt dies eine Kollision auf dem Bus.
Strategien zur Kollisionsvermeidung
Damit Rechner trotz Von-Neumann-Flaschenhals funktionieren kann, sind Strategien zur Vermeidung von Kollisionen auf Bus nötig. Sind negativ für Geschwindigkeit, mit der Datenübertragung über den Bus möglich ist und des gesamten Rechners.
Komponenten eines VNR
CPU
Die CPU ist ein zentraler Bestandteil eines Computers. Sie besteht in erster aus Steuerwerk, Rechenwerk sowie Registern.
Register ist digitaler Speicherbereich, der auf CPU angesiedelt ist, und Gruppe von binären Werten (Bits) speichern kann.
→ Anzahl der gleichzeitig in einem Register speicherbaren Bits nennt man die Breite des Registers oder Registerbreite
→ Bei einer Breite von n Bit spricht man auch von einem n-Bit-Register. (4, 8, 16, 32 oder 64 Bit.)
Steuerwerk
Bestandteil der CPU und für die sequentielle Abarbeitung des im Speicherwerk befindlichen Programms zuständig.
→ sendet die Adresse des aktuellen Befehls an das Speicherwerk
→ erhält als Antwort genau jenen Befehl, der an der übermittelten Adresse innerhalb des Speicherwerks steht.
→ Sobald das Steuerwerk den Befehl erhalten hat, wird dieser ausgeführt.
- Damit die Adresse des aktuellen Befehls vom Steuerwerk verwaltet werden kann, muss es einen Speicherbereich dafür geben. → Verwendet wird dazu ein Register: Program Counter, kurz: PC.
- Damit der vom Speicherwerk empfangene Befehl verwaltet werden kann, muss es einen Speicherbereich dafür geben.
→ Verwendet wird dazu ein Register: Befehlsregister, kurz: IR. - Die Adresse des aktuellen Befehls kann über das vorhandene Bus-System an das Speicherwerk gesendet werden.
→ Verbindung der Register PC sowie IR mit dem Bus-System muss daher gegeben sein.
Ein Bus (Binary Unit System) dient zur parallelen Übertragung einer Gruppe von Bits.
→ Die Anzahl der parallel übertragbaren Bits auf einem Bus nennt man die Breite des Busses oder Busbreite. (4, 8, 16, 32 oder 64)
schreibender Zugriff: wenn eine an diesem Bus angeschlossene Komponente eine Gruppe von Bits auf Bus gibt. (Senden)
lesender Zugriff: wenn eine an Bus angeschlossene Komponente Gruppe von Bits vom Bus entgegennimmt. (Empfangen)
→ Es können beliebig viele Komponenten zur gleichen Zeit Informationen über den Bus empfangen, jedoch nur eine Senden
Ein Adressbus ist ein Bus, bei dem die parallel übertragene Gruppe von Bits als Adresse zu interpretieren ist.
Ein Datenbus ist ein Bus, bei dem die parallel übertragene Gruppe von Bits als Daten zu interpretieren ist.#
Rechenwerk
Führt vom Steuerwerk in Auftrag gegebene Berechnungen durch. Hauptbestandteil ist ALU
Vom Rechenwerk bereitgestellte Funktionen
- Addition der Operanden (A + B)
- Subtraktion (A - B)
- Multiplikation (A * B)
- Konjunktion (logisches UND, bitweise)
- Disjunktion (logisches ODER, bitweise)
- Vergleich von A und B (bitweise)
- etc.
Speicherwerk
Das Speicherwerk ist in eine endliche Anzahl gleichgroßer (aber verhältnismäßig kleiner) Speicherzellen unterteilt (RAM)
→ Jede Zelle verfügt dabei über eine eindeutige Adresse.
→ Es kann nur Informationen speichern bei eingeschaltetem Rechner.
→ Speicherwerk kann den Wert einer adressierten Speicherstelle auslesen und zur Verfügung stellen oder andersherum
Ein Steuerbus ist ein Bus, bei dem die parallel übertragene Gruppe von Bits als Steuerinformation zu interpretieren ist.
Ein- / Ausgabewerk
Das Ein-/Ausgabewerk ist in der Von-Neumann-Architektur nicht näher spezifiziert. Man kann es sich vorstellen als eine Art von "Stellvertreter" für alle weiteren Komponenten eines modernen Rechners. Z.B. also für Komponenten wie:
- Monitor mit Grafikkarte
- Festplatte mit Controller
- Netzwerkkarte mit Controller
- Maus mit Controller
- Tastatur mit Controller
- etc.
Für jede Komponente ist ein eigener Controller vorgesehen, der das Bus-System mit dem eigentlichen Gerät verbindet.
Vom Quellcode zum Prozessor
- Compiler übersetzt Quellcode in Maschinensprache
-> Compiler muss wissen welche CPU weil unterschiedlich Sprache
-> z.B: 16 Bit CPU = Befehle von 16 Bit können überführt werdenvoid main (void){
int x = 2;
int y = 5;
int z = x + y;
}zu
00000000110000100000000100001101000000001100010100000001000011100000000010001101000000011000111000000001000011110000001110000000
- Maschinensprache in Einzelteile zerlegen
-> Wenn Nummer = 1, dann geht es um die Zahl, sonst um die Speicherzelle
-> die Befehle werden auf dem ACC durchgeführt
Reserve Befehl Nr. Operant Bedeutung Nr. Befehl Bedeutung 000000
000000
000000
000000
000000
000000
000000
000000
001
010
001
010
001
011
010
111
1
0
1
0
0
0
0
0
000010
001101
000101
001110
001101
001110
001111
000000
Lade den Wert 2 in ACC
Speichere ACC in Speicherzelle 13
Lade den Wert 5 in ACC
Speichere ACC in Speicherzelle 14
Lade Speicherzelle 13 in ACC
Addiere Speicherzelle in 14 zu ACC
Speichere ACC in Speicherzelle 15
Programm beenden
000
001010
011
100
101
110
111
NOOP
LOAD
STORE
ADDSUB
EQUAL
JUMP
HALTNo Operation
Was laden
Speicher
Addieren
Minimieren
Vergleichen
Überspringe
Beenden
Befehlsformat
Das Befehlsformat definiert für jeden einzelnen Befehl, wie dieser codiert ist: <Befehl><Num><Operand>
Opcode - Binäre Codierung, aus der sowohl der Befehl, als auch zusätzlich benötigte Steuerinformationen hervorgehen.
Klassifizierungen - Bei den Befehlsformaten werden verschiedene Klassifizierungen unterschieden:
- Einadressformat | Zweiadressformat | Dreiadressformat
Das Einadressformat entspricht dem Format Vom Quellcode zum Prozessor. Hier wird für die einzelnen Befehle nur der Opcode und die Adresse eines Operanden (deshalb Einadressformat) angegeben.
<Opcode><Operand1>
Bedeutung des Akkumulators
Wird ein zweiter Operand benötigt, so wird vorausgesetzt, dass dieser sich im Register Akkumulator befindet. Das bei der Abarbeitung des Befehls berechnete Ergebnis wird per Definition wieder im Akkumulator gespeichert.
Ablauf der Steuerung
CPU - Steuerwerk
- PC und IR sind im Steuerwerk
- Für den Ablauf gibt es 2 Voraussetzungen
1. der PC muss auf 0 stehen
2. Das Programm muss im RAM sein - Es wird folgender Zyklus durchlaufen:
- Fetch:
- Über Adressbus wird Befehl der aktuelle Nummer vom PC an RAM und Befehl des Steuerwerks übergeben
- über den Databus werden die Information der Speicherzelle in das Steuerwerk übermittelt
- über den Steuerungsbus wird die Art des Befehl mit übergeben, z.B: lesen
- wenn mehrere Programme im Ram gespeichert sind wird zuerst die Basis zu Programm Counter (PC) addiert
- Decode: stellt die Weichen für CPU, erhöht den PC um 1
- Execute: Führt den Befehl aus
- nach Durchlauf des Zyklus, wird PC um einen Wert erhöht und Zyklus beginnt neu
-
Wenn ein Programm starten soll wird der Programmcounter auf 0 gesetzt
-
Wenn B anfangen soll wird der Basis Register auf 512 gesetzt das Instruktionregister (IR) speichert den letzten Inhalt der auf dem PC zeigt interlegt
CPU - Rechenwerk
Das Rechenwerk führt vom Steuerwerk in Auftrag gegebene Berechnungen durch.
In der ALU werden Funktionen durchgeführt. Die Werte werden schließlich im Akkumulator zwischengespeichert, wo sie ausgelesen werden können.
Speicherwerk (RAM)
- in endliche Anzahl gleichgroßer Speicherzellen unterteilt
- jede Zelle verfügt über eine eindeutige Adresse
- kann Wert einer adressierten Speicherstelle auslesen oder Wert in eine Speicherzelle schreiben.
Ein- / Ausgabewerk
Transaktion von Informationen über verschiedene Peripheriegeräte (Maus, Tastatur, Monitor, ...). Für jedes Gerät gibt es einen Controller.
Register auf der CPU - Stackregister
Stackregister
- ist eine Datenstruktur, die in der CPU abgespeichert wird
- Im Stackregister wird der Stackpointer, der oberste Punkt des Stacks, gespeichert.
- Daten aufnehmen und wieder abgeben
- Zugriff über die Befehle PUSH sowie POP möglich
- Int x = 5; wird im Data Bereich gespeichert
- Int i = new Integer (5); ist eine neue Instanz und wird daher im Heep abgespeichert
- Stack/Heep flexible in der Kapazität nutzbar
- Speicher ist voll, wenn Stack und Heep sich berühren
- Jedes Programm hat eigenen Speicherbereich
Basisregister und Limitregister
- Basisregister enthält als Wert die Adresse der Speicherstelle mit ersten Befehl des aktiven Prozesses
- Im Limitregister wird die Größe des Speicherbereiches gespeichert und schützt überbelastung
-
-
-
- wichtig, um mehrere Programme im RAM zu halten
-
-
-
- Ein Programm, dass ausgeführt wird, wird Prozess genannt
- ein Prozess darf nur in seinem RAM-Bereich ablaufen
- z.B: A: Basis: 0, Limit 512; B: Basis 512:, Limit 256
- in Fetch Phase muss PC Wert kleiner sein als im Limitregister:
- PC < Limit -> dann darf Prozess ausgeführt werden
- am Anfang von Fetch wird Basis und PC addiert, die Nummer wird über Adressebus zum RAM übergeben
Mehrere Prozesse gleichzeitig im Speicher
- Starte den Rechner.
- Lade nacheinander mehrere Programme in den Hauptspeicher. Die Befehle des ersten Programms werden zusammenhängend ab Speicherzelle 0 abgelegt, die Befehle der weiteren Programme jeweils zusammenhängend in freien Speicherbereichen danach.
- Treffe für jedes Programm die nötigen Vorarbeiten für seine spätere Ausführung.
- Starte in Speicherzelle 0 mit der Ausführung des ersten Befehls des ersten Prozesses.
- Führe entsprechend des Ablaufs alle weiteren Befehle dieses ersten Prozesses aus.
- Wenn Ausführung des ersten Prozesses beendet (HALT-Befehl), wird CPU auf zweiten Prozess vorbereitet.
- Starte mit dem ersten Befehl des zweiten Prozesses...
Swapping: Aus- und Einlagern von kompletten Prozessen
→ Wenn mehr Programme gleichzeitig in den Hauptspeicher aufgenommen werden sollen, als verfügbare Hauptspeicher
WER oder WAS lagert Prozesse aus oder ein? - BETRIEBSSYSTEM
Unter Swapping versteht man das Aus- bzw. Einlagern eines kompletten Prozesses.
→ Entscheidend ist hier der Begriff kompletter Prozess, also sowohl der Programmtext, als auch alle zugehörigen Daten.
→ Daten aus Datensegment im Hauptspeicher und alle zu diesem Prozess gehörigen Daten aus Registern der CPU berücksichtigen
Limitregister zum Speicherschutz
→ mehrere Prozesse gleichzeitig im Hauptspeicher erfordert eine Berücksichtigung von Sicherheitsbelangen.
→ sichergestellt werden, dass Prozess nicht auf Speicherzellen im Hauptspeicher zugreift, die anderen Prozess zugeordnet sind.
Interrupt-Controller
Interrupt-Controller: Interrupt-Signale von Komponenten des Rechners entgegen zu nehmen, und die CPU über das Vorliegen von einem (oder mehreren) Interrupts zu informieren.
→ Die CPU ist dann für die Abarbeitung des Interrupts zuständig.
→ Dies geschieht, indem eine sogenannte Interruptbehandlungsroutine aufgerufen wird.
Interruptbehandlungsroutine (ISR): eine Reihe von Anweisungen, die einem bestimmten Interrupt zugeordnet ist und deren Anweisungen auf einer CPU ausgeführt werden können.
Keine negative Beeinträchtigung
→ Interrupt unterbrochene Prozess muss später ohne negative Beeinträchtigung weiter ausgeführt werden können
→ Das vom Prozess erarbeitete Ergebnis darf sich nicht unterscheiden
Einen Interrupt nennt man eine präzise Unterbrechung, falls alle der folgenden Bedingungen erfüllt sind:
- Der Programmzähler des unterbrochenen Prozesses wird an einer bekannten Stelle gesichert.
- Alle Befehle des unterbrochenen Prozesses, die vor dem Befehl ausgeführt werden müssen, auf den der Programmzähler zeigt, sind vollständig abgearbeitet.
- Kein Befehl des unterbrochenen Prozesses, der nach dem Befehl ausgeführt werden muss, auf den der Programmzähler zeigt, ist bereits abgearbeitet.
- Der Ausführungszustand des Befehls des unterbrochenen Prozesses, auf den der Programmzähler zeigt, ist bekannt.
Einen Interrupt nennt man eine unpräzise Unterbrechung, falls mindestens eine der für einen präzisen Interrupt genannten Bedingungen nicht erfüllt ist.
Gründe für eine Interrupt-Auslösung:
- Auslösung aufgrund einer Speicherschutzverletzung.
- Auslösung durch einen Hardware-Taktgeber zur quasi-gleichzeitigen Ausführung mehrerer Prozesse.
- Auslösung durch ein E/A-Gerät während der Kommunikation zwischen CPU und E/A-Gerät
Speicherschutzverletzung
→ Stellt das Steuerwerk während der Abarbeitung eines Prozesses fest, dass der aktive Prozess auf einen Speicherbereich im Hauptspeicher zugreifen möchte, der ihm selbst nicht zugeordnet ist, so handelt es sich um eine Speicherschutzverletzung, die durch einen Interrupt angezeigt wird.
→Reaktion: Speicherschutzverletzung verursachende Prozess wird ohne zu speichern beendet
Interruptablauf - Beispiel: Eine Datei soll in den RAM-Speicher innerhalb eines Prozesses abgespeichert werden.
1. CPU schickt Anforderung eines Datenworts an die Festplatte und führt danach einen Kontextwechsel aus
2. HD löst Interrupt aus. Interrupt wird an Interrupt-Controller gesendet und in Queue gespeichert.
3. Der Interrupt-Controller meldet den Interrupt dem Steuerwerk.
4. Nach letzten Execute-Phase des aktuellen Prozesses werden Registerinhalte gesichert. Die Interruptbehandlungsroutine wird ausgeführt. Datenwort wird mit Speicherzelle und Befehl (wirte) wird an Hauptspeicher geschickt (Adressbus, Databus, Steuerbus)
Kontextwechsel
- Festplatte braucht mehr Zeit als die CPU
- CPU macht beim Warten einen Kontextwechsel -> ein anderer Prozess wird abgearbeitet
-
Während Kontextwechsels werden Registerinhalte des vorherigen Prozesses gesichert und des neuen Prozesses geladen.
Kontextwechsel versus Interrupt
Der Unterschied zwischen Kontextwechsel und Interrupt, ist die Dauer der Unterbrechung
Kontextwechsel: sehr aufwendig, da viele Informationen auf unterschiedliche Register abgespeichert werden
Interrupt: arbeitet mit dem ISR und somit handelt es sich nur um ein Programm, dass für sich selbst sichert
Gründe für eine Interrupt-Auslösung
- Auslösung aufgrund einer Speicherschutzverletzung
- Auslösung durch einen Hardware-Taktgeber zur quasi-gleichzeitigen Ausführung mehrerer Prozesse.
- Auslösung durch ein E/A-Gerät während der Kommunikation zwischen CPU und E/A-Gerät.
Quasi-gleichzeitige Ausführung mehrerer Prozesse
→ indem sich die betreffenden Prozesse in kleinen Zeiteinheiten auf der CPU abwechseln
WER oder WAS bestimmt, wann es Zeit ist, einen Prozess zu unterbrechen und die CPU einem anderen Prozess zuzusprechen?
WER oder WAS bestimmt, welcher Prozess als nächstes die CPU bekommt?
Hardware-Taktgeber löst in sehr kleinen zeitlichen Abständen einen Interrupt auslöst
→ Wird entschieden, dass es Zeit für einen Prozesswechsel auf CPU ist, so kann ein anderer Teil des Betriebssystems aufgerufen werden, der den nächsten Prozess auswählt und ihm die CPU übergibt.
Kommunikation mit E/A-Geräte (Festplatte/Monitor/Maus/Tastatur/...)
→ CPU kommuniziert nicht direkt mit diesen Komponenten, sondern mit einem Controller, speziell für die Komponente zuständig
- Steuerregister
- Datenregister: Datenwort hinterlegen
- Zustandsregister
Datentransfer und Interrupts
- Die CPU sendet die Adresse des gewünschten Datenwortes an den Festplatten-Controller.
- Der Festplatten-Controller besorgt das Datenwort von der Festplatte und stellt es in seinem Datenregister zur Verfügung.
- Der Festplatten-Controller sendet einen Interrupt zum Interrupt-Controller.
- Der Interrupt-Controller nimmt den Interrupt entgegen und verwaltet ihn.
- Der Interrupt-Controller informiert die CPU über den Interrupt des Festplatten-Controllers.
- Die CPU startet die zugehörige Interruptbehandlungsroutine.
- Die Behandlungsroutine kopiert das Datenwort in ein Register auf der CPU.
- Die Behandlungsroutine sendet das Datenwort von der CPU zum Hauptspeicher.
- Der Hauptspeicher legt das Datenwort in der gewünschten Speicherzelle ab.
- Die Interruptbehandlungsroutine informiert den Interrupt-Controller darüber, dass der Interrupt fertig behandelt ist.
DMA - Controller
Direct Memory Access-Controller ist eine Hardware-Komponente, die die Geschwindigkeit des Gesamtsystems erhöht.
→ Erreicht werden soll dies durch Reduzierung der Anzahl an Interrupts, die bei der Kommunikation zwischen der CPU und den E/A-Geräten ausgelöst werden und durch die Spezialisierung des DMA-Controllers.
→ Die Daten sollen zwischen dem Hauptspeicher und einem weiteren DMA-fähigen Peripheriegerät übertragen werden.
- Vorher: Bei einem Datentransfer ohne DMA-Controller ereignete sich ein Interrupt pro Datenwort.
- mit DMA-Controller: nur noch ein Interrupt für die gesamte Übertragung
- Lösung: Datenwörter direkt zwischen dem Hauptspeicher und einem DMA-fähigen Peripheriegerät auszutauschen
- CPU muss lediglich zu Beginn und am Ende der Übertragung eingreifen.
Allgemeiner Ablauf
1. Die CPU versorgt aus Steuerwerk DMA-Controller mit Informationen zu beteiligte Komponenten, Start- und Zieladresse, Anzahl zu übertragener Datenwörter und Übertragungsrichtung und erteilt DMA-Controller Erlaubnis, mit Datenübertragung zu beginnen.
2. Der DMA-Controller steuert die Übertragung aller Datenwörter
3. HD gibt die Datenwörter zurück
4. DMA lässt die Datenwörter auf den RAM schreiben
- Wenn alle Daten übertragen sind, informiert DMA-Controller mit einem Interrupt über den Abschluss des Datentransfers
- Der Interrupt-Controller empfängt den Interrupt und leitet ihn an die CPU weiter
- Auf CPU wird die zugehörige ISR ausgeführt und die Datenübertragung per DMA ist abgeschlossen.
MMU - Memory Management Unit
- Unterstützt das Betriebssystem bei der Verwaltung des Hauptspeichers
- trägt zu einer Flexibilität und besseren Ausnutzung des vorhandenen physischen Speichers (RAM) bei
-
durch die Einführung einer MMU wird das BS bei der Umrechnung von virtuellen in physische Speicheradressen unterstützt
Wie es bisher ohne MMU ist
- ohne MMU wird mit dem Basisregisters und Limitregister gearbeitet
- für jeden Prozess am zusammenhängenden Speicherteil
- nachteilig: wenig flexibel -> es muss bereits zu Beginn festgelegt werden, wie groß dieser Speicherbereich ist.
Um Flexibilisierung der Speicherverwaltung zu erreichen, wird in BS Konzepte einer virtuellen Speicherverwaltung integriert
Wir brauchen ein Betriebssystem!
Virtuelle Speicherverwaltung
Unter dem physischen Speicher eines Computers versteht man den tatsächlich in dieses Gerät verbauten Speicher, soweit er direkt von der CPU oder der MMU angesprochen werden kann. Eine Seite ist ein zusammenhängender Block von Speicherzellen des physikalischen Speichers (RAM). Die Größe einer Seite entspricht der Größe eines Seitenrahmens.
Unter dem virtuellen Speicher eines Prozesses versteht man den Speicherbereich, der einem Prozess durch das Betriebssystem zur Verfügung gestellt wird. Ein Seitenrahmen ist ein zusammenhängender Block von Speicherzellen des virtuellen Speichers (RAM).
Der physische Speicher bezieht sich auf den Computer, während der virtuelle Speicher auf einen Prozess bezogen wird!
- Unter einer physischen Speicheradresse versteht man eine Adresse innerhalb des physischen Speichers eines Rechners.
- Unter einer virtuellen Speicheradresse versteht man eine Adresse innerhalb des virtuellen Speichers eines Prozesses.
Count Programm (Assembler)
Dieses Programm stellt den Ablauf eine Zyklus dar
1. PC gibt den Wert zum RAM über
2. Befehl mit PC Wert wird ausgeführt und läuft über den Data Bus zum IR
3. Danach wird der Decoder angestoßen die Weiche im MUX zu stellen
4. Im ALU wird der Befehl geladen
5. Im AC wird dann die geladenen Zahl zwischengespeichert
Einführung in die Betriebssysteme
Wir brauchen ein Betriebssystem! Nur Zusammenspiel von Hard- und Software ergibt am Ende ein Hochleistungssystem, welches gleichzeitig flexibel und bedienbar ist. Ein Betriebssystem ist ein Programm, das dem Benutzer und Anwendungsprogrammen elementare Dienste bereitstellt. Das Betriebssystem steuert und überwacht die Abwicklung von Programmen und regelt den Betrieb des Rechnersystems.
Zentrale Aufgabe eines BS
Die zentrale Aufgabe eines Betriebssystems ist die Betriebsmittelverwaltung.
- Verwaltung, Aus- und Einlagern mehrerer Prozesse
- Verwaltung des Hauptspeichers und Versorgung Prozesse mit Teilen des Hauptspeichers
- Auswahl des jeweils nächsten Prozesses für die CPU
- Datei-/Verzeichnisverwaltung auf Datenträgern und Verwaltung Ein-/Ausgabegeräte
Zwischen Benutzer und Hardware
- Der Benutzer bedient ein / mehrere Anwendungsprogramme
- Anwendungsprogramme geben Rückmeldungen an den Anwender oder nutzt Betriebssystem, um mit Hardware zu kommunizieren.
- Betriebssystem empfängt Aufträge von Anwendungsprogrammen.
- AP erhalten Rückmeldungen vom BS über abgelehnten und ausgeführten Aufträge.
- Die Hardware führt Befehle aus, die ihr vom BS in Auftrag gegeben wurden. Das BS erhält Rückmeldungen der Hardware. Auch bei Hardware-Fehlern wird das Betriebssystem informiert.
Wichtige Fachbegriffe
Fachbegriff | Bedeutung |
Anwendungsprogramm | löst ein/mehrere Probleme, die Benutzer stellt (Textverarbeitung / Client / Browser) |
Systemprogramm | Computerprogramm, welches der Verwaltung des Betriebs eines Computers dient |
Betriebssystem |
stellt Dienste; steuert Ablauf von Programmen; regelt den Rechnersystembetrieb. |
Betriebsmittel | Hardware- oder Software-Ressource. |
Hardware-Ressource | einzelne Hardware-Komponente des Rechners (CPU / RAM / Controller) |
Software-Ressource | Prozess oder Datei auf einem beliebigen Datenträger |
Betriebsmittel Prozess | Programmtext, Hauptspeicherdaten (Stack, Heap) und auf CPU (Registerinhalte). |
Betriebsmittel Datei | Programmdatei oder Datendatei |
Entziehbares Betriebsmittel |
Betriebsmittel, das dem Prozess ohne negative Folgen entzogen könnte (z.B: CPU) |
Nicht entziehbares Betriebsmittel |
Betriebsmittel, das Prozess so lange zur Verfügung steht, wie dieser es benötigt. |
exklusiv nutzbaren Betriebsmittel |
zu beliebigen Zeitpunkt nur maximal einem Prozess zugeordnet (z.B: Drucker) |
gemeinsam nutzbar Betriebsmittel |
quasi-gleichzeitig von mehreren Prozessen genutzt werden kann (z.B: Festplatte) |
Betriebsmittel / Betriebssystemarten
Ein Programm kann mehrfach gestartet werden, somit können aus einem Programm so mehrere Prozesse resultieren!
Jeder Prozess besitzt eigene Daten, auf die nur er Zugriff hat und mehrere Prozesse müssen sich auf der CPU abwechseln
Prozesse benötigen während ihrer Abarbeitung verschiedene Betriebsmittel, um alle anfallenden Aufgaben erledigen zu können. Damit sind jedem gestarteten Prozess eine Menge von Betriebsmitteln zugewiesen.
→ Ein Prozess benötigt (mindestens) die Betriebsmittel Festplatte, ausführbare Datei X sowie RAM, um aus der Datei X auf der Festplatte in den Arbeitsspeicher geladen zu werden.
→ Ein Prozess benötigt das Betriebsmittel CPU um befehlsweise abgearbeitet zu werden.
→ Ein Prozess benötigt das Betriebsmittel Grafikkarte um eine Ausgabe auf dem Bildschirm zu erzeugen.
→ sind nicht alle Betriebsmittel während der Laufzeit mit dem Prozess verbunden
→ effizienter, wenn Betriebsmittel nur dann angefordert werden, wenn sie tatsächlich benötigt werden
Betriebsmittel sind Prozessen zugeordnet
Betriebsmittel für Prozess | wird benötigt, um ... |
Festplatte, ausführbare Datei X sowie RAM |
aus der Datei X auf der Festplatte in den Arbeitsspeicher geladen zu werden |
CPU |
befehlsweise abgearbeitet zu werden |
Grafikkarte |
eine Ausgabe auf dem Bildschirm zu erzeugen |
- nicht alle Betriebsmittel sind während der gesamten Laufzeit mit Prozess verbunden
- effizienter, wenn Betriebsmittel nur dann angefordert werden, wenn benötigt und wieder freigegeben werden
Betriebssystemarten
Betriebssysteme für | Beschreibung |
Großrechner (z/OS von IBM) |
|
Server (Unix/Linux) |
|
Laptops/Personal Computer (Windows 10) |
|
Batch-Job zum Multitasking
Batch-Jobs
→ In den Anfangsjahren der Rechnerentwicklung wurden auszuführende Programme als sogenannte Batch-Jobs verarbeitet
→ Jeder Prozess (Batch-Job) wurde nach dem Start komplett bis zu seinem Ende bearbeitet,
→ erst im Anschluß startete der nächste Prozess (Batch-Job) und belegte die CPU ebenfalls bis zu seiner Terminierung.
Multitasking
→ mehrere Prozesse können sich bei ihrer Abarbeitung auf der CPU abwechseln
→ Diese geänderte Vorgehensweise markiert einen gewaltigen Meilenstein in der Informatik
Abarbeitung von Befehlen auf CPU
Kernel-Mode |
|
User-Mode |
|
- Übergang vom Kernel-Mode in User-Mode ist unproblematisch, da hierbei die Rechte eingeschränkt werden
- Das Betriebssystem veranlasst Übergang, wenn es dem Prozess eines Anwendungsprogramms die CPU zuteilt.
- Übergang vom User-Mode in den Kernel-Mode funktioniert nur indirekt über einen Systemaufruf
- denn Prozess eines Anwendungsprogramms darf nicht über die umfassenden Rechte des Kernel-Modes verfügen
Unter einem Systemaufruf versteht man den von einem im User-Mode ablaufenden Prozess getätigten Aufruf einer vom Betriebssystem zur Verfügung gestellten Funktion, welche nur im Kernel-Mode ausgeführt werden kann.
- Durch Systemaufruf gibt der im User-Mode Prozess Kontrolle zurück an BS, welches die Funktion stellvertretend ausführt.
- BS führt Sicherheitsüberprüfungen durch und prüft, ob alle Gegebenheiten für die Ausführung sprechen.
- Ist Funktion ausgeführt, wird zur Beendigung des Systemaufrufs wieder in den User-Mode zurückgeschaltet
- BS gibt Kontrolle zurück an aufrufenden Prozess, der ein Ergebnis seines Systemaufrufs zum Reagieren empfängt
Beispiel: Ein Anwendungsprogramm möchte auf eine Datei zugreifen.
- im User-Mode ablaufender Prozess eines Anwendungsprogramms möchte auf eine Datei zugreifen
- Diese E/A-Handlung ist nur im Kernel-Mode zugelassen.
- Betriebssystem stellt Anwendungsprogramm diese Systemaufrufen zur Verfügung: open | read | write | close
- Wird jetzt ein Systemaufruf getätigt, so entspricht dies der Auslösung eines Interrupts
- der im User-Mode laufende Prozess wird angehalten
- die Interrupt-Service-Routine wird ausgeführt (dadurch wird Betriebssystem-Code ausgeführt
- es wird in den Kernel-Mode geschaltet und Überprüfungen werden durchgeführt
- der Dateizugriff wird entweder erlaubt und durchgeführt oder verweigert,
- es wird in den User-Mode zurückgeschaltet,
- angehaltene Prozess wird wieder gestartet und ihm wird Rückgabewert mit Ergebnis des Systemaufrufs gegeben
Systemaufruf durch Programmierer
import java.io.FileWriter;
import java.io.IOException;
public class Beispiel_Systemaufrufe {
public static void main(String[] args) {
FileWriter fw;
try { // Hier folgen drei Systemaufrufe: Anwenwendung wird angehalten, nach Überprüfung sendet BS Befehle richtung Festplattencontroler
fw = new FileWriter("hallo.txt"); // Datei wird zum Schreiben geöffnet
fw.write("Hallo Systemaufruf!"); // Hallo Systemaufruf! wird in geöffnete Datei geschrieben
fw.close(); //Datei wird wieder geschlossen
} catch (IOException e) { // BS sorgt dafür, dass Fehlermeldung generiert wird
System.out.println("Es ist ein Fehler aufgetreten: \r\n" + e.toString()
);
} // CPU von Kernelmode wieder auf Usermode, Programm läuft weiter
}
}
Der Anwender muss über Systemaufrufe nichts wissen, er nutzt nur Methoden, alles weitere geschieht im Hintergrund.
Prozessverwaltung
Prozesskontext
Prozess ist Programm in Ausführung. Prozesskontext hat Informationen, die Prozess bei Ausführung auf CPU benötigt.
- Zum Kontext eines Prozesses gehören unter anderem:
- Die Werte in den betreffenden Registern der CPU (Program Counter, Instruction Register, Stack Register, Flags, etc.)
- Die Belegung des Caches mit Befehlen und Daten des Prozesses
- Die Belegung des Hauptspeichers mit Programmtext und Daten des Prozesses
Prozess-Kontextwechsel auf CPU sind alle Tätigkeiten, um von auf CPU aktiven Prozess A auf Prozess B zu kommen
- Dafür werden Tätigkeiten vom Steuerwerk der CPU in Zusammenarbeit mit dem Betriebssystem durchgeführt:
- Sichere alle notwendigen Registerinformationen des scheidenden Prozesses A an einer bekannten Stelle (damit sie von dort später wiederhergestellt werden können).
- Lade alle notwendigen Registerinformationen des neuen Prozesses B in die entsprechenden Register auf der CPU.
- Lade alle notwendigen Befehle und Daten des neuen Prozesses B in den Cache.
Es ist leicht verständlich, dass jeder Kontextwechsel eine gewisse Zeit für seine Durchführung beansprucht.
Prozesse erzeugen
Jeder Prozess erhält zur Unterscheidung und Verwaltung direkt bei seiner Erzeugung eine eindeutige Prozess-ID
- Während Laufzeit eines BS werden Prozesse erzeugt, abgearbeitet, unterbrochen, weiter abgearbeitet und beendet
- Bei Start eines Rechners passiert folgendes:
- Wird Rechner eingeschaltet, startet BS, wobei ein Mechanismus den ersten Prozess erzeugt (PID = 0, Leerlaufprozess)
- Ausgehend vom ersten Prozess starten weitere Prozesse, die zum BS gehören für Erfüllung der Aufgabe des BS
- dann startet Anwender Anwendungsprogramme, die jeweils als eigener Prozess vom BS verwaltet werden
- allgemein hängt es vom Betriebssystem ab, wie genau die Erzeugung eines Prozesses erfolgt:
- Unter Unix/Linux gibt es dazu einen Systemaufruf fork und ist sehr einfach
- unter Windows heißt dieser Systemaufruf CreateProcess und ist sehr kompliziert
Fork - Linux
- Systemaufruf fork macht von aufrufenden Prozess (Elternprozess) Kopie (Kindprozess)
- Kindprozess erhält eigene Prozess-ID, übernimmt Informationen des Elternprozesses
- Kindprozess ist nach fork unabhängig vom Elternprozess eigenständige Systeminstanz
- Sowohl Eltern- als auch Kindprozess laufen nach dem "klonen" an gleicher Stelle weiter
- fork liefert Rückgabewert und auf das fork folgende Anweisung wird ausgeführt
- Rückgabewert von fork > 0; fork = 0: Kindprozess; fork < 0: Es ist Fehler aufgetreten.
CreateProcess - Windows
- Der Systemaufruf CreateProcess besteht aus sechs Hauptphasen bei der Prozesserzeugung.
- Anschließend ist der neue Prozess komplett erstellt und wartet auf die Zuteilung der CPU.
1. | beginnt mit dem Öffnen der EXE-Datei. |
2. | erstellt notwendige Verwaltungsobjekte. |
3. | erstellt notwendige Verwaltungsobjekte. |
4. | informiert das Windows-Subsystem über den hier neu erstellten Prozess. |
5. | leitet die Ausführung des neu erstellten Prozesses ein. |
6. | nimmt alle abschließenden Initialisierungen vor. |
Prozesskontrollblock
In Prozesskontrollblock fasst das Betriebssystem alle zu einem einzelnen Prozess gehörenden Informationen zusammen.
- Sobald ein neuer Prozess erzeigt wird, legt das Betriebssystem einen Prozesskontrollblock als Verwaltungsstruktur an.
- Für jeden Prozess existiert somit ein eigener PCB.
Windows |
jeder unter Windows erzeugter Prozess wird durch eine Instanz der Datenstruktur EPROCESS repräsentiert |
Linux |
die Deklaration läuft über die Datenstruktur task_struct |
Prozesstabelle
In der Prozesstabelle fasst das Betriebssystem alle Informationen aller erzeugter Prozesse zusammen. In der Praxis kann die Prozesstabelle ganz einfach als Liste aller Prozesskontrollblöcke realisiert werden.
Prozesszustände
Wird ein Prozess innerhalb eines Betriebssystems erzeugt, so bedeutet dies nicht, dass er auch sofort auf der CPU ausgeführt wird.
- Direkt nach Erzeugung befindet sich Prozess im Zustand Bereit
- wartet auf die Zuteilung der CPU
- Sobald er die CPU bekommt, wechselt er in den Zustand Rechnend.
- CPU kann wieder entzogen werden und Prozess zurück in Bereit
- Prozess wechselt vom Zustand Rechnend in den Zustand Blockiert
- hat Befehl ausgeführt, der auf sich warten lässt (z.B: E/A-Geräte)
- CPU ist für einen anderen Prozess bereit
- Tritt das gewünschte Ereignis ein, meldet sich beispielsweise das E/A-Gerät mit dem Ergebnis
- ISR merkt, dass Festplatt was fertig gestellt hat für blockierten Prozess
- Prozess wechselt durch ISR vom Zustand Blockiert in den Zustand Bereit. Hier wartet er wieder auf die Zuteilung der CPU.
Prozessverwaltung
→ Eine der Aufgaben eines Betriebssystems ist ja die Verwaltung der erzeugten Prozesse
→ Dabei kommen Prozesskontrollblock und Prozesstabelle zum Einsatz.
Prozessverwaltung aus Admin-Sicht unter Windows
→ Auch viele Informationen aus dem Prozesskontrollblock eines Prozesses werden hier zur Laufzeit des Prozesses sichtbar.
Prozessverwaltung aus Admin-Sicht unter Linux
→ auf Kommandozeile gibt es Programme, womit Administrator Aufschluss über die aktuell gestarteten Prozesse bekommt.
→ ps | pstree | top | htop
Threads
Thread oder Leichtgewichtigen Prozess ist Teil eines Prozesses, der einen unabhängigen Kontrollfluss repräsentiert.
- Ein Prozess kann aus mehreren Threads bestehen, somit mehrere voneinander unabhängige, nebenläufige Kontrollflüsse
- Ein Textverarbeitungsprogramm wird gestartet. Somit existiert auf dem Computersystem ein Textverarbeitungs-Prozess.
- Dieser Prozess startet intern mehrere Threads, die jeweils bestimmte Aufgaben übernehmen:
- Thread 1: realisiert den Texteditor. Er reagiert also auf Eingaben des Users mit Tastatur oder Maus.
- Thread 2: realisiert eine "Alle 10 Minuten automatisch im Hintergrund speichern"-Funktion.
- Thread 3: realisiert die automatische Rechtschreibprüfung in kleinen zeitlichen Abständen
- Dieser Prozess startet intern mehrere Threads, die jeweils bestimmte Aufgaben übernehmen:
- Das Thread-Konzept wird von Betriebssystemen unterstützt und können deshalb auf Kernel-Ebene realisiert sein
- Unterstützt Betriebssystem keine Threads, so kann auf der User-Ebene ein spezielles Programm Bereitstellung übernehmen
- Wird die Java-Laufzeitumgebung auf einem Betriebssystem installiert, laufen Threads auf beiden Ebenen
- Bei Systemen ohne jegliche Thread-Unterstützung ist ein Prozess praktisch gleichzusetzen mit einem Thread.
Wenn ein Prozess nur einen Thread besitzt, ist dieser betrachtete Prozess praktisch gleichzusetzen mit seinem Thread.
Bei Thread-Kontextwechsel auf der CPU wird aktiver Thread A durch einen anderen Thread B ersetzt.
Vorteile | Nachteil |
|
|
Scheduling
Beim Scheduling geht es um die Zuteilung des Betriebsmittels CPU zu den einzelnen Prozessen.
Unter Scheduling versteht man die Tätigkeit des Aufteilens der verfügbaren Prozessorzeit auf alle Prozesse.
Unter Scheduler versteht man den Teil des Betriebssystems, welcher die Scheduling-Tätigkeit durchführt. Er ist zuständig zu entscheiden, welcher Prozess als nächstes die CPU bekommt. Umsetzung dieser Entscheidung obliegt dem Dispatcher.
Dispatcher entzieht bei Kontextwechsel dem aktiven Prozess die CPU, um sie dem nächsten Prozess zuzuteilen.
Scheduling-Verfahren
First Come First Serve (FCFS)
arbeitet Prozesse in Reihenfolge ihres Starts ab. Zuerst erzeugter Prozess darf auch als erstes in den Zustand Rechnend wechseln. Während Rechenzeit kann Prozess durch Interrupt unterbrochen werden. Direkt nach Interrupt setzt er Arbeit auf der CPU fort.
Shortest Job First (kurz: SJF): Von allen Prozessen auf System bekommt derjenige als erstes die CPU mit der kürzesten Laufzeit
Shortest Remaining Time Next (kurz: SRTN)
ist eine Abwandlung des SJF-Verfahrens. Hierbei bekommt immer derjenige Prozess die CPU, welcher die kürzeste Restlaufzeit besitzt. Wenn Prozess A(5) aus Blocked hinaus kommt, kommt er vor Prozess B(8) wieder in Running, wenn Prozess C(6) von Running in Blocked wechselt.
Round Robin (RR)
teilt die zur Verfügung stehende CPU-Zeit in kleine Zeitscheiben. Prozesse werden in eine initiale Reihenfolge gebracht und der erste Prozess bekommt die CPU, er darf diese genau bis zum Ablauf seines Zeit-Quantums nutzen, danach in der Reihenfolge.
Priority Scheduling (kurz: PS)
Jedem Prozess wird eine Priorität zugewiesen. Der Prozess mit der höchsten Priorität bekommt als erstes die CPU.
Synchronisation
Bei der Synchronisation geht es um Mechanismen zur Vermeidung von Problemen, die bei der nebenläufigen Ausführung von Prozessen oder Threads in Verbindung mit gemeinsam genutzten Betriebsmitteln entstehen können.
Nebenläufigkeit ist quasi-parallele Ausführung von Befehlen mehrerer Prozesse oder Threads mit Kontextwechsel auf CPU.
Beim Race Conditions nutzen zwei oder mehr Prozesse ein oder mehrere Betriebsmittel gemeinsam, wobei das Ergebnis der Ausführung von der zeitlichen Reihenfolge der Zugriffe der Prozesse oder Threads auf das Betriebsmittel abhängt.
kritischer Abschnitt sind Programmteile, die während Ausführung auf der CPU nicht durch kritische Abschnitte anderer Prozesse oder Threads unterbrochen werden dürfen, sofern Prozesse auf gemeinsam genutzte Betriebsmittel zugreifen.
Aktives Warten - Prozesse und Threads synchronisieren
Unter aktivem Warten versteht man ständige Abfragen eines Sperrkennzeichens am Eingang eines kritischen Abschnitts.
- dafür wird das Polling genutzt, um ständig Abfragen durchzuführen
- um einen Prozess oder einen Thread zu sperren wird das genannte Sperrkennzeichen, was sich als Sperrzeichen äußert
public class Beispiel_Aktives_Warten {
static int counter = 0; // gemeinsam genutztes Betriebsmittel
static int lock = 0; // Sperrvariable
public static class Thread_A extends Thread {
public void run() {
do_something(); // unkritisch
count_from_10(); // kritisch !!!
do_something_else(); // unkritisch
}
private void do_something() {
// unkritischer Abschnitt
System.out.println("Thread_A: unkritisch");
}
private void count_from_10() {
// Vorsicht: kritischer Abschnitt!
while (lock == 1); // wenn lock auf 1 ist, dann ist das Thread in der While-Schleife gefangen
lock = 1; // wenn lock 0 war wird er hier auf 1 gesetzt und die Methode durchlaufen
counter = 10;
counter++;
counter++;
System.out.println("A-Counter: " + counter);
lock = 0; //die methode ist durchlaufen, auch wenn zwischen durch ein anderer
} //Thread dran war, ab hier kann ein anderer Thread durchlaufen werden
private void do_something_else() {
// unkritischer Abschnitt
System.out.println("Thread_A: wieder unkritisch");
}
}
public static class Thread_B extends Thread {
public void run() {
System.out.println("Thread_B ist gestartet.");
while (lock == 1); // Semikolon beachten!
lock = 1;
counter = 20;
counter++;
counter++;
System.out.println("B-Counter: " + counter);
lock = 0;
}
}
public static void main(String[] args) {
Thread a = new Thread_A();
Thread b = new Thread_B();
a.start();
b.start();
}
}
- Kontextwechsel im ungünstigsten Moment kann dazu führen, dass zwei oder mehr Prozesse oder Threads sich gleichzeitig in ihrem kritischen Abschnitt befinden.
- es gibt Mechanismus, welcher eine Sperrvariable innerhalb einer atomaren Aktion abfragen und setzen kann
- eine solche Aktion ist atomar, ausgeführt werden müssen und (logisch) nicht unterbrochen werden dürfen
- Eine Möglichkeit bietet dafür der TSL-Assemblerbefehl:
- CPU sorgt bei der Ausführung des TSL-Befehls dafür, dass zwei Dinge innerhalb einer Aktion (atomar!) passieren, weder ein Kontextwechsel, noch ein Interrupt können den TSL-Befehl unterbrechen
- Kopiere den aktuellen Wert der lock-Variablen aus Speicherzelle 25 in das Register R1
- Schreibe in Speicherzelle 25 den Wert 1, setze also lock = 1.
- EQUAL-Befehl vergleicht Wert aus Register 1 mit der Zahl 0.
- Abhängig vom Ergebnis muss Prozess entweder in Schleife warten oder darf kritischen Bereich ausführen.
- CPU sorgt bei der Ausführung des TSL-Befehls dafür, dass zwei Dinge innerhalb einer Aktion (atomar!) passieren, weder ein Kontextwechsel, noch ein Interrupt können den TSL-Befehl unterbrechen
10: TSL 25 ; Hier passieren zwei Dinge als atomare Aktion:
; --> Wert aus Speicherzelle 25 in Akkumulator kopieren
; --> Zahl 1 in Speicherzelle 25 schreiben (setze lock=1)
11: EQUAL #0 ; Prüfe: Ist ACC == 0? (Eigentlich: ist lock == 0?)
12: JUMP 10 ; Prüfung ergab FALSE
13: ... ; Prüfung ergab TRUE
Semaphore
- Vorteil: es wird aufs Aktive Warten verzichtet und somit wird weniger CPU-Zeit verschwendet, indem der wartende Prozess durch einen Kontextwechsel in den Zustand Blockiert gebracht wird
Datenstruktur, welche ganzzahligen Zähler, Warteschlange bereitstellt und zwei atomare Operationen P() und V() definiert.
- der ganzzahliger Zähler (int) kann keine negativen Werte annehmen.
- Warteschlange ist Datenstruktur, die nach dem FIFO-Prinzip arbeitet und als zur geordneten Aufnahme von Prozessen dient.
- Die Operation P() wird in einigen Quellen auch als down()-Operation betitelt
- Hat die Zählervariable einen positiven Wert (>0), dann verringere den Wert der Zählvariablen um 1.
- Wenn Zählvariable den Wert 0 hat, dann blockier aufrufenden Prozess und fügt ihn an das Ende ihrer Warteschlange
- analog up() anstatt V().
- wenn die Warteschlange nicht leer ist, dann entblockiere den ersten Prozess der Warteschlange.
- ist die Warteschlange leer, dann erhöhe den Wert der Zählervariable um 1.
-
Mit "entblockieren" wird der erste Prozess aus der Warteschlange in den Zustand "Bereit" geändert.
ein binären Semaphor ist ein Semaphor, dessen ganzzahliger Zähler nur die Werte 0 oder 1 annehmen kann.
- Mutex ist ein binären Semaphor, der mit einem wechselseitigen Ausschluss arbeitet und das aktive Warten ersetzt
- Wenn ein Thread in kritischen Abschnitt befindet, darf andere Thread nicht in seinen kritischen Abschnitt eintreten
- Reihenfolgedurchsetzung ist dabei sehr wichtig: Erst wenn erste Prozess Zugriff erledigt hat, darf der zweite
- Zählsemaphor ist ein Semaphor, der den Zugriff auf eine begrenzte Anzahl eines Betriebsmittels regelt.
- Der Zugriff auf das Betriebsmittel stellt deshalb einen kritischen Abschnitt dar und muss geschützt werden.
- Erzeuger- / Verbraucherproblem: Erzeuger erzeugt etwas, was Verbraucher verbraucht. Natürlich kann Verbraucher erst etwas verbrauchen, wenn zuvor Erzeuger etwas erzeugt hat. Erzeuger kann nur soviel erzeugen, bis alle Lagerplätze für Erzeugnis belegt sind. Dann muss Verbraucher wieder verbrauchen, bis Erzeuger wieder etwas erzeugen kann.
Ein Semaphor hat keinen ungünstigen Moment, weil die P() Methode atomar ist!
Deadlocks
Eine Menge von Prozessen befindet sich in einem Deadlock-Zustand, wenn jeder Prozess aus der Menge auf ein Ereignis wartet, das nur ein anderer Prozess aus der Menge auslösen kann.
Wenn sich mehrere Prozesse in Deadlock-Zustand befinden, so sagt man auch vereinfachend: Es ist ein Deadlock aufgetreten.
Vier Bedinnungen damit ein Deaklock auftritt:
- Mutual exclusion condition: Eine Ressource steht einem Prozess nur exklusiv zur Verfügung
- Wait for condition: Prozesse warten und behalten dabei Kontrolle über bereits Ressourcen
- No preemption condition: Ressourcen können Prozess nicht entrissen werden.
- Circular wait condition: Es gibt eine zyklische Kette von Prozessen
- P1: Schnappt sich K1 Kontextwechsel
- P2: Schnappt sich K2 Kontextwechsel
- P3: Möchte K1 haben ist aber belegt: blockiert; Kontextwechsel
- P1: Möchte K2 haben ist aber belegt: blockiert; Kontextwechsel
- P2: schnappt sich K3: Fetch, Decode, Execute
Deadlocks ignorieren
"Es gibt keine Deadlocks, weil ich daran glaube, dass es keine Deadlocks gibt!", sagt das Betriebssystem.
Zum Ignorieren von Deadlocks kommt in Betriebssystemen üblicherweise der Vogel-Strauß-Algorithmus zum Einsatz.
Deadlocks vermeiden
Ein Betriebssystem könnte von vorneherein so konstruiert werden, dass Deadlocks gar nicht möglich sind.
Verhinderung von Deadlocks
Prozess nur dann weitere Ressource zuzusprechen, wenn sichergestellt ist, dass in der Zukunft kein Deadlock entstehen kann
Allgemein ist davon auszugehen, dass die Erkennung, Vermeidung oder Verhinderung von Deadlocks sehr aufwendig ist. Eine ausnahmlose Abdeckung aller denkbarer Fälle scheint nahezu unmöglich.
Interprozesskommunikation
Bei der Interprozesskommunikation geht es um den Austausch von Informationen zwischen zwei (oder mehr) Prozessen bzw. Threads. Damit alle Beteiligten die ausgetauschten Informationen in gleicher Weise verstehen können, sind bestimmte Regeln der Kommunikation einzuhalten, das sogenannte Protokoll.
Zwei Threads kommunizieren über gemeinsame Variablen
→ Synchronisation Threads beim Zugriff auf gemeinsamen Datenbereiche wird erforderlich, da es zu kritischen Abläufen kommt
Zwei Prozesse kommunizieren über gemeinsame Speicherobjekte (Datein)
→ Prozess A erzeugt während Laufzeit Daten und speichert diese in einer Datei ab.
→ zweiter Prozess B liest Datei zu einem späteren Zeitpunkt ein und kann so die enthaltenen Informationen weiterverarbeiten.
→ sorgt Betriebssystem nur für eine Synchronisation beim gleichzeitigen Zugriff der beiden Prozesse auf die (z.B. über Semaphore).
→ Falls Prozess B Dateiinhalt ausliest, bevor Prozess A die Informationen hineingeschrieben hat, so ist nicht zu erwarten, dass Prozess B das erwartete Ergebnis berechnen kann
Zwei Prozesse kommunizieren über Shared Memory
→ Man spricht von Shared Memory, wenn Teil des Hauptspeichers gemeinsam mehreren Prozessen zur Verfügung gestellt wird
Zwei Prozesse kommunizieren über Pipes
→ Einweg-Kommunikationskanäle, die Prozess ermöglichen, Daten über das BS als Datenstrom an anderen Prozess zu übertragen
Zwei Prozesse kommunizieren über Sockets
→ Sockets sind eine vom Betriebssystem bereitgestellte Kommunikationsmöglichkeit über TCP
Speicherverwaltung
Die Speicherverwaltung oder Hauptspeicherverwaltung ist ein Teil des Betriebssystems und erledigt alle erforderlichen Arbeiten zur Verwaltung des physikalischen und des virtuellen Speichers eines Computers.
Virtuelle Speicherverwaltung
- Ein Prozess sollte auch dann noch ablaufen können, wenn er nur teilweise im Hauptspeicher ist.
- Wichtig ist, dass die Teile des Prozesses (Daten und Code) im physikalischen Speicher sind, die gerade benötigt werden.
- Der Speicherbedarf eines Prozesses sollte größer als der physikalisch vorhandene Hauptspeicher sein können.
Ein Seitenrahmen versteht man einen zusammenhängenden Block von Speicherzellen des physikalischen Speichers.
Eine Seite ist ein Block von Speicherzellen des virtuellen Speichers. Blockgröße einer Seite ist Größe eines Seitenrahmens.
- alle Seiten eines Systems haben stets die gleiche Größe
die Aufgabe der MMU besteht in der Umrechnung von virtuellen in physikalische Adressen
Seitentabellen
- werden benötigt, damit MMU die Umrechnung einer virtuellen Adresse in eine physikalische Adresse vornehmen kann
- Für jeden vom Betriebssystem zu verwaltenden virtuellen Adressraum gibt es jeweils eine zugehörige Seitentabelle
- Jeder Prozess besitzt seine eigene Seitentabelle!
- MMU prüft in der Seitentabelle des aktuellen Prozesses den Eintrag an entsprechenden Stelle aus der virtuellen Adresse.
- Ist
P/A-Bit = false (0)
, kommt es zu Page-Fault (Seitenfehler)- Liegt daran, dass noch keine physische Seite eingelagert wurde
- Die Seite muss vom DMA-Controller in den RAM-Speicher geladen werden
- Ist der RAM bereits voll, kommen Seitenersetzungsverfahren ins Spiel.
- Ist das dann
P/A-Bit = true (1)
, kann die Rahmennummer aus der Tabellenzeile entnommen werden. - MMU guckt sich sich bei 0000 das present absent bit an, weil es eine 1 ist, kann es umgerechnet werden
- wird im RAM bei 001 abgespeichert
- wenn die fetch Phase beendet ist, wird der PC um 1 hochgesetzt und auf 0000001 gesetzt
- so viel wie in Seitenrahmen reinpasst muss der DMA-Controlller kopieren
- bei Pagefault wird der Prozess auf blocket gesetzt, da er so nicht weiterarbeiten kann
- wenn alle Daten im Ram sind wird ein Interrrupt eingestellt und es geht auf Ready
- Prozess kann mit den Daten im Ram arbeiten und wenn Sceduler den Prozess wieder nimmt geht es wieder in Running
KONTEXTWECHSEL
- Wert des PC wird überschrieben mit Wert vom virtuellen Speicher B
- In Seitentabelle wird gesehen das absent 0 ist ->Seitenfehler -> muss in Ram eingelagert werden (egal welche Stelle)
- Present wird zu Absend
- in 111 wird der Wert des PC gespeichert
DLL Datein sorgen dafür, dass weniger Speicher gebraucht wird
Swapping und Paging
Unter Swapping versteht man das Aus- bzw. Einlagern eines kompletten Prozesses.
Swapping kommt nur bei Betriebssystemen zum Einsatz, die keine virtuelle Speicherverwaltung unterstützen!
eine Alternative zur virtuellen Speicherverwaltung mit Hilfe der MMU, ist das Paging, welches flexibler als Swapping agiert.
Unter Paging versteht man das Ein- bzw. Auslagern von Teilen eines Prozesses.
- Eine Seite enthält einen bestimmten Teil eines Prozesses.
- Die Gesamtheit aller Seiten eines Prozesses repräsentiert somit den kompletten Prozess.
- Eine (virtuelle) Seite kann einerseits in einem (physikalischen) Seitenrahmen eingelagert sein.
- befindet sich die Seite im RAM und der zugehörige Prozess kann auf die Befehle Daten innerhalb der Seite zugreifen.
- Zum Einsatz kommt hier die Adressumrechnung mit Hilfe von MMU und Seitentabelle.
- Andererseits kann eine (virtuelle) Seite auf einen Hintergrundspeicher (wie beispielsweise die Festplatte) ausgelagert sein.
- so steht die Seite nicht im RAM zur Verfügung, Zugriff des Prozesses auf Befehle schlägt fehl ->Page fault
- ausgelagerte Seite muss vom Hintergrundspeicher in Seitenrahmen eingelagert werden.
- Anschließend kann die Adressumrechnung mit Hilfe von MMU und Seitentabelle.
Page Fault
Page fault tritt auf, falls die MMU bei der Umrechnung einer virtuellen in eine physische Adresse feststellt, dass die benötigte (virtuelle) Seite nicht in einem (physischen) Seitenrahmen eingelagert ist.
Seitenersetzung
Tritt Seitenfehler auf, lagert BS virtuelle Seite aus Hintergrundspeicher in freien Seitenrahmen des physikalischen Speichers
- Entscheidend ist bei der Einlagerung, ob es einen freien Seitenrahmen gibt
- Falls ja: dieser für die Einlagerung der benötigten Seite genutzt werden
- Falls nein: Seitenersetzung entscheidet, welche momentan eingelagerte virtuelle Seite in HS verschoben wird
Was bei der Seitenersetzung passiert
- Die MMU stellt fest, dass virtuelle Seite B nicht in Seitenrahmen eingelagert ist und löst einen Seitenfehler aus.
- Es wird festgestellt, dass kein freier Seitenrahmen verfügbar ist, das Seitenersetzungsverfahren wird deshalb gestartet.
- Die zu ersetzende Seite E wird bestimmt, sie ist derzeit in Seitenrahmen X eingelagert.
- Die zu ersetzende Seite E wird in den Hintergrundspeicher geschrieben,. damit ist ihr Inhalt gesichert
- Die benötigte Seite B wird eingelagert, ihr Inhalt wird in den Seitenrahmen X geschrieben
Schreiben der zu ersetzenden Seite E in den Hintergrundspeicher kostet viel Zeit! Das ist schlecht für das Gesamtsystem.
→ sinnvoll, eine zu ersetzende Seite nur dann in den Hintergrundspeicher zu kopieren, wenn dies auch tatsächlich notwendig ist.
Das Modifiziert-Bit
→ BS kann mit dem M-Bit feststellen, ob die Inhalte einer eingelagerten Seite modifiziert und zum auslagern bereit sind
- Das M-Bit ist gesetzt, also 1:
Der Inhalt der zugehörigen Seite wurde modifiziert.
- Das M-Bit ist nicht gesetzt, also 0:
Der Inhalt der zugehörigen Seite wurde nicht modifiziert.
Seitenersetzungsverfahren → Paging
Die optimale Seitenersetzung kann nicht programmiert werden.
No Recently Used→ Welche Seite wurde in der Vergangenheit am längsten nicht genutzt?
Für jede einzelne Seite wird mit Hilfe eines einzelnen Bits festgehalten, ob die betreffende Seite referenziert wurde.
- Das R-Bit ist gesetzt, also 1:
Inhalt der Seite wurde referenziert, es wird verwendet. - Das R-Bit ist nicht gesetzt, also 0:
Inhalt der Seite wurde nicht referenziert, es wird nicht verwendet.
First-In-First-Out
→ Die Seiten, die zuerst im RAM gespeichert wurden, werden als erstes überschrieben.
In der Praxis hat dieses Verfahren keine Bedeutung, da die ausgelagerte Seite oft benötigt wird → hohen Zahl an Seitenfehlern
Working Set
bei vielen nacheinander auf der CPU ausgeführten Befehlen werden nur wenig verschiedene virtuelle Seiten angesprochen
→ versucht, alle zum Working Set eines Prozesses gehörenden Seiten ständig im Hauptspeicher zu halten
Second Chance
er prüft, ob diese Seite in der letzten Zeit auch angesprochen wurde.
- Falls nein: sie wird ersetzt
- Falls ja: wird mit der am zweitlängsten eingelagerten Seite fortgefahren.
- Auch hier wird zunächst geprüft, ob Seite in der letzten Zeit angesprochen wurde.
- Usw.
Shared Memory
Mehrere Prozesse sollen die Möglichkeit haben, dass bestimmte Speicherbereiche gemeinsam genutzt werden können.
Dies ist eigentlich nicht erwünscht! Grund ist: RAM kann man nie genug haben
Beispiel:
Was passiert nun, wenn das gleiche Programm mehrmals gestartet wird? Dann resultieren daraus auch mehrere Prozesse.
Wenn für jeden Prozess der gleiche Programmtext in unterschiedliche Bereiche des Hauptspeichers eingelagert: Redundanz
gemeinsam genutzte Speicher entspricht einem bestimmten Seitenrahmen des physikalischen Speichers (z.B: DLL-Dateien)
Dieser eine Seitenrahmen kann nun sehr einfach in alle virtuellen Adressräume der beteiligten Prozesse eingebunden werden
-> Nötig ist dazu allein ein entsprechender Eintrag in allen betreffenden Seitentabellen.
Bedenke: Jeder Prozess besitzt seinen eigenen virtuellen Speicher und damit auch seine eigene Seitentabelle!
Geräteverwaltung
Unter der Geräteverwaltung fasst man alle Aufgaben und Tätigkeiten des Betriebssystems zusammen, welche einer optimierten Zusammenarbeit zwischen dem Betriebssystem und den Peripheriegeräten dienen.
Rolle der Geräteverwaltung
Wenn Prozesse mit Peripheriegeräten kommunizieren, tätigen sie Systemaufruf
→ dadurch wird Betriebssystem mit der gewünschten Kommunikation beauftragt .
Geräteverwaltung ist Bestandteil des Betriebssystems
→ realisiert eine Schnittstelle zwischen den Peripheriegeräten und Betriebssystem
- muss mit unterschiedlichsten Hardware-Geräten kommunizieren können
- Die Geräteverwaltung besitzt sowohl geräteabhängige, als auch geräteunabhängige Teile.
- geräteabhängigen Teile sind die sogenannten Gerätetreiber.
- geräteunabhängigen Teile werden durch unterschiedlicher Geräteklassen realisiert
Gerätetreiber
Gerätetreiber ist eine Softwarekomponente, welche Interaktionen zwischen BS und Controller des Peripheriegeräts steuert.
die Geräteverwaltung enthält verschiedene Treiber mit gleichem Ablauf:
1. Initialisierung des Geräte-Controllers
2. Gerät dem Betriebssystem bekannt machen
3. Bereitstellen einer Schnittstelle zum Geräte-Controller
4. Interruptbehandlung für ein Gerät
5. Bereitstellen einer Schnittstelle zur Geräteverwaltung
Initialisierung des Geräte-Controllers
Treiber initialisiert den Controller seines zugehörigen Geräts beim Systemstart
→ Damit stehen gültige Werte in Registern des Controllers
→ das Gerät selbst wird über seinen Controller bereit für die Entgegennahme von Befehlen
Gerät dem Betriebssystem bekannt machen
Ein Treiber macht der Geräteverwaltung des Betriebssystems das Gerät bekannt, damit kann das Gerät vom BS genutzt werden
Bereitstellen einer Schnittstelle zum Geräte-Controller
Treiber bildet Schnittstelle zwischen Geräteverwaltung und Controller des Geräts
→ Treiber muss wissen, welche Befehle der Controller zur Verfügung stellt
→ wie diese anzusprechen und in welcher Weise die Rückgabewerte zu interpretieren sind.
Interruptbehandlung für ein Gerät
Gerätetreiber ist zuständig für die Behandlung von Interrupts, die durch das zugehörige Gerät ausgelöst werden.
Die Interruptbehandlungsroutine ist Teil des Gerätetreibers!
Der Treiber ist Teil der Geräteverwaltung, welche wiederum ein Teil des BS ist
Außer Festplatten gibt es noch viel weitere Geräte, die von der Geräteverwaltung des Betriebssystems unterstützt werden müssen, und für die ein Treiber eingebunden ist.
Lange nicht alle Geräte unterstützen den Einsatz eines DMA-Controllers!
→ die Interruptverarbeitung im Treiber kann unterschiedlich ablaufen: mit DMA oder kein DMA
→ das Interruptkonzept eine einfache Reaktionsmöglichkeit des Treibers auf die ungefragt eintreffenden Daten
Bereitstellen einer Schnittstelle zur Geräteverwaltung
Treiber muss auch mit der Geräteverwaltung des Betriebssystems kommunizieren
→ Er ist Mittel zwischen beiden Welten mit Geräteklassen, mit jeweils eigenen Schnittstelle.
→ Treiber muss von Geräteverwaltung für Geräteklasse gedachte Funktionen implementieren
Geräteklassen
Im Zuge seiner geräteunabhängigen Teile der Implementierung definiert die Geräteverwaltung des Betriebssystems unterschiedliche Geräteklassen. Zu den wichtigsten beiden Klassen gehören die blockorientierten Geräte, sowie die zeichenorientierten Geräte.
Blockorientierte Geräte
übertragen Daten jeweils in kompletten Blöcken, beim Lesen und Schreiben von diesem Gerät (zb. Festplatte)
→ Typische Blockgrößen liegen zwischen 512 und 32 768 Byte.
→ Jeder Datenblock ist direkt adressierbar.
→ BEISPIEL: Lade Datenblock Nr. 723 von Festplatte | Ändere fünfte Byte wie | Schreibe Datenblock Nr. 723 zurück auf Festplatte.
→ Es können also immer nur komplette Datenblöcke gelesen oder geschrieben werden.
Zeichenorientierte Geräte
erzeugen/empfangen Datenstrom. Zeichenfolge zum Gerät oder vom Gerät übertragen. Zeichen sind nicht adressierbar.
Beispiele für zeichenorientierte Geräte sind: Maus, Tastatur, Netzwerkkarte, ...
Schnittstelle für zeichenorientierte / blockorientierte Geräte
→ Geräteverwaltung definiert Standardschnittstelle, welche Treiber zeichenorientierten/blockorientierte Geräte unterstützen
→ Darin vorgesehen sind beispielsweise Funktionen für: die Initialisierung des Geräts, das Lesen eines Zeichenstroms vom Gerät...
→ Diese Funktionen werden vom Gerätetreiber implementiert.
Zusammenarbeit von Treiber und Geräteverwaltung
→ ist ein zeichenorientiertes Gerät am System angeschlossen, so wird sein Treiber in den Hauptspeicher geladen
→ Der Treiber implementiert Funktionen (initDevice(), readBlock(), writeBlock(), handleInterrupt().
Durch das Laden des Treibers in den Hauptspeicher steht ab diesem Moment fest, ab welcher Adresse im Hauptspeicher der ausführbare Code der genannten Funktionen beginnt. Dies gilt für jeden geladenen Treiber, also für jedes unterstützte Gerät.
Dateiverwaltung
Datei
Eine Datei ist ein Bestand an zusammengehörigen digitalen Daten, die dauerhaft auf Speichermedium gespeichert sind.
→ Durch die Einschränkung auf digitale Daten entsteht eine Abgrenzung zu jeglicher Art von nicht-digitalen Daten
CRUD-Operationen
→ auf den Speichermedien müssen Dateien angelegt, gelesen, verändert und gelöscht werden können
→ CRUD-Operationen: Create, Read, Update, Delete
Organisation von Daten auf Speichermedien und die Bereitstellung der CRUD-Operationen geschieht mit Hilfe eines Dateisystems.
Dateisystem
Ein Dateisystem ist der Teil eines BS, der geordnete Ablage und Wiederfinden von Dateien auf Speichermedien ermöglicht
- die erforderlichen Zugriffsmöglichkeiten werden für die verwalteten Dateien bereitstellt
- Zugriffsmöglichkeiten auf einzelne Dateien werden mit den CRUD-Operationen angesproche
- Ein Dateisystem stellt darüber hinaus noch Operationen zur Verfügung:
- Verwalten von Verzeichnissen, Speicherplatz und von Datei- oder Verzeichnisattributen
- Kopieren von Dateien oder Verzeichnissen
- Verschieben von Dateien oder Verzeichnissen
Laufe der Jahrzehnte wurden bemerkenswert viele verschiedene Dateisysteme entwickelt
Dateisystemkonzepte
Von Windows unterstützte Dateisysteme: CDFS - UDF - FAT12 - FAT16 - FAT32 - exFAT - NTFS
→ Eine Unterstützung weiterer Dateisysteme ist nur durch die Installation zusätzlicher Treiber möglich.
Ein Datenträger (Disk) ist ein physisches Speichermedium, welches in der Lage ist, digitale Daten dauerhaft zu speichern.
→ Festplatte - CD - DVD - USB-Stick
Unter einem Sektor versteht man einen Hardware-adressierbaren Block auf einer Disk.
→ Festplatte ist aufgeteilt in eine herstellungsbedingte Anzahl an Sektoren mit einer Größe von 512 Byte
→ Multipliziert mit der Anzahl der Sektoren ergibt sich so die Gesamt-Speicherkapazität einer Festplatte.
Unter einer Partition versteht man eine Folge von zusammenhängenden Sektoren, kann identisch mit Volume sein.
Ein Volume ist ein dem Nutzer des Betriebssystems bereitgestellten Speicherbereich für Dateien und Verzeichnisse (C: / D:).
Ein Volume kann aus mehreren Partitionen bestehen
→ Zwei Festplatten mit gleichgroßen Partition können unter Windows zu gespiegelten Volume zusammengefasst werden (RAID)
Ein Cluster ist einen adressierbaren Block in einem Dateisystem, der Zusammenfassung von Sektoren einer Disk darstellt.
→ Ein Cluster besteht aus einem oder mehreren Sektoren
→ Seine Größe ist stets ein ganzzahliges Vielfaches der Sektorgröße
→ Da Cluster vom Dateisystem verwaltet werden, liegen alle Sektoren eines Clusters stets auf demselben Volume.
Unter einer Datei versteht man eine Zusammenfassung von Clustern, eine Datei ist auf genau einem Volume gespeichert
Windows unterstützte Dateisysteme
FAT - File Allocation Table
Eine Tabelle, über die einerseits eine Zuordnung von Clustern zu Dateien verwaltet wird, andererseits gibt die FAT Aufschluss über freie und belegte Cluster eines Dateisystems.
freie Cluster: 4, 7, 10, 13, 14, 18, 19, 28 und 30.
→ Sobald eine Datei auf dem durch diese FAT verwaltete Dateisystem gespeichert werden soll, wird die Datei - entsprechend ihrer Größe - auf freien Cluster verteilt
Datei zusammensetzen
Beim Zugriff auf eine Datei, welche auf einem Dateisystem gespeichert ist, das durch die FAT verwaltet wird, muss das Betriebssystem die zu dieser Datei gehörigen Cluster ermitteln:
- Datei computer.txt beginnt in Cluster 6. (Information kommt aus Verzeichniseintrag)
- Das Betriebssystem sucht in der FAT die Zeile 6
- Hier gibt es einen Verweis auf Cluster-Nr. 9
- Zeile 9 verweist auf Cluster-Nr. 24.
- Zeile 24 verweist auf Cluster-Nr. 2.
- Zeile 2 verweist auf Cluster-Nr. 8.
- Zeile 8 verweist auf "nil", was bedeutet, dass kein weiterer Cluster folgt.
→ Somit kann der Inhalt der Datei computer.txt durch die Inhalte der folgenden Cluster zusammengesetzt werden: 6, 9, 24, 2, 8
Beim Zusammensetzen des Dateiinhalts ist Clustereihenfolge zu beachten.
NTFS - New Technology File System
→ Das Tool ntfsinfo.exe liefert eine Reihe von Informationen zu den verwendeten Größen für Volume, Sektor, Cluster, etc.
→ Im Master File Table (kurz MFT) speichert NTFS-Dateisystem Informationen zu Dateien / Verzeichnissen eines mit NTFS formatierten Volumes.
Beispiel:
→ ein Sektor (0,1,2,3,...) ist 512 Byte groß → ein Cluster ist 2048 Byte groß
→ es soll eine Datei (3000 Byte) abgespeichert werden
→ BS: das Dateisystem benötigt 2 Cluster!
Als Partition werden die zusammenhängenden, aufeinanderfolgenden Datenblöcke eines Teils eines Volumes bezeichnet.
Die Umrechnung zwischen Clustur und Sektor passiert über den Treiber
Wenn ich die Nummer des Clusters habe, kann ich die Nummer des zugehörigen Sektors berechnen