15 Hardware

15.1 Der Bootprozess

Im Bootprozess wird das System vom start in eienen nominalen zustand gebracht, dies geschieht folgendermaßen:
1. Beim Systemstart wird ein Resetsignal an die CPU gesendet. 2. Der IP(Instructionpointer) zeigt auf das BIOS und lädt eine Leseoperation in das Commandregister, im Anschluss wird der IP um eins erhöht. 3. Das BIOS macht zunächst einen Memorytest in dem es auf den Arbeitsspeicher schreibt und das geschriebene wieder ausliest. 4. Nach dem Memorytest kontrolliert es die BUS-Systeme und welche Geräte vorhanden sind. 5. Nachdem das BIOS alle vorhanden Geräte erkannt hat sucht es anhand des MBR(Maste-Boot-Record) nach der Magicnumber die ein boot-fähiges Gerät kennzeichnet, bei mehreren boot-fähigen Geräten wird ein im vorhinein priorisiertes Gerät ausgewählt. 6. Der Code der sich im MBR befindet wird in den Arbeitsspeicher geladen und an hand dieses Codes werden die Blöcke in der Partition identifiziert, in denen der GRUB(Grand unified Bootloader) befindet. 7. Der GRUB wird in den Arbeitsspeicher geladen und liest die Super-Inodes der Partition um die Blöcke zu finden in denen der Kernel sitzt. 8. Der Kernel wird in den Arbeitsspeicher geladen und erhält den IP vom GRUB. 9. Der Kernel lädt benötigte Module nach. 10. Das Root-Filesystem wird gemounted um zugriff auf das Dateisystem zu gewährleisten. 11. Der Kernel führt Systemd aus. 12. Systemd startet Dienste und Prozesse gemäß der Konfiguration in den Runleveln oder der systemd-Unit-Dateien. 13. Systemd startet den Prozesse des Desktop-Managers und dieser startet hintergrundprozesse zur Shellaufbereitung. 14. Nun ist das System betriebsbereit und wartet auf Benutzeranweisungen oder automatisierte Aufgaben.

15.2 BIOS/UEFI

15.2.1 BIOS (Basic Input/Output System):

Das BIOS ist eine Firmware, die in den meisten PCs und früheren Computern verwendet wird.
Es ist verantwortlich für die grundlegende Hardwareinitialisierung und den Startvorgang des Computers.
Das BIOS ist in einem nichtflüchtigen Speicher auf dem Motherboard gespeichert und wird normalerweise aufgerufen, wenn der Computer eingeschaltet wird.

15.2.2 UEFI (Unified Extensible Firmware Interface):

UEFI ist eine moderne Firmware-Schnittstelle, die das traditionelle BIOS ersetzt oder ergänzt.
Im Vergleich zum BIOS bietet UEFI eine erweiterte Funktionalität, darunter Unterstützung für größere Festplatten, schnellere Bootzeiten, eine verbesserte Sicherheit und die Möglichkeit, eine grafische Benutzeroberfläche bereitzustellen.
UEFI unterstützt auch die Ausführung von 64-Bit-Code im Gegensatz zum BIOS, das normalerweise auf 16-Bit-x86-Code beschränkt ist.
UEFI bietet auch eine modulare Architektur, die die Implementierung von Funktionen von Drittanbietern erleichtert und die Firmware-Erweiterbarkeit verbessert.

15.3 Blockgeräte im Linux-System

Blockgeräte sind eine wesentliche Komponente in Linux-Systemen, die für die Speicherung und das Management von Daten verwendet werden. Ein Blockgerät, wie zum Beispiel eine Festplatte oder SSD, ermöglicht das Lesen und Schreiben von Daten in festgelegten Blockgrößen. Diese Blöcke sind die kleinste Einheit des Datenaustauschs auf der Hardware-Ebene, und die Operationen, die der Controller eines Blockgeräts ausführen kann, beschränken sich auf das blockweise Lesen und Schreiben.

15.3.1 Grundprinzipien von Blockgeräten

Die Daten auf einem Blockgerät werden in Blöcken organisiert, deren Größe typischerweise zwischen 512 Bytes und mehreren Kilobytes liegt. Diese Blockgröße ist eine fundamentale Eigenschaft des Geräts, die bestimmt, wie Daten gelesen und geschrieben werden können. Die blockweise Organisation ermöglicht es dem Betriebssystem, effizient mit großen Mengen von Daten umzugehen, indem es diese in handhabbare Einheiten unterteilt.

15.3.2 Verbindung zum Dateisystem

Obwohl Blockgeräte auf einer niedrigen Ebene mit Blöcken arbeiten, benötigen Benutzer und Anwendungen eine flexiblere und verständlichere Struktur, um mit Dateien zu arbeiten. Hier kommt das Dateisystem ins Spiel, das eine Abstraktionsebene über den physischen Blöcken eines Speichergeräts bietet. Im Kontext von Linux-Dateisystemen werden inodes verwendet, um diese Abstraktion zu implementieren.

Inodes sind Datenstrukturen, die Metadaten über Dateien und Verzeichnisse enthalten, wie beispielsweise Berechtigungen, Eigentümerinformationen und die tatsächlichen Datenblöcke, in denen die Inhalte der Dateien gespeichert sind. Obwohl dieses System mit inodes eine flexible Handhabung von Dateien ermöglicht, bleibt die zugrundeliegende Operation auf Blockgeräten das blockweise Lesen und Schreiben.

15.4 Blockdevice & Characterdevice

In Linux bezieht sich ein Block-/Characterdevice auf eine abstrakte Darstellung eines physischen oder virtuellen Geräts, das von einem Betriebssystem verwendet wird, um auf Speichergeräte zuzugreifen. Diese Geräte können sowohl physische als auch virtuelle Speichergeräte sein, wie beispielsweise Festplatten, SSDs (Solid State Drives), USB-Laufwerke, CD-ROMs, DVDs, und sogar virtuelle Speichergeräte, die von Hypervisoren bereitgestellt werden.

Ein Blockgerät behandelt Daten in Blöcken, während ein Zeichengerät Daten als Strom von Zeichen behandelt. Hier sind die Unterschiede zwischen den beiden:

15.4.1 Blockdevice:

Beispiel: Eine Festplatte (/dev/sda) ist ein Blockgerät. Wenn man Daten von der Festplatte liest oder darauf schreibt, erfolgt dies in Blöcken fester Größe, z. B. 512 Bytes oder 4 Kilobytes pro Block.

In der Befehlszeile kann man mit dem Befehl “lsblk” eine Liste der Blockgeräte anzeigen lassen:

lsblk

Dies zeigt eine Liste der blockbasierten Geräte wie Festplatten und Partitionen an.

15.4.2 Characterdevice:

In Linux werden diese Geräte über spezielle Dateien im Verzeichnis /dev dargestellt. Diese Dateien dienen als Schnittstelle zwischen dem Betriebssystem und den physischen oder virtuellen Geräten. Die Verwendung von Block- und Zeichengeräten ermöglicht es dem Betriebssystem, auf eine Vielzahl von Hardwarekomponenten und -ressourcen zuzugreifen und mit ihnen zu interagieren.

Beispiel: Eine Tastatur (/dev/tty0) ist ein Zeichengerät. Wenn man auf der Tastatur tippt, werden die Zeichen sofort einzeln gelesen und können sofort verarbeitet werden, ohne auf einen vollständigen Block von Daten zu warten.

Man kann eine Liste der Zeichengeräte mit dem Befehl “ls /dev” anzeigen lassen:

ls /dev

15.5 Bus Operations

In Linux beziehen sich “Busoperationen” auf die Kommunikations- und Datentransferprozesse zwischen Hardwaregeräten, die über eine Busarchitektur mit dem System verbunden sind. Ein Bus ist ein Kommunikationssystem, das es verschiedenen Hardwarekomponenten ermöglicht, wie Prozessoren, Speichermodule, Speichergeräte und Ein- / Ausgabegeräte miteinander zu interagieren.

Gängige Bustypen in Linux-Systemen sind:

15.6 Vergleich von Massenspeicher und Arbeitsspeicher

Im Kern jedes Computersystems stehen zwei fundamentale Speicherarten: der Massenspeicher (wie Festplatten und SSDs) und der Arbeitsspeicher (RAM). Diese Speichertypen erfüllen unterschiedliche Funktionen und weisen spezifische Charakteristika auf, die für die Arbeitsweise eines Computers entscheidend sind.

15.6.1 Massenspeicher: Blockweiser Zugriff

Massenspeichergeräte sind für die langfristige Datenspeicherung konzipiert. Sie speichern Daten in Blöcken, wobei ein Block die kleinste Einheit ist, die gelesen oder geschrieben werden kann. Diese Blockgröße variiert je nach Speichertechnologie und kann mehrere Kilobytes groß sein. Der blockweise Zugriff bedeutet, dass bei jedem Lese- oder Schreibvorgang mindestens ein ganzer Block bearbeitet wird, auch wenn nur ein kleiner Teil der Daten tatsächlich benötigt wird. Diese Art des Zugriffs optimiert die Speicherung großer Datenmengen und die Effizienz des Datentransfers, kann aber bei kleinen, häufigen Operationen zu Ineffizienzen führen.

15.6.2 Arbeitsspeicher: Zugriff auf Wortbene

Im Gegensatz dazu ermöglicht der Arbeitsspeicher (RAM) einen Zugriff auf Byte- oder Wortebene, was deutlich feingranularere Operationen zulässt. Der RAM ist darauf ausgelegt, Daten temporär zu speichern, auf die der Prozessor (CPU) schnell zugreifen muss. Die Möglichkeit, Daten auf Wortebene zu manipulieren, ist entscheidend, da die CPU sehr kleine, spezialisierte Speicherbereiche namens Register verwendet. Diese Register, die direkt innerhalb der CPU liegen, sind nur in der Lage, sehr kleine Datenmengen – typischerweise die Größe eines Wortes oder eines Doppelwortes – gleichzeitig zu halten und zu verarbeiten. Die Kompatibilität der Zugriffsweise des RAMs mit der Größe dieser Register ist entscheidend für die schnelle Ausführung von Programmen und die Verarbeitung von Anweisungen.

15.6.3 Datentransfer: Von Massenspeicher zu Arbeitsspeicher

Um Daten aus dem Massenspeicher zu verarbeiten, müssen diese zunächst in den Arbeitsspeicher übertragen werden. Dies geschieht blockweise, da der Massenspeicher nur blockweisen Zugriff erlaubt. Nach der Übertragung in den RAM können die Daten dann byte- oder wortweise weiter an die CPU gesendet werden, wo sie in den Registern verarbeitet werden. Diese Übertragungskette von Massenspeicher über Arbeitsspeicher zur CPU ist fundamental für die Funktionsweise moderner Computer.

15.6.4 Zusammenfassung

Der Hauptunterschied zwischen Massenspeicher und Arbeitsspeicher liegt in der Art des Datenzugriffs: Massenspeichergeräte ermöglichen einen blockweisen Zugriff, der für die langfristige Speicherung und Effizienz bei der Verwaltung großer Datenmengen optimiert ist. Der Arbeitsspeicher hingegen erlaubt einen feingranularen Zugriff auf Byte- oder Wortebene, was eine schnelle Datenverarbeitung durch die CPU unterstützt. Die Übertragung von Daten vom Massenspeicher in den Arbeitsspeicher und schließlich zur Verarbeitung in die CPU ist ein Kernprozess, der die Leistung und Effizienz eines Computer systems maßgeblich bestimmt.