Ist das Programmieren nur ein Handwerk?
Was ist ein Betriebssystem?
Das „denkt” die KI zu den Worten „Operating System”:
Was fĂĽr Abstraktionen gibt es in einem Betriebssystem?
(Dies ist keine abschlieĂźende Liste)
Aber wie unterscheiden wir die Instruktionen von bspw. Firefox und von Thunderbird? 🤔
Zwei beispielhafte Definitionen [1]:
An instance of a program running on a computer.
A program in execution.
Aus unserer Sicht Unterteilung der Geräte in drei Kategorien:
(Seite 506, [1])
(Nicht alle Geräte passen in diese Klassen.)
(Wenn der Arbeitsspeicher voll ist, wird auf die Festplatte ausgelagert. Siehe swap unter Linux oder page file unter Windows.)
Sind persistente Speicher → kein Auffrischen nötig
Beispiele: Festplatten oder Solid State Disks (SSD)
Dient als Ablage fĂĽr groĂźe Mengen
Kennt nur Spuren und Sektoren
(512 Byte oder 4k)
Zugriff erfolgt Sektor-weise:
„Lese Sektor 4711 und 4712”
Dateisysteme strukturieren Inhalt von Geräten in Verzeichnisse(/Ordner) und Dateien
Schaffen Abbildung von Dateien zu Sektoren (und Spuren)
Beispiele: EXT4, NTFS, FAT32, …
Kennt Dateien (und Verzeichnisse)
Zugriff erfolgt Byte-weise:
„Lese 30 Byte an Stelle 42”
(Siehe Kapitel 9 – Dateioperationen)
malloc()
/free()
bzw. new
/delete
allozieren und geben Speicher frei
Betriebssystem verwaltet die o. g. Anfragen
Bei Erfolg blendet es den neuen Speicher im virtuellen Adressraum des Prozesses ein
→ „Es wird ein neuer Pfeil gezogen.” (siehe Abb.)
(In Wirklichkeit geschieht die Anfordung mit brk()
an das Betriebssystem. Die Funktionsaufrufe werden durch die libc
bzw. libstdcpp
verwaltet.)
Aufruf des Compilers: g++ -Wall -o hello.elf main.cpp hello.cpp
-Wall
: Zeige alle Warnungen an-o
: Schreibe die Ausgabe nach hello.elf
main.cpp hello.cpp
: Die Eingabe(C++-Name-Mangling wird hier ignoriert.)
(Bitte nicht mit dem statischen und dynamischen Binden bei virtuellen Funktionen verwechseln – siehe Kapitel 9.)
main()
-Funktion im Programmmain()
steht in der Datei main.cpp
, wird aber nicht mit angegebenBeispiel fĂĽr die Liste an dynamisch-geladenen Bibliotheken:
al@ganymed:~/coding$ ldd dyn.elf
linux-vdso.so.1 (0x00007f50f06a2000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f50f0400000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f50f020a000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f50f0124000)
/lib64/ld-linux-x86-64.so.2 (0x00007f50f06a4000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f50f00f7000)
Datei | Größe (Bytes) | Größe (k/M Bytes) |
---|---|---|
dyn.elf |
16568 | ~17kBytes |
static.elf |
2263288 | ~2,2MBytes |
g++ -Wall -o dyn.elf hello.cpp main.cpp
g++ -Wall -static -o static.elf hello.cpp main.cpp
Was haltet Ihr von diesem Kapitel 12a „Maschinenraum”?