Betriebssysteme

Ein Betriebssystem verwaltet das Zusammenspiel der Hardware- und Software-Komponenten eines Computers

Computerarchitektur

Die Computerarchitektur ist ein Teilgebiet der Informatik, welche sich mit dem internen sowie externen Aufbau eines Computersystems beschäftigt

Computerarchitektur

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 bestehtimage-1660629507311.pngaus einer CPU mit Steuerwerk und Rechenwerk, einem Ein- / Ausgabewerk, einem Speicherwerk und  Bus-System. Das Bus-System verbindet die Komponenten miteinander.


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.

Computerarchitektur

Komponenten eines VNR

 

image-1664348929119.png

image-1664295900353.png

 

Computerarchitektur

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 RegisterProgram Counter, kurz: PC.
  • Damit der vom Speicherwerk empfangene Befehl verwaltet werden kann, muss es einen Speicherbereich dafür geben.
    → Verwendet wird dazu ein RegisterBefehlsregister, 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.#


RechenwerkCpu5.jpg

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.

 

Computerarchitektur

Speicherwerk

Speicherwerk.jpg

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.

Computerarchitektur

Ein- / Ausgabewerk

Eawerk.jpgDas 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.

 

Computerarchitektur

Vom Quellcode zum Prozessor

  1. 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 werden

    void main (void){
       int x = 2;
       int y = 5;
       int z = x + y;
    }

     

     

    zu

     

    00000000110000100000000100001101000000001100010100000001000011100000000010001101000000011000111000000001000011110000001110000000

  2. 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 
    001

    010

    011

    100

    101

    110

    111

    NOOP

    LOAD

    STORE
    ADD

    SUB

    EQUAL 

    JUMP
    HALT

    No 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.

Computerarchitektur

Ablauf der Steuerung

image-1660631018907.png


CPU - Steuerwerkimage-1661775572730.png


CPU - Rechenwerk

image-1660630451859.pngDas 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)


Ein- / Ausgabewerk

image-1660630922369.png

 

Transaktion von Informationen über verschiedene Peripheriegeräte (Maus, Tastatur, Monitor, ...). Für jedes Gerät gibt es einen Controller.

Computerarchitektur

Register auf der CPU - Stackregister

Stackregister

image-1660636899189.png

Computerarchitektur

Basisregister und Limitregister

image-1660639003026.png

Mehrere Prozesse gleichzeitig im Speicher

  1. Starte den Rechner.
  2. 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.
  3. Treffe für jedes Programm die nötigen Vorarbeiten für seine spätere Ausführung.
  4. Starte in Speicherzelle 0 mit der Ausführung des ersten Befehls des ersten Prozesses.
  5. Führe entsprechend des Ablaufs alle weiteren Befehle dieses ersten Prozesses aus.
  6. Wenn Ausführung des ersten Prozesses beendet (HALT-Befehl), wird CPU auf zweiten Prozess vorbereitet.
  7. 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.

Computerarchitektur

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:

  1. Der Programmzähler des unterbrochenen Prozesses wird an einer bekannten Stelle gesichert.
  2. Alle Befehle des unterbrochenen Prozesses, die vor dem Befehl ausgeführt werden müssen, auf den der Programmzähler zeigt, sind vollständig abgearbeitet.
  3. Kein Befehl des unterbrochenen Prozesses, der nach dem Befehl ausgeführt werden muss, auf den der Programmzähler zeigt, ist bereits abgearbeitet.
  4. 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:

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. 

image-1660635422406.png

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

image-1660298066107.png


Kontextwechsel versus Interrupt 

image-1660655844439.png

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


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?

→ Wir brauchen ein Betriebssystem!

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.


image-1664641686924.png

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 


Datentransfer und Interrupts

Computerarchitektur

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.


Allgemeiner Ablauf

image-1660641644972.png

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 

Computerarchitektur

MMU - Memory Management Unit


Wie es bisher ohne MMU 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!

Computerarchitektur

Count Programm (Assembler)

image-1660133448775.png

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.

Einführung in die Betriebssysteme

Zentrale Aufgabe eines BS

Die zentrale Aufgabe eines Betriebssystems ist die Betriebsmittelverwaltung.

Einführung in die Betriebssysteme

Zwischen Benutzer und Hardware

 

image-1660719857485.png

Einführung in die Betriebssysteme

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)

Einführung in die Betriebssysteme

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 Festplatteausfü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

Betriebssystemarten

Betriebssysteme für  Beschreibung
Großrechner (z/OS von IBM)
  • verarbeitet schnell viele Anfragen mit hoher E/A-Rate und Speicherkapazität
  • im Stapelbetrieb (Batch-Jobs) oder sind transaktionsorientiert
Server (Unix/Linux)
  • werden über Netzwerk von verschiedenen Clients angesprochen
  • Anwender an den Clients erwarten schnelle Reaktionszeit
  • Einsatzzwecke liegen beispielsweise bei: File-Server / Print-Server 
Laptops/Personal Computer (Windows 10)
  • Anwender tätigt eine Eingabe und Betriebssystem reagiert darauf.
Einführung in die Betriebssysteme

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

Einführung in die Betriebssysteme

Abarbeitung von Befehlen auf CPU

 

Kernel-Mode

  • Arbeitet CPU Kernel-Mode, ist jeder Befehl zur Ausführung zugelassen
  • kann auf Speicherbereiche für Daten- und Programmtext und auf Betriebsmittel zugreifen
  • Durch ein Steuer- oder Kontrollregister auf der CPU wird der Kernel-Mode angezeigt.
  • Betriebssystem arbeitet im Kernel-Mode 

User-Mode

  • Arbeitet CPU im User-Mode, ist nur eingeschränkter Befehlssatz zugelassen
  • nicht alle Befehle erlaubt, kann nicht auf alle Speicherbereiche und Betriebsmittel zugreifen
  • Durch ein Steuer- oder Kontrollregister auf der CPU wird der User-Mode angezeigt.
  • Anwendungsprogramme arbeiten im User-Mode

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.


Beispiel: Ein Anwendungsprogramm möchte auf eine Datei zugreifen.
Einführung in die Betriebssysteme

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

Prozessverwaltung

Prozesskontext

Prozess ist Programm in Ausführung. Prozesskontext hat Informationen, die Prozess bei Ausführung auf CPU benötigt.


Prozess-Kontextwechsel auf CPU sind alle Tätigkeiten, um von auf CPU aktiven Prozess A auf Prozess B zu kommen

Es ist leicht verständlich, dass jeder Kontextwechsel eine gewisse Zeit für seine Durchführung beansprucht.

Prozessverwaltung

Prozesse erzeugen

Jeder Prozess erhält zur Unterscheidung und Verwaltung direkt bei seiner Erzeugung eine eindeutige Prozess-ID


Fork - Linux

image-1661150458823.png


CreateProcess - Windows
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.
Prozessverwaltung

Prozesskontrollblock

In Prozesskontrollblock fasst das Betriebssystem alle zu einem einzelnen Prozess gehörenden Informationen zusammen.

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

Prozessverwaltung

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.

image-1661155896048.png

Prozessverwaltung

Prozesszustände

Wird ein Prozess innerhalb eines Betriebssystems erzeugt, so bedeutet dies nicht, dass er auch sofort auf der CPU ausgeführt wird.

image-1661156084172.png

Prozessverwaltung

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 Windowsimage-1664738505389.png
→ 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

Prozessverwaltung

Threads

Thread oder Leichtgewichtigen Prozess ist Teil eines Prozesses, der einen unabhängigen Kontrollfluss repräsentiert.

BEISPIEL

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
  • Thread-Kontextwechsel leichter als Prozess-Kontextwechsel.
  • Threads eines Prozesses haben Zugriff auf alle Betriebsmittel, welche Prozess zugeordnet sind. 
  • Der Anwendungsprogrammierer kann die Funktionalität der Gesamtanwendung in unterschiedliche Threads aufteilen, welche jeder für sich einfacher zu implementieren ist. 
  • Threads eines Prozesses haben Zugriff auf Betriebsmittel, welche Prozess zugeordnet sind. 
  • Anwendungsprogrammierer müssen über Kenntnisse bei der Programmierung von Threads verfügen.
Prozessverwaltung

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.

Kontextwechsel.jpg

Ziele: Möglichst viele Prozesse werden in  kurzer Zeit abgearbeitet.
Effizienz: zur Verfügung stehenden Ressourcen werden  ausgelastet.
Fairness: Die Ressourcen werden den Prozessen gerecht zugeteilt, das heißt, kein Prozess wird dauerhaft vernachlässigt.

Scheduling-Verfahren

image-1661765719508.png

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 

image-1661771489243.png

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.

Prozessverwaltung

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.

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();
}
 
}

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
Prozessverwaltung

Semaphore

Datenstruktur, welche ganzzahligen Zähler, Warteschlange bereitstellt und zwei atomare Operationen P() und V() definiert.


ein binären Semaphor ist ein Semaphor, dessen ganzzahliger Zähler nur die Werte 0 oder 1 annehmen kann.

  1. 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
  2. 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!

Prozessverwaltung

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. image-1662922977765.png

Vier Bedinnungen damit ein Deaklock auftritt:

  1. Mutual exclusion condition: Eine Ressource steht einem Prozess nur exklusiv zur Verfügung
  2. Wait for condition: Prozesse warten und behalten dabei Kontrolle über bereits Ressourcen 
  3. No preemption condition: Ressourcen können Prozess nicht entrissen werden.
  4. Circular wait condition: Es gibt eine zyklische Kette von Prozessen

image-1662923775801.pngPrinzip des ersten Kontos

 


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.

Prozessverwaltung

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.

Speicherverwaltung

Virtuelle Speicherverwaltung

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.

die Aufgabe der MMU besteht in der Umrechnung von virtuellen in physikalische Adressen


Seitentabellen

image-1662467933083.png

  1. MMU prüft in der Seitentabelle des aktuellen Prozesses den Eintrag an entsprechenden Stelle aus der virtuellen Adresse.
  2. 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.
  3. Ist das dann P/A-Bit = true (1), kann die Rahmennummer aus der Tabellenzeile entnommen werden. 
  4. MMU guckt sich sich bei 0000 das present absent bit an, weil es eine 1 ist, kann es umgerechnet werden 
  5. wird im RAM bei 001 abgespeichert
  6. wenn die fetch Phase beendet ist, wird der PC um 1 hochgesetzt und auf 0000001 gesetzt 

KONTEXTWECHSEL

  1. Wert des PC wird überschrieben mit Wert vom virtuellen Speicher B
  2. In Seitentabelle wird gesehen das absent 0 ist ->Seitenfehler -> muss in Ram eingelagert werden (egal welche Stelle)
  3. Present wird zu Absend

DLL Datein sorgen dafür, dass weniger Speicher gebraucht wird

 

Speicherverwaltung

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.

Beim Paging werden virtuelle Seiten in (physikalische) Seitenrahmen eingelagert, oder andersrum

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 


Was bei der Seitenersetzung passiert
  1. Die MMU stellt fest, dass virtuelle Seite B nicht in Seitenrahmen eingelagert ist und löst einen Seitenfehler aus.
  2. Es wird festgestellt, dass kein freier Seitenrahmen verfügbar ist, das Seitenersetzungsverfahren wird deshalb gestartet.
  3. Die zu ersetzende Seite E wird bestimmt, sie ist derzeit in Seitenrahmen X eingelagert.
  4. Die zu ersetzende Seite E wird in den Hintergrundspeicher geschrieben,. damit ist ihr Inhalt gesichert
  5. 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 

image-1663053416157.png

  • 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.

Seitentabelle-RM.JPG


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

image-1662456507649.pnger prüft, ob diese Seite in der letzten Zeit auch angesprochen wurde.

Speicherverwaltung

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.

Geräteverwaltung

Rolle der Geräteverwaltung

Geraeteverwaltung-1.jpgWenn 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

Geräteverwaltung

Gerätetreiber

Gerätetreiber ist eine Softwarekomponente, welche Interaktionen zwischen BS und Controller des Peripheriegeräts steuert.

Geraeteverwaltung-2.jpg

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

Controller-ready.jpg

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

image-1663060051178.png

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.

Kontextwechsel und ISR.jpg

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

image-1663060051178.pngTreiber 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äteverwaltung

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

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.

Dateiverwaltung

Dateisystem

Ein Dateisystem ist der Teil eines BS, der geordnete Ablage und Wiederfinden von Dateien auf Speichermedien ermöglicht

Laufe der Jahrzehnte wurden bemerkenswert viele verschiedene Dateisysteme entwickelt

Dateiverwaltung

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

Dateiverwaltung

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.

Fat.jpg

Freie Cluster

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:

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.

image-1663664471058.png

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