Grundlagen der Betriebssysteme

Praktische Einführung mit Virtualisierung

Stefan Bosse

Universität Koblenz - FB Informatik

1 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick ::

Einführung und Überblick

Was sind Betriebssysteme?

2 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick ::

Einführung und Überblick

Was sind Betriebssysteme?

Was sind Virtuelle Maschinen?

3 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick ::

Einführung und Überblick

Was sind Betriebssysteme?

Was sind Virtuelle Maschinen?

Wie sind Betriebssysteme aufgebaut, wie programmiert man sie, wie analysiert man Fehler?

4 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Betriebsysteme

Betriebsysteme

Was ist ein Betriebssystem?

5 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Betriebsysteme

Betriebsysteme

Was ist ein Betriebssystem?

Das Betriebssystem soll den Anwendungsprogrammierer bzw. den Anwender von Details der Rechnerhardware entlasten. Modern strukturierte Betriebssysteme kapseln den Zugriff auf die Betriebsmittel. Das Betriebssystem stellt somit eine virtuelle Maschine über der Hardware bereit.

Das Betriebssystem ist ein Programm mit Besonderheiten die in diesem Kurs untersucht werden. Auch praktisch!

6 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Betriebsysteme

Betriebsysteme

  • Die geräteunabhängige Ein-/Ausgabe war eine der wichtigsten Errungenschaften bei der erstmaligen Einführung von Betriebssystemen.
  • Früher war es notwendig, dass Applikationen die Eigenheiten der angeschlossenen Peripheriegeräte im Detail kennen mussten.

Ein-/Ausgabe ohne und mit Betriebssystem

7 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Lernziele

Lernziele

  1. Sie erklären den Zweck und die Rolle eines modernen Betriebssystems.
  2. Sie erkennen wie Rechnerressourcen durch Applikationen genutzt werden, wenn sie das Betriebssystem verwaltet.
  3. Sie beschreiben die Funktionen eines aktuellen Betriebssystems in Bezug auf Benutzbarkeit, Effizienz und Entwicklungsfähigkeit.
  4. Sie können die Vorteile abstrakter Schichten und ihrer Schnittstellen in hierarchisch gestalteten Architekturen erklären.
  5. Sie analysieren die Kompromisse beim Entwurf eines Betriebssystems.
  6. Sie erläutern die Architektureigenschaften monolithischer, geschichteter, modularer und Mikrokernsysteme.
  7. Sie stellen netzwerkfähige, Client/Server- und verteilte Betriebssysteme einander gegenüber und vergleichen diese.
  8. Sie erlernen die C Programmiersprache - Die Basis fast aller betriebssysteme.
8 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Literatur

Literatur

Grundkurs Betriebssysteme
Peter Mandel
Springer Verlag

Betriebssysteme
Eduard Glatz
dpunkt Verlag

Betriebessysteme, kompakt
Christian Baun
Springer Verlag

9 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Literatur

Literatur

Operating Systems - Design And Implementation
Andrew S. Tanenbaum
Prentice Hall

Modern Operating Systems
Andrew S. Tanenbaum
Prentice Hall

Distributed Operating Systems
Andrew S. Tanenbaum
Prentice Hall, 1996

10 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Taxonomie der Betriebssysteme

Taxonomie der Betriebssysteme

Klassen:

  1. IO Loop: Kein Betriebssystem, eine einzige Endlosschleife und endless pain
  2. Mikrokernel und Dienstprogramme
  3. Monolithischer Kernel (eingebettet)
  4. Monolithischer Kernel und Dienstprogramme
  5. Verteilte Betriebssysteme (inkl. Cloud)
  6. Echtzeitfähige Betriebssysteme
  7. Generische versa applikationsspezifische (domänenspezifische) BS
11 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Betriebssysteme und Rechnerarchitektur

Betriebssysteme und Rechnerarchitektur

Betriebssysteme sind eng verknüpft mit Rechnerarchitekturen!

Eingebettetes System

Server

Notebook

12 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Programmierung von Betriebssystemen

Programmierung von Betriebssystemen

Randbedingungen:

  1. Rechnerarchitektur
  2. Speicherarchitektur und Speichermodell
  3. Nutzerinteraktion
  4. Vernetzung und Netzwerkmodell
  5. Aufgaben
  6. Zeitmodell (Echtzeit)

Wir werden ein minimales Betriebssystem (basekernel) in C programmieren. C?

13 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Programmierung von Betriebssystemen

Programmierung von Betriebssystemen

Die Programmierung, der Test und die Fehlersuche in Betriebssystemen ist wenig komfortabel und methodisch getrieben wie die Informatik es im klassischen Softwareentwurf lehrt und ggfs. praktiziert!

14 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Programmierung von Betriebssystemen

Programmierung von Betriebssystemen

Die Programmierung, der Test und die Fehlersuche in Betriebssystemen ist wenig komfortabel und methodisch getrieben wie die Informatik es im klassischen Softwareentwurf lehrt und ggfs. praktiziert!

Welcher Debugger (Diagnosewerkzeug zur Fehlersuche) wird am häufigsten in der Praxis bei der Fehlersuche eingesetzt ?

15 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Programmierung von Betriebssystemen

Programmierung von Betriebssystemen

Die Programmierung, der Test und die Fehlersuche in Betriebssystemen ist wenig komfortabel und methodisch getrieben wie die Informatik es im klassischen Softwareentwurf lehrt und ggfs. praktiziert!

Welcher Debugger (Diagnosewerkzeug zur Fehlersuche) wird am häufigsten in der Praxis bei der Fehlersuche eingesetzt ?

Fehlersuche in Betriebssystemen ist wie Detektivarbeit (Sherlock Holmes, Hercule Poirot)!

16 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Basekernel

Basekernel

https://github.com/dthain/basekernel

Prof. Douglas Thain (University of Notre Dame) et al.

  1. Minimaler Betriebssystemkernel (monolithisch)
  2. Betriebsprogramme (Shell Interpreter, inklusive minimaler grafischer Benutzeroberfläche)

Statistik der Programmiersprachen:

C Assembler Sonstiges
96.3% 3.0% 0.7%
Kernel: ≈13000 Zeilen Kernel: ≈710 Zeilen -
Library: ≈7200 Zeilen - -
User: ≈1500 Zeilen - -
17 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Basekernel

Basekernel

  1. Basekernel ist ein einfacher Betriebssystemkern für Forschung, Lehre und Spaß.

  2. Der Basiskernel ist kein vollständiges Betriebssystem, aber er ist ein Ausgangspunkt für diejenigen, die neuen Betriebssystemcode studieren und entwickeln möchten.

  3. Basekernel kann in einer Intel PC-kompatiblen virtuellen Maschine im geschützten 32-Bit-Modus gestartet werden, mit Unterstützung für VESA-Framebuffer-Grafiken, ATA-Festplatten, optische ATAPI-Geräte, Prozessverwaltung, Speicherschutz, einfache Grafiken und grundlegendes Dateisystem.

  4. Es können einfach neue Programme auf Benutzerebene geschrieben und das System erweitert werden.

18 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Basekernel: Das erste Experiment geht schief

Basekernel: Das erste Experiment geht schief

Das Betriebssystem wird automatisch mittels des make Programms erzeugt (Dauer: 2 Sekunden!):

  1. Der Kernel
  2. Die Betriebsprogramme
  3. Alles zusammen in eine ISO Datei gepackt.

Der erste Versuch das Betriebssystem (baserkernel.iso) in der vm86 zu starten führt zu der Ausgabe (und 100% CPU Last):

19 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Basekernel: Das erste Experiment geht schief. Was war passiert?

Basekernel: Das erste Experiment geht schief. Was war passiert?

  1. Ein Betriebssystem braucht selber ein kleines minimales Betriebssystem um (von einem Speichermedium) geladen und gestartet zu werden.
    • Hier wird der Betriebssystemkernel von einem Bootloader geladen
  2. Der Bootloader wird selber wieder von einem Programm geladen
    • Hier wird der Bootloader vom im Rechner eingebauten Basic Input Output System (BIOS) geladen

Wir sehen an der Terminalausgabe dass der Bootloader geladen wurde, dieser das Kernelprogramm geladen hat, und es schließlich gestartet hat.

Dann war Schluss...

20 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Basekernel: Das erste Experiment geht schief. Was war passiert?

Basekernel: Das erste Experiment geht schief. Was war passiert?

Okay, in den Programmcode des Bootloaders schauen und her mit dem printf Debugger ...

  • Programmiersprache des Bootloaders: Maschinensprache (Assembler)! OMG

  • Printf? Gibt es nicht.

  • Es gibt nur die Möglichkeit mit einer Reihe von Maschinenbefehlen des Mikroprozessors via BIOS Funktionen Textzeichen auf den Bildschirm zu setzen!

21 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Basekernel: Das erste Experiment geht schief. Was tun?

Basekernel: Das erste Experiment geht schief. Was tun?

bios_putstring: # routine to print an entire string
mov (%si) , %al
cmp $0 , %al
jz bios_putstring_done
call bios_putchar
inc %si
jmp bios_putstring
bios_putstring_done:
ret
bios_putchar: # routine to print a single char
push %ax
push %bx
mov $14 , %ah
mov $1 , %bl
int $0x10
pop %bx
pop %ax
ret
bootmsg:
.asciz "\r\nbootblock: booting kernel...\r\n"
****
mov $(bootmsg),%si # print boot message
call bios_putstring

Ausschnitt Minimalimplementierung "printf" in Assembler (bootblock.S)

22 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Basekernel: Das erste Experiment geht schief. Was tun?

Basekernel: Das erste Experiment geht schief. Was tun?

Wir fügen Checkpoint Ausgaben in den Bootloader (bootblock.S) ein um zu sehen wie weit wir kommen und später im Anfang des Betriebssystemkerns (kernelcore.S)

checkpoint_msg_a:
.asciz "Checkpoint BL.1\r\n"
checkpoint_msg_b:
.asciz "Checkpoint BL.2\r\n"
checkpoint_msg_c:
.asciz "Checkpoint BL.3\r\n"
loadsector:
mov $(checkpoint_msg_a),%si # Checkpoint A
call bios_putstring
mov $1, %al # load 1 sector
mov $0x02, %ah # load command
int $0x13 # execute load
mov $(checkpoint_msg_b),%si # Checkpoint B
call bios_putstring
mov $'.', %al # display a dot
call bios_putchar # for each sector loaded
mov (sectors_left),%ax # how many sectors left?
cmp $0xffff, %ax # has it been initialized?
jne gotsectors # yes - use the value
mov %es:(KERNEL_SIZE_OFFSET),%eax # no - get size of kernel
shr $9, %eax # convert into blocks
inc %eax # add one for good measure
nextsector:
inc %cl # advance by one sector
mov (disk_sectors),%al # what is the maximum sector?
cmp %al, %cl # is this the last sector?
jle loadsector # no - load the next sector
mov $1,%cl # yes - go to sector zero..
gotsectors:
dec %ax # remove one block
mov %ax,(sectors_left) # store the value
cmp $0, %ax # are we done?
je loaddone # yes - jump to bottom
loaddone:
mov $(checkpoint_msg_c),%si # Checkpoint C
call bios_putstring

Checkpoint Ausgaben in bootblock.S Bootloader

23 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Basekernel: Das erste Experiment geht schief. Was tun?

Basekernel: Das erste Experiment geht schief. Was tun?

.code16
.text
.global _start
_start:
.org KERNEL_SIZE_OFFSET
.global kernel_size
kernel_size:
.long _end-_start
bios_putstring: # routine to print an entire string
***
bios_putchar: # routine to print a single char
***
checkpoint_msg_a:
.asciz "Checkpoint KS.1\r\n"
realstart:
mov $(checkpoint_msg_a),%si # Checkpoint A
call bios_putstring
***

Checkpoint Ausgaben in kernelcore.S Kernelstart

  1. Kernel wieder kompilieren, ISO bauen
  2. Kernel in VM starten
  3. Ergebnis: Checkpoints BL.1, BL.2, BL.3 werden erreicht, KS.1 nicht!
  4. Der Kernel wird überhaupt nicht gestartet (oder?)! Was ist falsch hier? Wir sind im Nirvana.
24 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Basekernel: Das erste Experiment geht schief. Was tun?

Basekernel: Das erste Experiment geht schief. Was tun?

  1. Was passiert im Bootloader?
    • Er lädt den Kernel blockweise, ein Block sind hier 512 bytes, das Kernelimage (basekernel.img) ist aber rund 1 MB groß, d.h. mindestens 250 Blöcke müssten von dem virtuellen CDROM Laufwerk geladen werden.
    • Tatsächlich wird nur ein Block geladen!
  2. Wieso? Woher weiß der Bootloader wie viele Blöcke er laden soll? Das steht am Anfang vom Kernelimage:
.org KERNEL_SIZE_OFFSET
.global kernel_size
kernel_size:
.long _end-_start
  1. Ist vielleicht die Angabe im Kernelimage falsch? Schauen wir mit einem Hex-Editor hinein:
25 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Basekernel: Das erste Experiment geht schief. Was tun?

Basekernel: Das erste Experiment geht schief. Was tun?

00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...............

Hex Editor Dump vom Beginn des Kernelimages. Lauter Nullen!?

  1. Nur Nullen im Image - bis - halt stopp, da war doch etwas mit dem Kernelimage und dessen seltsame virtuelle Größe!

  2. Wir schauen uns nun die Symboltabelle, d.h. die Adresstabelle des Kernels an ...

26 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Basekernel: Das erste Experiment geht schief. Was tun?

Basekernel: Das erste Experiment geht schief. Was tun?

>> objdump -t kernel.elf
kernel.elf: file format elf32-i386
SYMBOL TABLE:
080480f4 l d .note.gnu.property 00000000 .note.gnu.property
00010000 l d .text 00000000 .text
0001e000 l d .rodata 00000000 .rodata
0001f1f0 l d .eh_frame 00000000 .eh_frame
00024000 l d .data 00000000 .data
00024b80 l d .bss 00000000 .bss
00000000 l d .comment 00000000 .comment

Auszug von objdump -t kernel.elf (Symbole und ihre Adressen)

27 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Basekernel: Das erste Experiment geht schief. Was tun?

Basekernel: Das erste Experiment geht schief. Was tun?

>> objdump -t kernel.elf
kernel.elf: file format elf32-i386
SYMBOL TABLE:
080480f4 l d .note.gnu.property 00000000 .note.gnu.property
00010000 l d .text 00000000 .text
0001e000 l d .rodata 00000000 .rodata
0001f1f0 l d .eh_frame 00000000 .eh_frame
00024000 l d .data 00000000 .data
00024b80 l d .bss 00000000 .bss
00000000 l d .comment 00000000 .comment

Auszug von objdump -t kernel.elf (Symbole und ihre Adressen)

  1. Das vom Linker automatisch eingefügte und nicht benötigte Symbol .note.gnu.property wurde mit in das Image übernommen, hatte aber unabänderlich eine völlig andere Adresse (0x8000000) als die Kernelsymbole (0x10000). Das führte zu einem großen "Speicherloch" im Image und einem völlig falschen Aufbau mit Nullen gefüllt!
  2. Lösung 1: objcopy -R .note.gnu.property
  3. Lösung 2: Das Kleingedruckte lesen und den Hinweis beachten vorher einen Crosscompiler zu bauen und zu benutzen (der diesen Mist nicht macht).
28 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Programmiersprache C

Programmiersprache C

Warum C?

  1. Wir haben an der beispielhaften Fehlersuche am häufigsten Speicher und Speicheradressen gesehen.
  2. Die Programmiersprache bildet das lineare Speichermodell direkt ab (fast alles sind Speicheradressen)
  3. Aber trotzdem sind C Programme (Quelltext) nicht auf einen Rechner oder eine Rechnerarchitektur beschränkt
  4. Portabilität der Programme!
  5. Besser schreib- und lesbar als Assembler (nicht portabel)
  6. C ist eine Hochsprache mit statischer Typisierung, aber expliziten Speichermanagement (durch den Programmierer) und direkter Sichtbarkeit des Speichers und Speicheradressenoperationen (Pointer)
  7. Aber trotzdem ist maschinennahe Programmierung (also die Programmierung der Maschine) möglich, gerade auch Gerätetreiber und Ein-und Ausgabe
29 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Programmiersprache C

Programmiersprache C

┌―――――――――――――┐ 80000
┌――――――――――――――――――――――▶│┌―――――┐ │ 79010
│ ││ var │ │ &var=79010
┌―┴┐ │└―――――┘ │
┌――▶│25│ 30 35 │ │
│ └――┘ ▲ ▲ │ Heap │
│ │ │ ├――――――――┬――――┤ 50000
│ │ └―――――――――┐ │ ▲ │ │
│ └――――――――――┐ │ │ │ ▼ │
│ │ │ ├―┴―――――――――――┤ 40000
└―― int var=25; │ │ │ Stack │
int *ptr=&var; │ │ ├―――――――――――――┤ 30000
*ptr=30; ――┘ │ │ Data Init. │
int **pptr=&ptr; │ ├―――――――――――――┤ 20000
**pptr=35; ―――┘ │ Data Noinit│
├―――――――――――――┤ 10000
│ Text │
└―――――――――――――┘ 0

Speicherlayout in C / Pointervariablen

30 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Programmiersprache C

Programmiersprache C

C History

UNIX History

31 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Programmiersprache C: C2JS

Programmiersprache C: C2JS

  • Statisch kompiliert, nicht inkrementell (wie JavaScript, Python)
  • Aber mit dem C2JS Transpiler ...
┌――――――――┐ ┌―――――――――――┐
│ │ │ │
┌――――――――┐ │ C │ │ C-Analyzer│ ┌―――――――――┐
│C Source├――――▶│ Parser ├――▶│ JS- ├――▶│ JS Code │
└――――――――┘ │ │ │ Generator │ └――――┬――――┘
│ │ │ │ │
└――――――――┘ └―――――――――――┘ ▼
┌―――┐ ┌―――――――――――┐
Heap │DS │ │┌―――――――――┐│
Stack │ ├――┼│ JS Exec ││
malloc │ │ │└―――――――――┘│
│ free │ │ └―――――――――――┘ │
│ │ │ Sandbox Env. │
│ JavaScript └―――┘ │
└――――――――――――――――――――――――――――――――――――――――――┘

C2JS Architektur

32 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Programmiersprache C: Live Programming mit C2JS

Programmiersprache C: Live Programming mit C2JS

33 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Programmiersprache C: Live Programming mit C2JS

Programmiersprache C: Live Programming mit C2JS

──────────────────────────────────────────────────────────────────────────────────────
#include "clib.h"
int x=1;
int main () {
printf("Hello World %d\n",x);
}
──────────────────────────────────────────────────────────────────────────────────────
Object.assign(CS,{"-1":"free","-2":"malloc","-3":"memcpy","-4":"printf","-5":"main"});
Object.assign(CSI,{"free":-1,"malloc":-2,"memcpy":-3,"printf":-4,"main":-5});
var x=x||__heap_allocate(1,4,"int");
DS.writeInt32(1,x);
function main() {
var __sp=__stack_pointer();
printf("Hello World %d\n",DS.readInt32(x));
__stack_pointer(__sp);
};
main(argc,argv)
──────────────────────────────────────────────────────────────────────────────────────

(Oben) C Code (Unten) Transpillierte JS Code

34 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Betriebssysteme - Eine Einführung

Betriebssysteme - Eine Einführung

  1. Alle Einheiten die für einen Rechnerbetrieb nötig sind, sind Ressourcen oder Betriebsmittel
  2. Ein Betriebssystem ist die Gesamtheit der Programmteile, die die Benutzung von Betriebsmitteln steuern und verwalten.
  3. Das Betriebssystem ist die Software (Programmteile), die für den Betrieb eines Rechners anwendungsunabhängig (unterstützend) notwendig ist.
Formale Definition Betriebssystem
  • Betriebssysteme sind also Programme und Software. Betriebssystementwicklung ist Softwareentwurf.
  • Im vorherigen Praxisbeispiel wurden schon einige Unterschiede zum klassischen Softwarenentwurf deutlich:
    • Zugriff auf Ein- und Ausgabegeräte (Betriebsmittel)
    • Direkte Maschinenprogrammierung
    • Speichermodell und Rechnerarchitektur
35 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Betriebssysteme - Eine Einführung

Betriebssysteme - Eine Einführung

Zentrale Ressourcen Periphere Ressourcen
Aktive Ressourcen Prozessor(en) Kommunikationseinheiten:
1. Endgeräte (Tastaturen, Drucker, Anzeigen, Zeigegeräte etc.)
2. Netzwerk (entfernt, lokal) etc.
Passive Ressourcen Hauptspeicher Speichereinheiten:
1. Festkörper SDD
2. Platten HDD
3. Bänder Tape
4. CD-ROM/DVD etc.

Ressourcenklassen

36 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Betriebssysteme - Eine Einführung

Betriebssysteme - Eine Einführung

Es gibt nicht das Betriebssystem schlechthin, sondern nur eine den Forderungen der Anwenderprogramme entsprechende Unterstützung, die von der benutzerdefinierten Konfiguration abhängig ist und sich im Laufe der Zeit stark gewandelt hat. Gehörte früher nur die Prozessor-, Speicher- und Ein-/Ausgabeverwaltung zum Betriebssystem, so werden heute auch eine grafische Benutzeroberfläche mit verschiedenen Schriftarten und -größen (Fonts) sowie Netzwerkfunktionen verlangt.

37 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Betriebssysteme - Das Schichtenmodell (1)

Betriebssysteme - Das Schichtenmodell (1)

978-3-96088-839-0

Das Nutzerschichtenmodell von Betriebssystemen
38 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Betriebssysteme - Programme

Betriebssysteme - Programme

Softwaregliederung

39 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Betriebssysteme - Programme

Betriebssysteme - Programme

Die eigentlichen Steuerprogramme sind für folgende Funktionen zuständig:

  • Steuerung aller Computerfunktionen und Koordination der verschiedenen zu aktivierenden Programme.
  • Steuerung der Ein-/Ausgabeoperationen für die Anwendungsprogramme.
  • Überwachung und Registrierung der auf dem Computersystem ablaufenden Aktivitäten.
  • Ermittlung und Korrektur von Systemfehlern.

Auffallend bei dieser Definition ist die Einbeziehung von Übersetzern (Compiler, Binder), Testhilfen und Dienstprogrammen.

Für klassische Betriebssysteme (z.B. Unix und GNU-Tools) trifft dies vollumfänglich zu, während moderne Betriebssysteme oft die Bereitstellung von Übersetzungstools irgendwelchen Drittherstellern überlassen bzw. diese als separate Applikation ausliefern (z.B. Windows und Visual Studio).

40 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Einordnung im Computersystem

Einordnung im Computersystem

bsdp In einem Rechner stellt das Betriebssystem eine Softwareschicht dar, die zwischen den Benutzerapplikationen einerseits und der Rechnerhardware andererseits liegt.

  • Programme zur Softwareentwicklung, wie Editoren und Compiler, können dazugehören.
  • Häufig wird nur der Betriebssystemkern als Betriebssystem bezeichnet, während der Begriff Systemprogramme für das Gesamtpaket inklusive der Programmentwicklungswerkzeuge benutzt wird.
41 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Einordnung im Computersystem

Abstraktion von Hardwareelementen

  • Prozessor
  • Arbeitsspeicher (main memory)
  • Massenspeicher (mass storage), z.B. Festplatten, CD-ROM, DVD
  • Benutzerschnittstelle (user interface)
  • Kommunikations- und andere Peripheriegeräte (LAN, WLAN usw.)

Die Betriebssystemtheorie beruht damit auf den Prinzipien der Computertechnik. Computertechnik befasst sich mit:

  • Rechner-Grundmodellen (Von-Neumann-, Harvard-Architektur)
  • Funktionsweise des Prozessors (Instruktionssatz, Registeraufbau)
  • Speichern und ihren Realisierungen (Primär- und Sekundärspeicher)
  • Peripheriegeräten (Tastatur, Bildschirm, Schnittstellenbausteine usw.)
42 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Einordnung im Computersystem

Betriebssystemarten

Wir unterscheiden klassisch:

Stapelverarbeitung (batch processing)
Typisches Merkmal ist, dass Programme angestoßen werden, aber ansonsten keine nennenswerte Benutzerinteraktion stattfindet. Die auszuführenden Befehle sind stattdessen in einer Stapeldatei abgelegt, deren Inhalt fortlaufend interpretiert wird. Klassische Großrechnerbetriebssysteme werden auf diese Art und Weise genutzt, z.B. zur Ausführung von Buchhaltungsprogrammen über Nacht.
Time-Sharing-Betrieb
Die zur Verfügung stehende Rechenleistung wird in Form von Zeitscheiben (time slices, time shares) auf die einzelnen Benutzer aufgeteilt mit dem Ziel, dass jeder Benutzer scheinbar den Rechner für sich alleine zur Verfügung hat. Historisch gesehen sind Time-Sharing-Systeme die Nachfolger bzw. Ergänzung der Batch-Systeme mit der Neuerung, dass sie Benutzer interaktiv arbeiten lassen (Dialogbetrieb).
43 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Einordnung im Computersystem

Betriebssystemarten

Echtzeitbetrieb
Die Rechenleistung wird auf mehrere Benutzer oder zumindest Prozesse aufgeteilt, wobei zeitliche Randbedingungen beachtet werden. Oft sind Echtzeitsysteme reaktive Systeme, indem sie auf gewisse Signale aus der Umgebung (Interrupts, Meldungen) möglichst rasch reagieren.

Weitere Unterteilung (modern) von Betriebssystemen nach unterstützter Rechnerstruktur:

  1. Einprozessorsysteme
  2. Multiprozessorsysteme
  3. Verteiltes System
44 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Betriebssystemmodell

Betriebssystemmodell

Es gibt zwei Arten von Betriebssystemmodellen:

  1. Blackbox
  2. Whitebox

bsdp Black- und Whitebox-Betrachtung (Beispiel: Unix)

  • Solange es lediglich um die Systemprogrammierung geht, ist eine Blackbox-Betrachtung des Betriebssystems ausreichend.
    • Nach außen ist damit nur die Programmierschnittstelle sichtbar, jedoch nicht das Systeminnere
    • Dies entspricht einem klassischen Ideal des Software Engineering, das aussagt, dass die Schnittstelle das Maß aller Dinge ist und die Implementierung dahinter beliebig austauschbar sein soll.
  • Aber: Hier ist interessant, unter die »Motorraumhaube« eines Betriebssystems zu gucken (Whitebox).
45 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Entwurf von Betriebssystemen

Entwurf von Betriebssystemen

Anforderungen

  • Fehlerfreiheit des Codes: z.B. durch minimale Komplexität des Quellcodes
  • Einfache Operationen (auf API und für alle Schnittstellen)
  • Erweiterbarkeit (extensibility)
  • Skalierbarkeit (scalability)
  • Orthogonalität: Operationen wirken gleich auf verschiedenartigen Objekten
  • Robuste Betriebsumgebung (»crash-proof«, »reliable«)
  • Einhaltung der Sicherheitsziele (mehrere Anforderungsstufen denkbar)
  • Portabilität (Unterstützung verschiedenartiger Plattformen)
  • Echtzeitfähigkeit (z.B. für Multimedia-Anwendungen)
  • Effizienz (schnelle Diensterbringung, minimaler Ressourcenbedarf)
  • Weiterentwickelbarkeit: Trennung von Strategie (policy) und Mechanismus (mechanism)
46 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Betriebsmodus

Betriebsmodus

Betriebssystemeprogramme sind wie Benutzeprogramme Programme aber mit verschiedenen Rechten und Rollen.

Diese Rechte und Rollen benötigen Hardwareunterstützung

  • Mikrokontroller sind einfache Mikroprozessoren (eingebettete Systeme) und bieten kaum oder gar keine Unterstützung für ein Betriebssystem. Sie bündeln Prozessor, Speicher, und Peripherie 8auf einem Chip)
    • Beispiele sind ESP32, ARM Cortex M0 STM32, Atmel ATMega (aktuell).
  • Einfache Universalmikroprozessoren bieten nicht viel mehr, nur dass hier keine Peripheriegeräte integriert sind.
    • Beispiels sind Motorolla 6800, 68000, Intel 8086 (ca. 1990)
  • Moderne leistungsfähige Universalmikroprozessoren bieten verscheiden Mechanismen um Betriebssysteme zu unterstützen.
    • Beispiele sind ARM v6/7/8, Intel 80386/Pentium usw., Sun Microsystems UltraSPARC usw.
    • MMU (Memory Management Unit) und Mechanis-men für einen privilegierten Betriebsmodus für die Systemsoftware (Privilegiensystem).
47 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Betriebsmodus und Schutz

Betriebsmodus und Schutz

  • Bei Universalmikroprozessoren werden durch das Privilegiensystem kritische Operationen und Zugriffe geschützt, damit ein Programmierfehler in einem Anwendungsprogramm nicht das ganze Computersystem beeinträchtigt.
  • Insbesondere bei Multitasking-Anwendungen und Multiuser-Betrieb (mehrere gleichzeitige Benutzer) ist ein solcher Schutz erforderlich!
  • So wird in den meisten Betriebssystemen der Zugriff auf Hardwareteile mittels dieser Schutzfunktionen dem normalen Anwender (bzw. Benutzerapplikationen) verwehrt.
    • Dazu dienen unterschiedliche CPU-Betriebsarten

Minimales Zweiebenen Modussystem:

  1. Kernmodus (kernel mode, supervisor mode) mit »allen Rechten« für Betriebssystemcode
  2. Benutzermodus (user mode) mit »eingeschränkten Rechten« für Applikationscode
48 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Betriebsmodus und Schutz

Betriebsmodus und Schutz

  Benutzermodus Kernmodus
Ausführbare Maschinenbefehle Begrenzte Auswahl Alle
Hardwarezugriff Nein bzw. nur mithilfe des Betriebssystems Ja, Vollzugriff
Zugriff auf Systemcode bzw. Daten Keiner bzw. nur lesend Exklusiv

Vergleich zwischen Benutzer- und Kernmodus

Im Idealfall werden Schutzmechanismen auch für die Abschottung verschiedener Systemteile untereinander eingesetzt. Die Grenze des Sinnvollen ist allerdings darin zu sehen, dass eine teilweise lahmgelegte Systemsoftware aus Sicht des Anwenders oft nicht besser ist als ein Totalabsturz.

49 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Monolithische Systeme

Monolithische Systeme

Die Struktur dieser Systeme besteht darin, dass sie keine oder nur eine unklare Struktur haben.

bsdp Beispiel für eine monolithische Betriebssystemstruktur

  • Meist handelt es sich um evolutionär gewachsene Betriebssysteme, bei denen es anfänglich unwichtig war, einzelne Teilfunktionen klar mit Schnittstellen voneinander abzugrenzen.
50 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Schichtsysteme

Schichtsysteme

Bei dieser Strukturierungsform sind die Betriebssystemfunktionen in viele Teilfunktionen gegliedert, die hierarchisch auf mehrere Schichten verteilt sind.

bsdp Beispiel einer geschichteten Struktur

  • Die Funktionen einer höheren Schicht bauen strikt nur auf Funktionen einer tieferen Schicht auf.
  • Die erste Schicht könnte eine Hardware-Abstraktionsschicht sein.
  • Die Festlegung der Schichtenstruktur folgt keiner Standardstruktur.
51 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Mikrokernelsysteme

Mikrokernelsysteme

Nur die allerzentralsten Funktionen sind in einem (kleinen) Kernteil zusammengefasst, alle übrigen Funktionen sind als Serverdienste separat realisiert. Nachrichtenbasierte Kommunikation!

bsdp Mikrokern nach dem Client/Server-Prinzip

  • Serverdienste können z.B. Dateidienste, Verzeichnisdienste sein
52 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Mikrokernelsysteme

Mikrokernelsysteme

Der Mikrokern enthält lediglich die vier Basisdienste:

  1. Nachrichtenübermittlung (message passing)
  2. Speicherverwaltung (virtual memory)
  3. Prozessorverwaltung (scheduling)
  4. Gerätetreiber (device drivers).
  • Da ein Großteil des Betriebssystemcodes auf die Benutzerebene (Benutzermodus) verschoben wird, sind überschaubare zentrale Teile des Systems durch den Kernmodus gegen fehlerhafte Manipulationen geschützt.
  • Ebenso ist es nur dem eigentlichen Kern erlaubt, auf die Hardware zuzugreifen.
  • Beansprucht ein Benutzerprozess einen Systemdienst, so wird die Anforderung als Nachricht durch den Mikrokern an den zuständigen Serverprozess weitergeleitet.
  • Entsprechend transportiert der Mikrokern auch die Antwort an den anfordernden Prozess zurück
53 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Multiprozessorsysteme

Multiprozessorsysteme

54 / 55

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A Einführung und Überblick :: Verteilte Betriebssysteme

Verteilte Betriebssysteme

55 / 55