Version [22390]
Dies ist eine alte Version von BSys02Funktion erstellt von RonnyGertler am 2013-03-26 15:09:24.
Betriebssysteme (Betriebssystemtheorie) - Kapitel 2 - Funktionsweise eines Betriebssystems
Inhalte von Dr. E. Nadobnyh
2.1. Programmausführung
Programmentwicklung
Ausgangspunkt jedes Programms ist sein Quellcode, der mit passenden Dienstprogrammen in den Binärcode umgewandelt wird. Die CPU interpretiert den Binärcode als Instruktionscode.
Zu den Dienstprogrammen gehören: Editor, Präprozessor, Compiler, Assembler, Linker, Lader, C-Run-Time System, Java Virtual Machine (JVM).
Vor dem Programmstart lädt der Lader den Binärcode in den Hauptspeicher.
Programmentwicklung. Beispiel mit gcc
Adressraumbelegung
Ein Adressraum ist eine Menge aller möglichen Adressen.
Beispiel:
Verwendet ein Prozessor einen 32-Bit Adressbus, besteht die Menge aller möglichen Adressen aus
{0, 1, 2, ..., 232 -1}. Die Adressraumgröße ist 4GB.
Der Adressraum wird meist vom Compiler in 4 Bereiche aufgeteilt:
Stack, Code, Data, Heap.
Speicherbereiche
1.Stack (Stapel, Keller) enthält:
- Parameter,
- lokale Variablen,
- Funktionsergebnis der aufgerufenen Funktionen,
d )Rücksprungadressen.
Der Stack wächst mit dem Aufruf einer Funktion. 2.Code-Bereich enthält Programmcode.
3.Data-Bereich enthält die globalen Variablen sowie die statischen Datenkomponenten.
4.Heap (Haufen) wird für dynamische Speicherreservierung (Allozierung) bereitgestellt. Der Heap wächst mit dem Aufruf von new.
Prinzipbeispiel für Adressraumbelegung
Ausführung des Programms
Einfaches Modell des Von-Neumann-Rechners:
1.Die CPU (Central Processing Unit) holt die Maschinenbefehle nacheinander aus dem Speicher und interpretiert sie (Instruktionsausführung).
3.Das Transportsystem (bus) transferiert die Maschinenbefehle und Daten.
4.Die Ein-/Ausgabe (Input/Output, I/O) verbindet die Peripheriegeräte mit der CPU und stellt mehrere Schnittstellen bereit.
CPU-Registersatz
Ein Registersatz ist ein kleiner aber schneller Speicher in der CPU, um Maschinenbefehle auszuführen.
1. Allgemeine Register (Registerblock) werden als Zwischenspeicher für Operanden, Resultate und Adressen verwendet.
Beispiel: Pentium-Prozessor hat sieben allgemeine Register.
2.Folgende drei Steuerregister enthalten die Informationen des Programmablaufs:
- SP - Stapelzeiger,
- PC - Programmzähler,
- PSW - Programmstatuswort .
Steuerregister
1.SP - Stapelzeiger enthält die Adresse des aktuellen oberen Endes des Stacks. Synonyme: Stack Pointer, Kellerzeiger.
2.PC – Programmzähler legt fest, welcher Befehl als nächster zu holen und auszuführen ist.
Synonyme: Program Counter, Programmzählerregister, Befehlszähler, IC-Instruction Counter, IP-Instruction Pointer.
3.PSW - Programmstatuswort enthält:
a)aktuellen CPU-Modus,
b)Operanden und Resultate der Vergleichsoperationen,
c)weitere Kontrollbits und Flags.
Synonyme: Program Status Word, Statusregister, Flag Register, FR.
Befehlsverarbeitung in der CPU
Instruktionszyklus:
1) Verzweigungen: if, switch,
2) Schleifen: for, while,
3) Unbedingter Sprung: goto,
4) Sondere Sprünge: break, continue.
5) Aufruf: call, f1();
6) Rückkehr: return,
7) Exception: throw,
Aufruf und Rückkehr
In der Execute-Phase der Aufruf-Instruktion werden zwei Schritte hardwaremäßig ausgeführt:
(1) PC-Inhalt wird auf dem Stack abgelegt. PC zeigt auf die Instruktion, welche nach der Aufruf-Instruktion folgt.
(2) PC wird mit der Sprungadresse geladen. Die Sprungadresse ist die Startadresse des aufzurufenden Unterprogramms.
Im Unterprogramm werden folgende Schritte softwaremäßig ausgeführt:
(3) SP-Inhalt wird auf dem Stack abgelegt.
(4) Die lokalen Variablen usw. werden auf dem Stack abgelegt. Dabei wird SP geändert.
Vor der Rückkehr werden im Unterprogramm folgende Schritte softwaremäßig ausgeführt:
(5) SP wird mit altem SP-Inhalt vom Stack geladen. Damit werden lokale Variablen usw. freigegeben.
(6) return holt eine Rücksprungadresse vom Stack.
2.2. Unterbrechung
Hardware-Parallelität
Hardware-Parallelität bedeutet die gleichzeitige Arbeit mehrerer Kontroller.
Arten der Parallelität:
a) unabhängige Prozessoren (Multiprozessoren),
b) verschiedene Peripheriegeräte,
c) CPU und Peripheriegerät,
d) Teile der CPU, z.B. Pipeline.
Parallelität von CPU und Peripherie-Gerät
IRQ - Interrupt-Request (Unterbrechungsanforderung)
Unterbrechung
Unterbrechung (Interrupt) ist ein Mechanismus, der:
1)die Ausführung des laufenden Programms unterbricht und
2)die Kontrolle an eine ISR übergibt.
Nach der Rückkehr aus der ISR muss das unterbrochene Programm weitergeführt werden, als wenn es nie unter brochen worden wäre. Die Rückkehr wird deswegen zusammen mit der Unterbrechung betrachtet.
Klassifizierung der Unterbrechungen
1) Hardware-Interupts (Asynchrone Interrupts) sind nicht an den Programmablauf gebunden. Sie sind nicht vorhersehbar und auch nicht reproduzierbar.
2) I/O - Interrupts sind die klassischen Interrupts von Peripheriegeräten.
Beispiele:
- Die Ankunft einer Nachricht an einem Netzwerkadapter.
- b)Die Zuteilung eines Plattenspeicherblocks an die CPU.
- c)Ein E/A-Kontroller meldet Beendigung einer E/A-Operation oder Fehler.
3) Aborts sind Hardware-Fehler, welche den Programmabbruch verursachen.
Beispiele:
- Spannungsabfall,
- Rückkehr der Betriebsspannung,
- Fehler im Bussystem.
4) oftware-Interrupts (Synchrone Interrupts,Trap-Interrupts) sind an die Instruktion- Ausführung gebunden. ie sind vorhersehbar und auch bei gleicher Konstellation eproduzierbar.
5) ystemcalls sind Aufrufe an das Betriebssystem, um estimmte Dienstleistungen anzufordern. Sie sind als pezielle Maschinenbefehle realisiert, welche die oftware-Interrupts auslösen.
Beispiele:
- INT (interrupt) bei Intel iA32-Prozessoren,
- TRAP (trap instruction) bei Motorola 680x0,
- SUPERVISOR CALL (SVC) bei IBM- und Siemens-Systemen.
6) Eceptions (Ausnahmen, Softwarefehler) sind Fehlsituationen bei der Ausführung des Maschinenbefehls. Sie werden von der CPU selbst ausgelöst.
7) Taults sind Unterbrechungen vor der Ausführung des Befehls. Nach der Beseitigung der Ursachen des Faults kann der Befehl wiederholt werden.
8) Traps sind Unterbrechungen nach der Ausführung des Befehls.
Beispiele:
- Division durch Null,
- Arithmetiküberlauf,
- Gleitkommafehler,
- Privilegierter Befehl,
- Speicherschutzverletzung,
- Ungültiges Maschinenbefehlformat.
Interrupt Check
Erweiterter Instruktionszyklus:
1) Im Befehlzyklus wurde eine zusätzliche Phase vorgesehen: Interrupt Check.
2) In dieser Phase prüft der Prozessor einmal pro Instruktion, ob IRQ vorliegt.
3) Wenn ja, erhält Programmzähler (PC) neue Zieladresse: Startadresse der ISR. Dadurch wird ISR gestartet. Das ist noch eine Sprung-Möglichkeit.
Unterbrechungskontext
Inhalte der Steuerregister PC und PSW bilden ein so genannter Unterbrechungskontext (Prozessorumgebung, Ausführungsumgebung) eines laufenden Programms. Zum Unterbrechungskontext können eventuell Inhalte von anderen CPU-Register gehören.
Vor dem ISR-Start wird der Unterbrechungskontext hardwaremäßig gesichert. Der gesicherte Inhalt des Steuerregisters PC wird als Fortsetzungsadresse (Rückkehradresse) benannt.
Vor der ISR-Beendigung ist der Unterbrechungskontext zurück einzustellen. Dann kann das unterbrochene Programm fortgesetzt werden.
Alle andere Register können von ISR softwaremäßig gesichert werden.
Unterbrechung und Rückkehr
In der Interrupt-Check-Phase werden hardwaremäßig vier folgende Schritte ausgeführt:
(1) Der PSW wird im Stack gespeichert.
(2) Der PC wird im Stack gespeichert.
(3 Ein oder mehrere Bits werden im PSW verändert. Der Modus wird in Systemmodus umgeschaltet.
(4) In PC wird die ISR-Adresse geladen. Die Adresse wird aus Interrupt-Vektortabelle geholt. Damit wird ISR gestartet.
Weitere fünf Schritte werden softwaremäßig von ISR ausgeführt.
(5) Verändert die ISR die Inhalte der Register (allgemeiner und SP), so müssen die alten Inhalte gesichert werden. Für die Sicherung wird der Stapel benutzt.
(6) Ereignis-Behandlung in IRS.
(7) Am Schluss lädt ISR alle gesicherten Register und den SP zurück.
(8) Register-Inhalt wird aus dem Stack in PSW geschrieben.
(9) Register-Inhalt wird aus dem Stack in PC geschrieben. Damit wird das unterbrochene Programm fortgesetzt.
Die letzten zwei Schritte können durch einen speziellen Maschinenbefehl IRET (return-from-interrupt, interrupt return) ausgeführt werden.
2.3. Systemmodus und Systemaufruf
Modus
Der CPU-Modus ist ein Schutzmechanismus auf Hardware-Ebene. Der Modus gewährleistet, dass die Verwaltung von Unterbrechungen eine Chef-Sache nur des Betriebssystems ist.
Viele Prozessoren haben zwei Modi: Systemmodus und Benutzermodus. Deswegen ist ein Modus durch ein Bit repräsentiert. Der CPU-Modus ist Bestandteil des PSW des aktuellen Programms.
1) Der Systemmodus (Kernmodus, Supervisor Mode, geschützter Modus) ist eine privilegierte Betriebsart für das Betriebssystem.
2) Der Benutzermodus (User Mode) ist eine nicht privilegierte Betriebsart für Benutzerprogramme.
Klassische Betriebssysteme werden komplett im Systemmodus ausgeführt und dürfen nicht unterbrochen werden.
Modi im Vergleich
Betriebsart Eigenschaften |
Systemmodus | Benutzermodus |
Privilegierte Maschinenbefehle | sind erlaubt | sind verboten |
Das ausgeführte Programm | ist nicht unterbrechbar | ist unterbrechbar |
Register für Speicherkonfiguration | dürfen geändert werden | dürfen nicht geändert werden |
CPU-Modus in PSW | darf auf Benutzermodus umgeschaltet werden | darf nicht auf Systemmodus umgeschaltet werden |
Modus-Umschaltung
1) Die Umschaltung vom Benutzermodus in den Systemmodus findet mittels einer Unterbrechung statt.
- Der alte Inhalt des CPU-Modus wird automatisch gesichert, weil der Modus ein Teil des PSW ist.
- Der neue CPU-Modus wird automatisch in Systemodus geändert.
- programmtechnisch durch die Speicherung in Register PSW,
- automatisch durch einen privilegierten Maschinen befehl, z.B. IRET.
Privilegierte Maschinenbefehle
Das sind Befehle, die in Benutzerprogrammen nicht ver wendet werden dürfen. Dazu gehören alle Befehle, welche die Ein-/Ausgabe und den Speicherschutz betreffen.
Beispiele: IN -Eingabe, OUT -Ausgabe, CLI –clear interrupt enable flag (Interrupts blockieren)
Das Privileg wird durch Modus-Mechanismus gewährleistet. Die Verwendung eines privilegierten Maschinenbefehls in einem Benutzerprogramm führt zu einer Softwareunter brechung.
Zum Beispiel wird ein Trap ausgelöst: „Versuch, einen privilegierten Maschinenbefehl auszuführen“.
⇒ Demo 2.
Ein-/Ausgabe Befehle
Der Zugriff auf Geräte ist grundsätzlich nur mit privilegierten Befehlen möglich. Sonst können mehrere Programme z.B. gleichzeitig Daten auf einem Drucker direkt ausgeben und Datenzeilen werden dann in chaotischer Reihenfolge gedruckt.
Ein E/A-Befehl wird in zwei Schritten ausgeführt.
- Das Programm richtet an das Betriebssystem einenAuftrag auf die Ein-/Ausgabe. Dabei wird vom Benutzermodus zu dem Systemmodus umgeschaltet.
- Das Betriebssystem führt den Maschinenbefehl IN/OUT im Systemmodus aus. Wenn ein anderes Programm seinen E/A-Auftrag richtet und das Gerät noch beschäftigt ist, erfüllt das Betriebssystem kein IN/OUT, sondern speichert den Auftrag in der Warteschlange.
Systemmaufruf
Ein Systemaufruf ist ein Dienstauftrag an das Betriebssystem.
Beispiele:
Betriebsart Eigenschaften |
Win32 von WINDOWS | UNIX |
Datei erzeugen oder öffnen | CreateFile() | open() |
Datei lesen | ReadFile() | read() |
Aktuelle Zeit erfragen | GetLocalTime() | time() |
... | ||
Anzahl der Systemaufrufe | Mehrere 1000 | Etwa 100 |
Systemprogrammierschnittstellen
Die Schnittstelle zwischen dem Betriebssystem und den Benutzerprogrammen wird aus einer Menge von Systemaufrufen gebildet.
Beispiele:
Unix - Schittstellen
1) POSIX -Portable Operatin System Interface
2) The Single Unix Specification
Windows - Schnittstellen
1) Win32 API (Application Programming Interface)
2) OS/2
Einbettung des Systemcall-Befehls
Es gibt zwei Varianten der Systemaufrufe:
- Der spezialisierte Systemaufruf ist meistens stark systemabhängig. Die Portabilität des Programms ist begrenzt.
- Daher gibt es eine C-Bibliothekfunktion, die einen Standard-Systemaufruf zulässt. Das Programm kann auf jedem System kompiliert werden.
Der tatsächliche Systemcall wird in mehrere Systemprogramme eingebettet.
Zum Beispiel werden folgende Aufrufen ausgeführt, um eine Datei unter Windows zu lesen:
(1) main ruft die C-Standardfunktion fscanf der Standard-Bibliothek stdio.h auf.
(2) fscanf ruft das Systemprogramm ReadFile der Schnittstelle „Win32 -API“ auf.
(3) ReadFile führt den tatsächlichen Systemmcall int 0x2e aus. INT löst Software-Interrupt aus und aktiviert Routine mit einen bestimmter Vektornummer 0x2e.
(4) System führt den Transfer-Befehl „IN“ aus.
⇒ Demo 3.
2.4. Multitasking
Definition
Der Begriff Multitasking (Multiprogrammierung, Mehrprogramm-Betrieb, Mehrprozessbetrieb) bezeichnet die Fähigkeit eines Betriebssystems, mehrere Prozesse parallel bzw. pseudoparallel auszuführen.
Ein Prozess (Task) ist eine Ausführung des Programms in einer Prozessumgebung.
Multitasking ist das bedeutendste Konzept in der Betriebssystemtheorie.
Typische Multitasking-Systeme sind UNIX, Windows XP.
Auf einem typischen Windows- oder UNIX-System werden etwa 40-60 Prozesse gestartet, wenn der Computer hochgefahren wird.
Grundidee des Multitasking
1) Jeder Prozess besitzt seinen privaten Teil des Speichers.
2) Zu jedem Zeitpunkt kann nur ein einziger Prozess ausgeführt werden.
3) Wenn ein Prozess auf die Beendung seiner Ein-/Ausgabe wartet, kann die CPU zur Ausführung eines anderen Prozesses wechseln.
Einige Begriffe
1) Ein Grad der Multiprogrammierung ist die Anzahl von Prozessen im Speicher.
2) Ein PCB (Process Control Block) ist eine Repräsentation eines Prozesses. Der PCB enthält Informationen über den Prozess, z.B. die Programmadresse, wo das Programm zuletzt unterbrochen wurde (Fortsetzungsadresse).
3) Ein Scheduler ist ein Teil des Betriebssystems, welcher über die Prozessorzuteilung entscheidet.
4) Ein Dispatcher ist die Komponente des Betriebssystems, die nach der Scheduling-Entscheidung eine Stack- Manipulation und ein Prozesswechsel ausführt.
Stack-Manipulation
Für den Prozesswechsel muss eine Stack-Manipulation durchgeführt werden:
1) Die Fortsetzungsadresse des unterbrochenen Programms „i“ wird vom Stack in PCB i gespeichert.
2) Die Fortsetzungsadresse des vom Scheduler ausgewählten Programms „j“ wird vom PCB j in Stack gespeichert.
Bemerkung:
Für den korrekten Prozesswechsel muss nicht nur die Fortsetzungsadresse, sondern auch andere Hauptregister- Inhalte des ausgewählten Prozesses wiederhergestellt werden (s. Kap.3).
Prozesswechsel. Prinzipbeispiel
(1) Das Programm 1 führt den Systemaufruf aus und wartet auf die Beendigung seiner Ein-/Ausgabe.
(2) Bei der Unterbrechung (Trap) wird die Fortsetzungs adresse dieses Programms auf dem Stack gesichert.
(3) Der Scheduler wählt zur Ausführung auf der CPU ein anderes Programm, z.B. Programm 2.
(4) Um das Programm 2 fortzusetzen, wird eine Stack- Manipulation durchgeführt :
- Die Fortsetzungsadresse des unterbrochenen Programms 1 wird vom Stack in eigenen PCB 1 gespeichert.
- Die Fortsetzungsadresse des Programms 2 wird im Stack als neue Rücksprungadresse gespeichert.
(5) Der Befehl IRET übergibt dem Programm 2 die Kontrolle.
⇒ Demo 4.
Grundmechanismen des Multitasking
Beim Multitasking spielen die folgenden Mechanismen zusammen:
1) Unterbrechung (Interrupt).
2) Systemaufruf und Modus-Umschaltung.
3) Privilegierte Maschinenbefehle.
4) Scheduler
5) Prozesswechsel und Stack–Manipulation
Arbeitszyklus des Betriebssystems
1) Das BS erteilt die Befehle an mehrere Geräte und erhält von ihnen Unterbrechungen.
2) Das BS verteilt die CPU zwischen mehreren Programmen und erhält von ihnen Unterbrechungen.
3) Durchschnittliche Zeiten zwischen zwei Unterbrechungen:
Ereignis | Mittlere Zeit |
E/A-Unterbrechung | 2,8 ms |
Zeitscheibenunterbrechung | 10,0 ms |
Programmierte Unterbrechung | 1,5 ms |
Alle Unterbrechungen zusammen | 0,9 ms |
Die Zeiten wurden an einer VAX 8800 gemessen.
4) Ein 100-MIPS- Prozessor verarbeitet 105 Befehle pro Millisekunde.
CategoryBSys