Betriebssysteme & Verteilte Systeme: Kernkonzepte erklärt
Eingeordnet in Informatik
Geschrieben am in Deutsch mit einer Größe von 13,38 KB
Speicherbereiche: Code, Stack & Heap erklärt
Code: Der Code-Bereich eines Programms enthält den ausführbaren Code, der vom Prozessor ausgeführt wird. Dieser Bereich ist in der Regel schreibgeschützt, da der Code während der Programmausführung nicht verändert werden sollte. Der Code ist statisch und bleibt im Wesentlichen unverändert, solange das Programm läuft.
Stack: Der Stack ist ein Speicherbereich für die Verwaltung von Funktionsaufrufen, lokalen Variablen und Rücksprungadressen. Er wächst und schrumpft dynamisch mit jedem Funktionsaufruf und dessen Rückkehr. Jede aufgerufene Funktion legt einen neuen Stack-Frame auf dem Stack ab, der nach Beendigung der Funktion wieder entfernt wird.
Heap: Der Heap ist ein dynamischer Speicherbereich, der zur Laufzeit für die Speicherzuweisung verwendet wird. In C wird dieser Bereich zum Beispiel durch Funktionen wie
malloc()
oderfree()
verwaltet. Der Heap wächst und schrumpft je nach Bedarf, wenn Speicher zur Laufzeit angefordert oder freigegeben wird.
Shared Libraries: Vorteile & Funktionsweise
Shared Libraries (dynamische Bibliotheken) sind Bibliotheken, die von mehreren Programmen gleichzeitig verwendet werden können. Im Gegensatz zu statischen Bibliotheken, bei denen der Code direkt in das Programm eingebunden wird, werden bei Shared Libraries nur Verweise auf die Bibliothek in das Programm integriert.
Vorteile:
- Speicherersparnis: Wenn mehrere Programme dieselbe Bibliothek verwenden, wird der Code nur einmal im Speicher geladen, was den Speicherverbrauch reduziert.
- Wartbarkeit: Updates und Fehlerbehebungen in einer Shared Library wirken sich auf alle Programme aus, die diese Bibliothek verwenden, ohne dass die Programme neu kompiliert werden müssen.
- Effizienz: Da Shared Libraries nur bei Bedarf geladen werden, kann dies die Startzeit eines Programms verkürzen.
Position Independent Code (PIC) erklärt
Position Independent Code (PIC) ist Code, der an jeder beliebigen Speicheradresse ausgeführt werden kann, ohne dass er speziell für eine feste Adresse kompiliert werden muss. Dies ist besonders wichtig für Shared Libraries, da diese Bibliotheken an verschiedenen Speicherorten geladen werden können, je nachdem, wie das Betriebssystem den Speicher zuweist.
Vorteil:
- PIC ermöglicht es, Bibliotheken und Code effizient zu teilen, da sie unabhängig von ihrer Position im Speicher sind und zur Laufzeit leicht geladen werden können.
Virtuelle & Physikalische Adressen im Überblick
Virtuelle Adressen: Jeder Prozess erhält vom Betriebssystem einen eigenen virtuellen Adressraum, der von der physischen Hardware (RAM) unabhängig ist. Diese virtuellen Adressen werden durch das Betriebssystem und die Memory Management Unit (MMU) in physikalische Adressen übersetzt.
Physikalische Adressen: Die physikalischen Adressen sind die tatsächlichen Speicheradressen im RAM. Das Betriebssystem verwaltet die Zuordnung zwischen virtuellen und physikalischen Adressen mithilfe von Seitentabellen.
Warum ist das wichtig?
- Der Einsatz virtueller Adressen sorgt für Isolation zwischen Prozessen, wodurch Fehler in einem Prozess nicht direkt andere Prozesse beeinflussen.
- Speichermanagement wird effizienter, da das Betriebssystem freien Speicher dynamisch verwalten kann.
Paging: Funktionsweise der Speicherverwaltung
Paging ist ein Speicherverwaltungsmechanismus, bei dem der physische Speicher in gleich große Blöcke, sogenannte Pages, unterteilt wird. Ein Prozess wird in Page Frames geladen, die ebenfalls in gleich große Blöcke unterteilt sind.
- Virtueller Adressraum: Der virtuelle Speicher eines Prozesses wird in Pages unterteilt.
- Physischer Adressraum: Der physische Speicher wird in Page Frames unterteilt.
- Das Betriebssystem verwendet eine Seitentabelle (Page Table), um die Zuordnung zwischen virtuellen und physischen Seiten zu verwalten.
On-Demand Paging bedeutet, dass Seiten nur dann in den physischen Speicher geladen werden, wenn der Prozess darauf zugreifen möchte. Dies hilft, den Speicher effizient zu nutzen und nur die tatsächlich benötigten Daten zu laden.
Buddy-Allocator: Effiziente Speicherverwaltung
Ein Buddy-Allocator ist ein Speichermanagement-Algorithmus, der den Speicher in Blöcke unterschiedlicher Größe unterteilt. Wenn Speicher angefordert wird, sucht der Buddy-Allocator nach einem geeigneten Block und teilt ihn, wenn nötig, weiter, um den benötigten Platz zu schaffen.
- Der Hauptvorteil des Buddy-Allocators liegt in seiner Effizienz, da er eine einfache Methode zur Verwaltung von Blöcken unterschiedlicher Größe bietet und Speicherfragmentierung reduziert.
- Wenn ein Block freigegeben wird, prüft der Buddy-Allocator, ob der benachbarte Block ebenfalls frei ist. Wenn dies der Fall ist, werden die beiden Blöcke zu einem größeren Block zusammengeführt.
Modulare Kernel (z.B. Linux): Flexibilität
Ein modularer Kernel ist ein Kernel, der in Module unterteilt ist, die bei Bedarf geladen oder entfernt werden können, ohne einen Neustart des gesamten Kernels. Der Vorteil eines modularen Kernels ist die Flexibilität und Erweiterbarkeit.
- In Linux können Kernel-Module Funktionen hinzufügen, wie z. B. Treiber, Dateisysteme oder Netzwerkprotokolle, ohne dass der Kernel neu kompiliert werden muss.
- Dies ermöglicht es dem System, sich an die Bedürfnisse der Hardware und der Anwendung anzupassen, ohne unnötige Funktionen zu laden.
Das /proc-Dateisystem in Linux: Zweck & Nutzung
Das /proc-Verzeichnis in Linux ist ein virtuelles Dateisystem, das Informationen über den aktuellen Zustand des Systems und laufende Prozesse enthält. Es handelt sich nicht um tatsächliche Dateien, sondern um eine Schnittstelle zur Laufzeitumgebung des Kernels.
- Zum Beispiel zeigt
/proc/cpuinfo
Details zur CPU, und/proc/meminfo
gibt Informationen über den Speicher des Systems an. - Auch Informationen zu einzelnen Prozessen sind unter /proc/[PID] zu finden, z. B.
/proc/123/status
, das Details über den Prozess mit der PID 123 enthält.
Dateisysteme: Was ist ein Inode?
Ein Inode ist eine Datenstruktur in einem Dateisystem, die Metadaten einer Datei speichert, wie z. B. die Dateigröße, Berechtigungen, Besitzer, Zeitstempel und Verweise auf die Datenblöcke, die die Datei selbst enthalten.
- Inodes sind zentral für die Dateispeicherung und ermöglichen es, eine Datei effizient zu verwalten.
- Jedes Dateisystem hat eine begrenzte Anzahl an Inodes. Sind diese erschöpft, kann das Dateisystem keine neuen Dateien mehr anlegen, auch wenn noch Speicherplatz verfügbar ist.
Hard Links vs. Soft Links (Symbolische Links)
- Hard Links: Ein Hard Link ist ein zusätzlicher Dateiname, der auf denselben Inode verweist. Mehrere Hard Links zu einer Datei existieren gleichzeitig und haben denselben Inhalt. Wenn einer gelöscht wird, bleibt die Datei bestehen, solange der letzte Hard Link nicht gelöscht ist.
- Soft Links (symbolische Links): Ein Soft Link ist eine Datei, die auf den Pfad einer anderen Datei verweist. Sie ist wie eine Verknüpfung und kann auch auf nicht existierende Dateien verweisen. Soft Links können Dateien über Verzeichnisse hinweg referenzieren, während Hard Links dies nicht können.
Lokale & Netzwerk-Dateisysteme (NFS) im Vergleich
Lokale Dateisysteme: Ein lokales Dateisystem befindet sich auf der lokalen Festplatte oder einem anderen physischen Speichermedium und ermöglicht den Zugriff auf Dateien und Verzeichnisse, die auf diesem Medium gespeichert sind.
NFS (Network File System): NFS ist ein Protokoll, das es einem Computer ermöglicht, Dateien über ein Netzwerk hinweg zuzugreifen, als ob sie auf einem lokalen Laufwerk gespeichert wären. Es wird häufig in verteilten Systemen verwendet, um Dateizugriffe zwischen verschiedenen Rechnern zu ermöglichen.
Unterschiede:
- Lokale Dateisysteme sind auf ein einzelnes Gerät beschränkt, während NFS den Dateizugriff über mehrere Systeme hinweg ermöglicht.
- NFS benötigt Netzwerkverbindungen, während lokale Dateisysteme ohne Netzwerk auskommen.
Verteilte Systeme: Definition, Beispiele & Vorteile
Ein verteiltes System ist ein System, das aus mehreren miteinander verbundenen, aber unabhängigen Computern besteht, die zusammenarbeiten, um eine gemeinsame Aufgabe zu erfüllen. Diese Systeme bieten oft Skalierbarkeit und Fehlertoleranz und ermöglichen es, Ressourcen über mehrere Maschinen hinweg zu verteilen.
Beispiele für verteilte Systeme:
- Cloud-Computing-Infrastrukturen wie Amazon AWS oder Google Cloud.
- Datenbanken, die über mehrere Server hinweg verteilt sind (z. B. NoSQL-Datenbanken wie Cassandra).
Vorteile:
- Verteilte Systeme können durch Lastverteilung und Parallelisierung die Verarbeitungsgeschwindigkeit erhöhen.
- Sie bieten Fehlertoleranz, da die Ausfälle einzelner Komponenten das gesamte System nicht zum Stillstand bringen müssen.
MPI (Message Passing Interface): Grundkonzept
MPI (Message Passing Interface) ist ein Standard für die Kommunikation zwischen Prozessen in verteilten Systemen. Die Idee hinter MPI ist es, eine effiziente und flexible Methode für die Kommunikation und den Datenaustausch zwischen Prozessen auf verschiedenen Rechnern bereitzustellen, die Teil eines Clusters oder Netzwerks sind.
- Message Passing: MPI basiert auf der Idee, dass Prozesse Informationen (Nachrichten) miteinander austauschen, um Aufgaben zu koordinieren und Daten zu teilen.
- Verteilung: Jeder Prozess im System hat eine eigene Instanz und einen eigenen Adressraum, der nicht mit anderen Prozessen geteilt wird.
Verwendung:
- MPI wird häufig in High-Performance Computing (HPC)-Umgebungen eingesetzt, um Programme parallel über viele Rechner hinweg auszuführen.
Cluster-Bedienung: Management & Job-Scheduling
Ein Cluster ist eine Sammlung von Computern, die miteinander verbunden sind und als ein einziges System arbeiten, um große Aufgaben effizient zu bearbeiten. Die Bedienung eines Clusters erfordert in der Regel:
- Cluster-Management-Software: Programme wie SLURM, Hadoop oder Kubernetes werden verwendet, um den Cluster zu verwalten und Aufgaben auf die verfügbaren Knoten zu verteilen.
- Job-Scheduling: Cluster-Systeme nutzen Job-Scheduler, um Berechnungen auf verschiedene Maschinen zu verteilen und die Systemressourcen effizient zu nutzen.
Beispiel für Cluster-Management:
- Ein HPC-Cluster könnte ein wissenschaftliches Forschungsprojekt durchführen, bei dem Daten auf mehreren Knoten bearbeitet und analysiert werden.
FreeRTOS vs. Linux: Unterschiede & Anwendungsbereiche
FreeRTOS ist ein Echtzeitbetriebssystem (RTOS), das speziell für Embedded-Systeme entwickelt wurde. Im Vergleich zu Linux fehlen FreeRTOS bestimmte Funktionen und Merkmale, da es für den Betrieb auf ressourcenbeschränkten Geräten und die schnelle Reaktion auf Echtzeitanforderungen optimiert ist.
Was fehlt im Vergleich zu Linux?
- Prozesse: FreeRTOS verwendet Tasks anstelle von Prozessen und ist darauf ausgelegt, Echtzeitaufgaben mit minimaler Latenz auszuführen.
- Speichermanagement: FreeRTOS verwendet kein komplexes virtuelles Speichermanagement wie Linux und benötigt daher keine MMU (Memory Management Unit).
- Multitasking: FreeRTOS hat einfache Mechanismen für Multitasking (z. B. Preemption und Scheduling), bietet aber nicht die umfangreiche Verwaltung und Optimierung wie Linux.
- Dateisysteme: FreeRTOS enthält keine nativen Dateisysteme und unterstützt keine komplexen Dateisystemoperationen wie Linux.
Wann wird FreeRTOS verwendet?
- FreeRTOS ist ideal für Embedded-Systeme, in denen niedriger Ressourcenverbrauch und deterministische Reaktionen auf Ereignisse erforderlich sind, wie z. B. in Mikrocontrollern und IoT-Geräten.