Betriebssysteme PDF
Document Details
Uploaded by UserReplaceableIntegral3682
HTL Mödling
Tags
Summary
This document provides an overview of operating systems, including their various types, functions, and historical development. It explores key concepts like operating system tasks and architectures.
Full Transcript
**Betriebsysteme** **[Welche Betriebssysteme gibt es?]** - Windows - *Windows Home* - *Windows PRO* - *Windows Server* - Linux - *Suicide Linux* - *Ubuntu* - *Red Hat* - *Kali Linux* - *Mind Linux* - *Rasberry* - *Orange PI...
**Betriebsysteme** **[Welche Betriebssysteme gibt es?]** - Windows - *Windows Home* - *Windows PRO* - *Windows Server* - Linux - *Suicide Linux* - *Ubuntu* - *Red Hat* - *Kali Linux* - *Mind Linux* - *Rasberry* - *Orange PI* - *SuSe* - IOS - Android - Chrome OS - UNIX - MacOS - HuaweiOSggg - Xiaomi **[Warum gibt es viele verschiedene BS?]** - Leistung - Einfache Benutzung - Technischer Fortschritt Historie - Anforderungen / Features **[Aufgaben eines Betriebsystemes:]** - Booten des Systems - Userinterface - [Verwalten von Programmen] (*Treiber als Dienststelle zw. HW und SW*) - \[*Browsen, Exploren, Dienste anbieten (Filesysteme, Netzwerkdaten,...)*\] - HW - *Bildschirm* *Grafikkarte (GPU)* - *Drucker* - *Peripheriegraphik (Maus, Tastatur,...)* - *Prozessor* - *Festplatten (SSD, USB-Stick,...)* - *Speicher (RAM, ROM,...)* - *SOC* - *Netzwerk (WLAN, LAN)* - SW - *Dateisystem* **[Geschichte von Betriebsysteme]** - Hängt sehr stark von der Entwicklung von Rechnerarchitekturen ab. - [1945 bis 1955:] Röhrenrechner -- kein Betriebsystem nötig. - [1954 bis ca. 1965:] Transistorrechner -- Lochkartensysteme mit sogenannten Programmloadern -- Aufgabe war Stapelverarbeitung (*Programme nacheinander auszuführen*) =\> ***[Vorläufer der ersten BS]*** - [1954:] MIT's Operating System für den UNIVAC 1103 [1955:] General Motors OS für den IBM 701 [1964:] OS/360 v. IBM -- ein BS f. gesamte System/360 Modellreihe -- damals Novum - [1965 bis 1980:] Großrechner -- BS wie Unix (*[sozusagender Vorgänger:] Multix*) inkl. Multitasking -- mit heutigen „selbstverständlichen" Techniken wie baumartiges Dateisystem - [Ab 1980:] Heim-PC -- MS DOS (*Microsoft Disk Operating System*) -- kein Multitasking oder Multiuser nötig. - [Ab 1992:] Windows 3.1 u. neuere Versionen (*GUI = Graphical User Interface*) - [Ab 1995 bis heute:] Windows 95, 98, NT, Millenium, 2000, XP, 7, 8, 10, 11 - [Parallel:] 1991 Entwicklung u. Veröffentlichung v. Linux durch Linux Torvalds -- Open Source (*GNU GPL*) =\> ***[unzählige Distrib]***. **[Einige Zahlen zum Technischen Fortschritt]** *[Festplattenkosten pro Gigabyte (in US-Dollar)]* ***Jahr*** ***US Dollar*** ------------ ----------------- 1990 53 000\$ 1995 850\$ 2000 20\$ 2005 1\$ 2010 0.10\$ 2015 0.04\$ *[RAM -- Kosten pro Gigabyte (in US-Dollar)]* ***Jahr*** ***US Dollar*** ------------ ----------------- 1990 120 000\$ 1995 33 000\$ 2000 1 400\$ 2005 190\$ 2010 20\$ 2015 10\$ **[Von Neumann Architektur]** - Beschreibt den Aufbau eines Computers (*„Universalrechner"*) - Konzept ist in den 1940ern entstanden und gilt heute noch immer für (*fast*) alle Computer - John von Neumann war ein ungarischer Mathematiker (1903 -- 1957) und gilt als Begründer der modernen Rechnerarchitektur - „Universalrechner" muss folgendes enthalten: - **Steuerwerk** (*Steuert die drei folgenden*) - **Rechenwerk** (*Ausführung arithmetischer u. logischer Operatoren*) - **Speicherwerk** (*Speichern v. Programmen u. Daten*) - **Ein/Ausgabewert** (*Eingabe/Ausgabe u. Auslesen v. Daten*) - **Verbindungssystem** (Bus) - **Siehe Abb. 1** **[Bustypen]** - [Adress-Bus (A-Bus)] - unidirektional - zur Auswahl von Speicherzellen, Bausteinen, E/A-Registern - [Daten-Bus (D-Bus)] - bidirektional - 8-64 Leitungen - zum Datentransport zwischen Bausteinen - [Steuer-Bus (Control-Bus, S-Bus)] - unterschiedliche Übertragungsrichtungen, jede Leitung für sich - unidirektional - [typisch]: 4-20 Leitungen - zur Steuerung der Zusammenarbeit der einzelnen Baugruppen **[Bus]** - mehrer parallele Leitungen (*„Busbreite" = Anzahl der Leitungen*) - mehrere Funktionseinheiten angeschlossen - [Informationsaustausch zeitmultiplex]: Zu jedem Zeitpunkt sind immer nur zwei Einheiten (*Sender, Empfänger*) miteinander verbunden. - unindirektionsal oder bidirektioal **[Interne und Externe Busse]** - Unterschiedliche Busse hierachisch miteinander verknüpft - CPU internes Bussystem verbindet CPU-Komponenten - Systembus verbindet CPU, Hauptspeicher und E/A Komponenenten - weitere Busse zum Anschluss jeweils mehrere Bus-kompatibler Geräte, z.B. USB (*Universal Serial Bus*), PCI (*Peripheral Component Interconnect*) **[Von Neumann Architektur]** - Kodierte Daten u. Programme müssen direkt am Rechner und extern gespeichert werden. - Teile eines Programms können übersprungen werden und sind selbstständig änderbar - Programme und Daten müssen gemeinsam (*im selben Speicher*) abgelegt werden. Der Speicher muss also (*flexibel*) „unterteilt" werden -- Speicheradressen *[Sequenzielle Ablage/Bearbeitund des Speichers, aber auch Sprungbefehle (Schleife, Bedingung) -- Bekannt aus POS]* - Sequentielle Bearbeitung ***Siehe Abb. 2*** - Sprungbefehl ***Siehe Abb.2*** ***[Befehlsbearbeitung in der Übersicht:] Abb. 3*** - Beginnt damit, dass ein Befehl geholt wird - Der Befehl wird decodiert und danach ausgeführt. - Dann wird interpretiert, ob es ein Sprungbefehl (*[Wenn JA, dann Programmcounter auf Sprungadresse gesetzt, wenn NEIN, dann wird der Programmcounter erhöht]*) - Am Ende wird das Ganze wieder wiederhohlt ***Alle Programme und Daten müssen in binärkodierter Form vorliegen.*** ***Steuer- u. Rechenwerk wurde bei akt. Rechnern in die CPU zusammengelegt.*** **[Was macht ein Betriebsystem?]** - [Verwaltung der Peripheriegeräte] (*Der Benutzer muss sich nicht um Gerätetechnik od. Koordination konkurrierender Zugriffe kümmern.*) - [Abstrakter Rechner] (*BS ist Plattform- bzw. Hardwareunabhängig -- Notebook, PC, Server*) - [Sammlung von Dienstprogrammen] (*Beinhaltet die benötigten Dienstprogramme -- Sortieren, Drucken, Grafikausgabe,...*) - [Sammlung von Kommunikationsmechanismen] (*Kommunikationsprotokolle wie TCP/IP sind im BS integriert*) **[Grundbegriffe]** - ***[Prozess (Task):]*** Ausgeführtes Programm - ***[Ein Prozessor:]*** HW das Prozesse ausführen kann - *[Multitasking:]* Timeslices an nebenläufige Aktivitäten durch Scheduler - *[Mehrbenutzerbetrieb (Timesharingbetrieb):]* Mehrere Nutzer „gleichzeitig" - ***[Multiprozessorsystem:]*** Mehrere Prozessoren, Aktivitäten können „echt" parallel ausgeführt werden. - ***[Echtzeitsystem (Real time system):]*** (Kontrolle u. Steuerung Rechnerext. Abläufe -- z.B.: Kraftwerk -- gatantierte Antwortzeiten) - ***[Viruelle Maschine:]*** Betriebsystem, das auf einem Rechner andere Rechner emulieren kann. - ***[Verteilte BS:]*** einheitliche Verwaltung mehrere Hardware -- Ressourcen. Verteilte Rechner als einen nutzen **[Aufbau eines BS -- Architekturmodelle]** - **Monolithische Architektur:** Klassisch -- nur ein Betriebsystem-Programm -- Anwender kann Funktionen wie aus einer Standardbibliothek aufrufen. - ***[Bsp:]*** Programm -- ruft Bildschirmausgabe auf -- BS-Funktion: **SCV** (*Super Visor Call*) oder auch **Trap** das BS wird aufgerufen. *[Systemaufruf:]* Hardware Trap unterbricht die Anwednungsausführung -- an BS übergeben -- Kernel Modus -- CPU im privilegierten Modus -- Ausführung -- zurück zu Usermodus (*nicht privilegiert*) - **Mikrokern Architektur:** Moderner Ansatz -- Systemdienste werden auf mehrere Programme verteilt. **[Vor- u. Nachteile v. Architekturmodelle] *Abb. 4*** Moduliarisierung des BS in Richtung Mikrokern mit seperaten Serverprozessen macht es klarer, flexibler u. von Komplexität her besser beherrschbar. Effizienz ist noch ein Nachteil, da bei Cllient Server Modell zus. Aufwand zählt. - *Auftrag muss zum Systemdienstserver übertragen werden.* - *CPU-Kontrolle muss zum Serverdienstserver übertragen werden.* - *Resultat muss zum Anwendungsdienst zurückgeschickt werden.* - *CPU-Kontrolle muss an den Anwendungsdienst übertragen werden.* **[Schichtmodell] *Abb.5*** Innerhalb monolitoscher BS existieren oft mehrere, aufeinander aufbauende Schichten. Unten heißt hardwarespezifisch, oben heißt anwendungsorientiert u. hardwareunabhängig. **[Hardware-Abstraktionsschicht HAL]** - **Plattformspezifische Funktionen:** Diese Funktionen isolieren die Eigenschaften einer Rechenplattform bzw. Rechnertyps. - **Hardwaretreiber:** Ist ein Softwaremodul zur Steuerung einer bestimmten Hardware. **[C -- Programm]** - Benutzt wird die Ansi-C-Bibliotheksfunktion printf **BS unabhängig** - Benutzt (Bsp. Unix) die Schnittstellenfunktion write **BS spezifisch** - Write ruft Fkt. des Dateisystems auf. Überträgt Daten in Cashebereich **[Prozesse -- Definition]** **[Prozesse und Threads -- Programmspeicher ]** *[Programmspezifische Hauptspeicherbereiche:]* - ***Code** -- Maschienenbefehle (Aus Programmquelltext erzeugt)* - ***Statische Daten** -- statisch reservierte Speicherbereiche für Variablen u. Konsonanten* - ***Laufzeitstack** -- dynamisch verwalteter Speicher in dem die für Unterprogrammaktivierung notwendiger* - ***„Programmkontext" bzw „Enviroment":** (enthält Argumente u. Umgebungsvariablen)* - ***Stack u. Heap:** Werden vom BS typischerweise im Sleben Speicherbereich untergebracht.* **[Bestandteile des Prozessdeskriptors]** - **Eindeutige Prozessidentifikation** - **Zustand** *(new, ready, running, blocked, exit)* - **Zugriffdeskriptor** - **Dateideskriptor** - **Programmdeskriptor** - **Maschinenzustand** - **Prioritäten** - **Ressourcenverbrauch** **[Prozesszustand] (*siehe Abb. 6 und Abb. 7*)** - Ein Prozess blockiert sich selbst, indem er einen blockierenden Systemaufruf durchführt (*z.B. Lesen von der Tastatur*) -- kann er nur im Zustand ausführend tun. - Es macht keinen Sinn, einen blockierenden Prozess die CPU zu überlassen ausführend Verdrängung bereit CPU-Zuteilung ausführend ausführend wartet auf Ereignis blockiert Ereignis tritt ein bereit CPU-Zusteilung ausführend ***(siehe Abb. 6)*** *Die meisten BS können Prozesse bei Speichermangel aus dem Hauptspeicher auslagern -- weitere Zustand.* *Auslagerungskandidaten sind blockierte Prozesse. Es sind nicht unbedingt sinnvolle blockierte Prozesse wieder einzulagern.* ausführend Verdrängung bereit CPU-Zuteilung ausführend ausführend wartet auf Ereignis blockiert Ereignis tritt ein bereit CPU-Zusteilung ausführend ausführend wartet auf Ereignis blockiert auslagern blockiert ausgelagert Ereignis tritt ein bereit ausgelagert einlagern bereit CPU-Zuteilung ausführend **(*siehe Abb. 7)*** **[Wartezustände]** **(*siehe Abb. 8)*** *Oft unterscheiden BS verschiedene blockierte Prozess nach der Art des zu erwartenden Ereignisses* *ermöglicht bei Ereigniseintritt eine effizientere Suche nach den aufzuweckenden Prozessen* **[Unterbrechungen]** Von Hard- oder Software ausgelöste Ereignisse führen zu Unterbrechungen der normalen Prozessausführung. Das BS übernimmt also die Prozesskontroll. Im BS reagiert eine für die Ereignisklasse spezifische Ereignisbehandlungsfunktion auf das Ereignis bevor die reguläre Programmausführung fortgesetzt werden kann. **[Synchronen und Asynchrone]** Ein Ereignis sind **synchron**, wenn es durch eine bestimmte Operation des ausgeführte Programms unmittelbar ausgelöst wird. Ein Ereignis ist **asynchron**, wenn der Zeitpunkt keinen Bezug zu den vom ausführenden Programm gerade bearbeiteten Befehlen hat. Aus Sicht des Prozesses sind asynchrone Ereignisse unvorhersehbar. **[Ereignissklassen]** - Hardware Unterbrechungen asynchron - Hardwarefehler asynchron - Systemaufrufe synchron - Programmfehler synchron - Seitemfehler eher asynchron - Software-Interrupts synchron **[Ereignisbehandlung und Zustandsübergänge]** Bei allen Ereignisklassen wird die CPU-Kontrolle an das BS übergeben. **[Operationen für Prozesse] [(]*siehe Abb.9)*** - [Prozesse erzeugen ] - [Prozesse beenden] - [Priorität ändern == Zustand ändern] ***siehe Abb.9*** **[Threads -- Nebenläufigkeit in Programmen]** Es ist oft sinnvoll innerhalb einer Programms parallel ausführbare Bearbeitungsschritte zu spezifizieren. Manchmal ergeben sich Effizienzvorteile, oder die Zerlegung kann softwaretechnisch geboten sein ***[Bsp1:]*** Server kommuniziert über Netzwerk gleichzeitig mit mehreren Clients. ***[Bsp2:]*** Ausnutzung der Prozessoren eines Multiprozessorsystems durch eine rechenintensive Anwendung. **Ein Thread ist eine sequentielle abzuarbeitende Befehlsfolge eines Programm.** **Programmierung erfolgt durch:** - *entsprechende Konzepte einer Programmiersprache* - *Verwendung einer Threadbibliothek* *[Das herkömliche Prozesskonzept ist für die nebenläufige Bearbeitung verschiedener Programme entwickelt worden. Prozesse haben sperate Ressourcen. Durch strickte Zugriffkontrollen sind sie gegeneinander abgeschottet.]* **Das Prozesskonzept ist sozusagen ein schwerwiegendes Konzept.** **[User Threads]** **[Kernel Threads]** **[Leichtgewichtige Prozesse]** *[Trennung von:]* - Programmbezogenener Informationen - Thread-spezifischer Daten *In einem solchen BS ist ein Prozess kein aktives Objekt mehr, sondern eune eher statische Umgebung, die den Rahmen für die Ausführung der in ihr laufenden Threads bildet.* **[Synchronisation nebenläufiger Prozesse]** **Nichtdeterminismus (*= es gibt kein Endziel*) durch Nebenläufigkeit** ***\[Determinismus (= es geht auf ein Endziel hinaus).\]*** Sobald nebenläufige Prozesse oder Threads *[kooperieren]* oder *[konkurrieren]*, benötigt man eine Synchronisationsmechanismus (Hauptspeicher, Variablen, Dateien, Geräte) **[Bounded Buffer od. Produzent-Konsument Problem]** Beschränkter Puffer für Nachrichten -- dass Threads Daten austasuchen können. Datenproduzent schriebt Daten in den Puffer, ein Konsument holt sie wieder heraus. - ***Abb. 10*** ***Produzent u. Konsument müssen sich synchronisieren.*** - *Unzulänglich -- Produzent u. Konsument greifen auf gemeinsame Daten zu u. modifizieren diese. Die Zugriffe **lies** u. **neu** sind keine atomaren Operationen, sonern unterbrechbare Befehlsfolgen.* **[Kritische Abschnitte und gegenseitiger Ausschluss]** - Ein **[kritischer Abschnitt]** ist ein Bereich des Programmquelltexts, in dem nebenläufig auf gemeinsame Daten zugegriffen wird. - **[Gegenseitiger Ausschluss]** (*= Mutual Exclusion*) heiß, dass sich immer nur ein „konkurrierender" Zugreifer im kritischen Abschnitt befindet. - **[Grobkörnig:]** verbietet jegliche gemeinsame Mailboxzugriffe - **[Feinkörnig:]** Man erlaubt die gleichzeitige Manipulation der Mailbox und schützt nur die Manipulation der Variablen Anzahl als kritischen Bereit. **[Enter\_region:]** (*Eintritt in kritischen Abschnitt*) Wenn sich ein anderer Prozess/Thread im kritischen Abschnitt befindet, wird dieser blockier. **[Leave\_region:]** (*Verlassen des kritischen Abschnitts*) - **Petterson-Algorithmus garantiert gegenseitigen Ausschluss** **[Gegenseitiger Ausschluss: Weitere Möglichkeiten]** - [Abschalten von Unterbrechungen:] kritischen Bereich HW-Interrupts deaktivieren - [Aktives Warten auf Maschinenebene:] gibt's meist eine eigene Funktion - [Spinlock:] Für Anwender mit Peterson-Algorithmus implementierbar. **Blockieren von Prozessen, Warteschlangen:** Verwendung BS-Ebene - **Semaphor** = Up und Down Zähler - **Mutex** = kann nur bis 1 zählen - **Ereignisvariablen** = Warteschlange - **Nachrichtenübertragung** = Prozesse können direkt miteinander Kommunizieren \[Asynchron (*[Sender sendet durcheghen, Nachricht wird am Zwischenspeicher des Empfängers abgelegt]*) und Synchrone (*[Sender und Empfänger gleichzeitig beteiligt]*) Nachrichtenübertragung\] [Es wird jew. eine Wartschlange benötigt.] - Ein Prozess, der die Blockieroperation aufruft, kommt in eine Warteschlange. **[Peterson Algorythmus ]** - Man, setzt ein Flag der auf eine blockierte Stelle, um dem Programm zu verhindern dorthin zu kommen. - Atomar - Steuern, dass ein Prozess in einen kritischen Abschnitt eintreten kann, dieser Prozess ist dann für die anderen Prozesse gesperrt, bis er ihn wieder frei gibt. **[Verklemmung (=Deadlock)]** Das Problem der dinierenden Philosophen. Fünf Philosophen sitzen an einem runden Tisch und brauchen zum essen 2 Stäbchen, es sind aber nur 5 da, da jeder beim ersten mal greifen das Stäbchen links von ihnen nehmen, gibt es und wird es nie 2 Stäbchen für einen Philosophen geben. *Verklemmungen treten bei konkurrierenden Zugriffen auf.* [System mit einer bestimmten Menge an Ressourcen. Konkurrierende Prozesse/Threads nutzen unter gegenseitigem Ausschluss einen Teil dieser Ressourcen. ] - Reservierte Ressource, wartet gegebenenfalls, bis sie frei wird - Nutzt diese Ressource - Gibt die Ressource wieder frei Eine Menge von Prozessen/Threads heißt verklemmt, wenn jeder in der Menge auf eine Ressource wartet, die von einem anderen in der Menge reserviert ist. Verklemmungen treten auf, wenn alle folgenden Bedürfnisse erfüllt sind - [Exclusivnutztung:] Wenn es reserviert ist, gibt er sie nicht mehr her, bis er fertig ist - [Reserviert und warten:] Ressourcen werden erst nach Nutzung freigegeben - [Keine Wegnahme:] Ressourcen können nicht weggenommen werden - [Gegenseitiges warten:] Prozesse warten, bis Ressourcen frei werden. **[Ressourcenzuordnungsgraph ]** Ist ein Graph mit zwei Knotentypen - Prozessknoten - Ressourcenknoten Ist dieser Zyklisch, liegt eine Verklemmungssituation vor. **[Verklemmungsverfahren ]** Vogel-Strauß-Algorithmus(„Ostrich"-Algorythmus) Meisten BS enthalten keine Verklemmungsverfahren. **[Vermeiden der Verklemmunsvoraussetzung ]** Definierte Verklemmungsvoraussetztungen, sollen niemals alle erfühlt sein. **[Exclusivzugriff ]** Prozess sollte Ressourcen, die er nicht exklusiv braucht, sicher nicht sperren. Es gibt aber viele Ressourcen, die er braucht. Mit der Notwendigkeit für gegenseitigen Ausschluss. **[Reservieren und warten ]** Kein Ressourcenbesitzer darf auf eine weitere Ressource warten Ein Prozess/Thread darf nur Ressourcen anfordern, wenn er keine hat. Ein Prozess/Thread muss alle Ressourcen auf einmal anfordern (alles oder nichts). **[Nachteile:]** - schlechte Ressourcen-Nutzung (Reserviert, wenn noch nicht benötigt). - Möglichkeit des Verhungerns (ewig warten auf Ressourcen), denn es ist möglich, dass Ress, unnötig lange reserviert bleiben. **[Bsp. Alles oder nichts für Philosophenproblem]** Ein Philosoph nimmt in eine atomare Operation beide Essstäbchen, Wenn nicht beide frei sind, wartet er. Es wird mit einem Mutex für gegenseitigen Ausschluss gesorgt. Statt aktivem Warten (Prozess fragt dauernd nach, ob Ress. frei ist), wäre passives Warten sicher besser, da es mitunter lange dauern kann, bis Philosoph fertig gegessen hat. Also brauchen wir pro Esstäbchen eine Ereignisvariable. **[Verklemmungsgefahr umgehen]** *[Keine Wegnahme von Ressourcen ]* Natürlich könnte man einne Prozess, der eine von einem anderen Prozess benötigte Ressource wegnehmen. der Zustand des Prozesses muss in dem Fall gespeichert werden u. er muss blockiert und erst wieder aufgeweckt wergen, wenn Ress., die er hatte + seine angeforderten Ress. frei sind. Bespiele während Wegnahme des Prozessors (Verdrängung) oder Wegnahme vom Hauptspeicher (Auslagern). **Verhinderung gegenseitiges Warten** Eine Strategie ordnet die Ressourcen linear z.B durch eindeutige Ressourcennummern. Jeder Prozess darf pro Ress. nur in aufsteigender Anornung reservieren. Ressourcengraph für Philosophenproblem: ***Abb. 11*** Philosoph 4 wartet zuerst auf Stäbchen 0. Dadurch kann Philosoph 3 Stäbchen 4 reservieren. **[Hauptspeicherverwaltung]** **Grundlagen** Ein Prozess muss während der Ausführung im Hauptspeicher stehen. (Zumindest teilweise). Bei einem Multitaskingsystem müssen mehrere Prozesse gleichzeitig im HS sein. BS muss Speicher aufteilen. **Speicherhierachien** Im allgemeinem Fallll werden in einem Rechner unterschiedliche Speichertechnologien eingesetzt. CPU integrierter Cache -- sehr schnell, externer Cacher -- schnell HS -- mittels, Festplatte -- langsam. Je schneller, desto teurer u. knapper. Hauptspeicher war bislang eine teure u. knappe Ressource. darum werden Festplatten traditionell als Erweiterungsspeicher eingesetzts. Auf einer Festplattenereich, dem Swap-Bereich werden Prozesse bei akutem Platzmangel ausgelagert. **Alle Daten im Hauptspeicher müssen gebunden sein.** **[Phasen der Prgrammbearbeitung]** Ein Quelltextmodul wird vom Compiler zunächste in ein Objektmodul übersetzt. Den im Quelltext benutzten Variablen werden dabei Speicheradressen zugeordnet. Objektmodule werden vom Binder (Linker) zu einerm ausführbaren Programm zusammengesetzts. Programm wird als Datei gespeichert. ***Abb. 12*** Im beispiel wurden zwei Quelltexte getrennt übersetzt. Der Compiler erzeugt jeweils ein Objektmuódul undem Daten und mAchinencoode in zwei seperaten Segamenten untergebracht sind. Die Adressen beginnen bei jedem Modul/Segment relativ bei 0. Bei Programmaufruf wird aus der Programmdatei der programmspeicher des Prozesses initialisiert *Ladezeit* Nach dem Laden des Programms, kann die Ausfuhrung beginnen: Der Programmzähler des Prozessors wird mit der Adresse der ersten Instruktion des Programms initialisiert, die Kontrolle damit an das Programm übergeben. *Ausführungszeit.* **[Die Adresszuordnung oder Adressbindung kann zu unterschiedlichen Zeitpunkten erfolgen.]** - ***Übersetzungszeit:*** Wenn schon zur Übersetzungszeit bekannt ist, wo im Hauptspeicher das Programm zur Ausfuhrungszeit stehen wird, können Compiler und Binder absolute Adressen erzeugen *(z.B. DOS.COM-Dateie*n). - ***Ladezeit:*** Der Binder erzeugt relozierbare Adressen. Diese beziehen sich auf den Beginn des Programmspeichers (*oder eines Teilbereichs*). Zur Ladezeit wird festgelegt, wohin das Programm plaziert wird (*Ladeadresse*). Die relozierbaren Adressen werden dabei *(durch Addition der Ladeadresse*) in absolute Adressen konvertiert. Dazu muss die Programmdatei eine *(von Compiler und Binder erzeugte*) Relokations-Tabelle enthalten, in der die Positionen der relozierbaren Adressen vermerkt sind. - ***Ausführungszeit:*** Wenn ein Prozess zur Ausführungszeit innerhalb des Hauptspeichers verlagert werden kann, muss die Adressbindung auf die Ausführungszeit verschoben werden. Dazu wird spezielle Hardware benötigt. **[Grundlagen]** - ***Dynamisches Laden:*** Programmteile erst bei Bedarf in den HS laden - ***Dynamisches Binden***: Früher war Binden statisch -- Programmteile mehrfach übersetzt im Speicher. Moderne Systeme haben heute Platzhalter. - ***Überlagerungen (Overlays):*** Der Programmierer zerlegt ein Programm in mehrere Phasen, die weitgehend separate Funktionen u. Strukturen besitzen. Dann muss zur Ausführungszeit das Programm nicht komplett im HS stehen. Der Austausch wird vom Programm selbst ohne Unterstützung des BS gemacht. **[Logischer und physikalischer Austausch]** Die CPU arbeitet mit logischen Adressen. Der HS mit physikalischen Adressen. Logische Adresse werden von der ***MMU (Memory Management Unit)*** auf physikalische abgebildet. Logische Adresse = virtuelle Adresse - ***Abb. 13*** **[Multitaskingmodelle mit speicherresistenten Programmen]** Bei Multitasking System stehen mehrere Anwenderprogramme gleichzeitig im HS. Das BS muss die Auftreilung des Hauptseichers organisieren. **[Feste Partitionisierung:]** Der HS wird statisch in Patitionen verschiedener Größen aufgeteilt. Das BS hat eine Warteschlange mit Jobs (Ausführenden Programme) pro Partition u. alternativ eine globale Jobtabelle. ***Abb. 14*** **[Variable Partitionierung]**: Die Anzahl u. Größe der Partitionen wird den Anforderungen der Prozesse dynamisch angepasst bessere Speicherausnutzung. Speicher wird aber mehr u. mehr zerstückelt -- fragmentiert. Zusätzlich muss BS über freie Stelle buchführen. ***Abb. 15*** **[Partitionsverwaltung "Buchhaltung" des BS]** ***Doppelte verkettete Liste:*** Aus der Freiliste wird ein pass. Bereich gewählt. Der Zeitaufwand für eine Verschmelzung leereer Bereiche kann hoch sein. ***Buddy System:*** Vergibt Blockgrößen in Zweierpotenzen aus der Freiliste. ***Externe Fragmentierung:*** Die Zerstückelung des HS in freie Bereiche der Fragmentierung genannt. Darüber wird Buch geführt ***Interne Fragmentierung:*** Unbelegten Speicherteile die aber für einen Prozess reserviert sind. ***Bitmap basierende Verwaltung:*** Verwendet Zuteilungseinheiten fester Größe. In einer Bitmap wird für diese Blöcke eine Freibit geführt (0 od. 1) Speichernutzung ist nicht optimal, wenn n gleich große freie Blöcke für einen "großen Speicherbereich" vergeben werden ***Speicherkompaktierung:*** Lösung des Fragmentierungsproblems: Zusammenschieben der belegten Bereiche im Hauptspeicher. Statt vieler kleiner Lücken, bleibt ein großer Bereich übrig. nicht sher effizient ***Adressbildung und Zugriffsschutz:*** Bei Partitionierung des HS wird die Anfangsadresse erst zur Ladezeit bekannt Adressbildung erst zur Ladezeit möglich. Wenn HW effizierte, dyn. Adressbildung log. Adressen zur Laufzeit **[Adressbildung u. Zugriffsschutz]** Typischerweise wird jedem HS-Zugriff eine Basis- oder Relokationsadresse zur logischen Adresse **addiert** ( Physiche Adresse). **Zugriffschutz**: Prozess darf nur auf seinem Bereich zugreifen. Dafür existiert ein Grenzregister. **[Swapping]** HS ist oder war zu klein, um alle Prozesse unterzubringen. Interaktive Programme kann man aber schlecht minuten- oder stundenlang in einer Warteschlange warten lassen. Swapping wurde also aufgrund von Multitasking/Timesharing nötig. Bei Platzmangel werden temporär Prozesse vom Hauptspeicher in einen Swapbereich auf der Festplatte ausgelagert. Heute gibt es das nur mehr in Kombination mit neuen Techniken (*Workingsset-Konzept* -- kommt noch) **[Paging]** Basiert auf dynamische Adressbildung, setzt eine MMU voraus. (Umrechnung v. logischer auf physische Adresse). BS legt **Rahmentabelle** an: - Rahmen frei/belegt - welchen Prozess zugeordnet - Zugriffshäufigkeit Paging erlaubt die Ausführung von Prozessen, die nicht komplett im HS stehen. Wenn der ausführende Prozess allerdings auf eine ausgelagerten Seite zugreift, spricht man von einem **Seitenfehler (Page Fault).** Die zugreifende Instruktion wird abgebrochen und die Seite wird eingelagert. Anschließend wird die Instruktion, die den Fehler lieferte, wiederholt. Buchführung über die augelagerten Seiten erfolgt auch in der Seitentabelle des Prozesses. **[Segmentierung]** Der HS wird in Segmente unterschiedlicher Größe u. Zwecke unterteilt: - Programmcode vom Programmierer - Laufzeitstack - Statisch reservierter Speicherbereich f. Variablen - Programmcode einer dynamisch geladenen Bibliothek - Speicherbereich, der von zwei Prozessen gemeinsam zur Kommunikkation verwendet wird - Speicherbereich un den der Inhalt einer Datei eingeblendet wird Wenn der HS segmentiert ist, werden Adressen zweigeteilt in Segment u. Distanz. Es existieren auch eine Segmenttabelle des Prozesses. **[Segmentierung mit Paging]** Prozess besteht aus einigen wenigen Segmenten, jedes Segment wird in Seiten eingeteilt **Seitentabelle** je Segment Eine Adresse besteht aus Segmentnummer und (Segment) Distanz. **[Auslagerungsstrategien]** - **Globale Auslagerungsstrategie:** Wahl der auszulagernden Seiten spielt keine Rolle - *FIFO:* First in First out = Seite, die am längsten im HS steht, wird ausgelagert. - *LRU:* Least recently used = Seite, die am längsten nicht genutzt wurde, wird ausgelagert. - *LFU:* Least frequently used = Die am wenigsten benutzte Seite wird ausgelagert. - *Second Chance* = Verbindet FIFO mit Referenzbit. - **Prozessbezogene Auslagerungsstrategie:** Prozesszugehörigleit wird bei Auswahl auszulagernder Seiten mitbezogen **Trashing** **=** [BS ist konstant beschäftigt, Dinge ein- und auszulagern.] **Working-Set Modell** **=** [garantiert, dass jeder Prozess eine vernünftige Anzahl von Seiten im Speicher halten kann.] **[Prozessorverwaltung -- CPU-Scheduling]** **Früher** gab es keine interaktive Programme bzw. kein Multitasking , sondern nur Stapelverarbeitungen (Batch-Job hintereinander). **Heute** in Multitaskingsystemen bzw. Mehrbenutzerbetrieb gilt es zu entscheiden wieviel Rechenzeit die einzelnen Prozesse bekommen und wann sie verdrängt werden sollen (*Verdränging = Preemption -- dem ausführenden Prozess wird der Prozessor entzogen, weil er das ihm zugeteilte Zeitquantum aufgebraucht hat, oder weil ein anderer Prozess mit höherer Priorität die CPU beansprucht*). **[Ziele]** Scheduler: Teil des BS, der die Vergabe des Prozessors an konkurrierende Prozesse kontrolliert. Berücksichtigt werden müssen: - **Fairness:** Jeder Prozess soll eine gerechten Anteil an Zeit bekommen. - **Ressourcennutzung:** möglichst gleichmäßigt u. gut ausgelastet sein. - **Reaktionszeit:** System soll genügend schnell und interaktive Eingaben reagieren. - **Auftrags-Wartezeiten:** Stapelaufträge sollen schnell bearbeitet werden. - **Programmdurchsatzt:** Die Anzahl der poro Zeiteinheit bearbeiteten Programme soll möglichst hoch sein. [Zielkonflikte:] Preis/Leistung bzw gute/schlechte Ausstattung. **[Basis Algorithment für Batch-Betreib]** Nichtverdrängende Basisverfahren: - **FIFO Scheduling** - **Kürzester Job zuerst (KJZ)** *Priorität =* [\$\\frac{\\left( Wartezeit\\ + \\ Ausführungszeit \\right)}{Ausführungszeit}\$]{.math.inline} **[Basisialgorithmus für Timesharing-Betrieb]** Reihum-Verfahren (**= Round Robin**): Den Prozessen wird reihum der Prozessor überlassen. **[Gründe für Prioritäten]** - Um wichtige dringende Prozesse bei der Verarbeitung vorziehen - Um besonders gut zahlende Kunden bevorzugen