Linux Kernel (PDF)
Document Details
Uploaded by RevolutionaryFern2779
Hochschule Esslingen
2024
Prof. Dr.-Ing. Rainer Keller, Prof. Dr. Dennis Grewe
Tags
Summary
This document provides a presentation on operating systems, specifically focusing on the Linux kernel. It covers various concepts, including different types of kernel architectures, and includes a quiz for review purposes.
Full Transcript
BETRIEBSSYSTEME (BS) V. LINUX KERNEL PROF. DR.-ING. RAINER KELLER PROF. DR. DENNIS GREWE 1 AGENDA l Was ist der Linux Kernel? l Wie wird der Linux Kernel Konfiguriert? l Welche Optionen sind notwendig bei der Konfiguration eines Linux Kernel? l...
BETRIEBSSYSTEME (BS) V. LINUX KERNEL PROF. DR.-ING. RAINER KELLER PROF. DR. DENNIS GREWE 1 AGENDA l Was ist der Linux Kernel? l Wie wird der Linux Kernel Konfiguriert? l Welche Optionen sind notwendig bei der Konfiguration eines Linux Kernel? l Was sind weitere Möglichkeiten der Konfiguration? 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 2 ZIELE l Wissen was Sie für die Übersetzung eines Linux Kernel benötigen l Sich in der Linux Kernel Konfiguration zurechtfinden l Sich in den Linux Kernel Source-Dateien zurechtfinden l Selber einen Linux Kernel übersetzen 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 3 QUIZ ZUR WIEDERHOLUNG https://partici.fi/54815345 [Bild von vecstock auf Freepik] 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Systemaufrufe & Interrupts 4 BETRIEBSSYSTEM KERNELS Quelle: [Image by 8photo on Freepik] 5 WIEDERHOLUNG: WAS IST DER OS KERNEL? l Der „Kernel“ eines Betriebssystems ist der zentrale Bestandteil des Systems, der als Vermittler zwischen der Hardware und den darauf laufenden Softwareanwendungen dient. l Er übernimmt wesentliche Aufgaben wie die Speicherverwaltung, Prozessverwaltung, Gerätesteuerung und die Vermittlung von Anfragen zwischen Hardware und Software. l Der Kernel ermöglicht es Programmen auf Hardware zuzugreifen, ohne direkt mit dieser zu interagieren, was die Stabilität und Sicherheit des Systems erhöht. 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 6 KLASSEN VON KERNEL STRUKTUREN l In der Literatur wird zwischen den folgenden Kernel Strukturen unterschieden: l Monolithischer Kernel l Microkernel l Hybrid Kernel l Exokernel l Nanokernel l Modular Kernel 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 7 DER MONOLITHISCHE KERNEL l Im monolithischen Kernel sind alle Betriebssystemdienste in einem großen Adressraum organisiert. Alle Dienste (z.B.: Dateisystem, Gerätetreiber, etc.) sind im Kernel-Space integriert. l Vorteile: Schnelle Performance mit minimalem Kommunikationsaufwand zwischen den Prozessen, und einfache Integration / Zugriff auf Hardwareressourcen l Nachteil: Große Codebasis, schwieriger zu Warten; Fehler im Kernel kann ganzes System zum Absturz bringen. l Beispiele: Linux, UNIX 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 8 DER MICROKERNEL l Der Microkernel bildet einen minimalistischen Kernel ab, der nur die essentiellen Mechanismen wie Memory Management, Prozesskommunikation und Low-level Hardware unterstützt. Die meisten Dienste (Dateisystem, Gerätetreiber, etc.) sind im User-Space umgesetzt. l Vorteile: kleinere Codebasis; einfacher zu Warten; Robuster gegenüber Fehler l Nachteil: geringere Performance, da Kommunikation zwischen User-Space Diensten und Kernel-Space Mechanismen vorliegt l Beispiele: Minix, QNX 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 9 DER HYBRID KERNEL l Der Hybrid Kernel vereint Aspekte des monolithischen Kernel und Microkernel. Ausgewählte Dienste laufen im Kernel-Space um Performance zu erreichen. l Vorteile: Bietet gute Balance zwischen Performance, Modularität und Systemsicherheit. l Nachteil: Komplexer in der Entwicklung und Wartung im Vergleich zu “reinen“ Monolithen oder Microkernel l Beispiele: Window, macOS 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 10 GEGENÜBERSTELLUNG KERNEL ARCHITEKTUREN l Gegenüberstellung der Kernel Architekturen Monolithischer Kernel, Microkernel und Hybrid Kernel: Quelle: [Image by Golftheman in wikibooks] 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 11 DER EXOKERNEL l Der Exokernel ist ein minimalistischer Kernel der Anwendungen die direkte Kontrolle über die Hardwareressourcen gibt. l Vorteile: Hohe Performance, da Abstraktionsschichten fehlen und Anwendungen direkt mit der Hardware interagieren. l Nachteil: Komplex in der Entwicklung da wenig Abstraktion vorliegt l Beispiele: MIT‘s Exokernel 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 12 DER NANOKERNEL l Der Nanokernel ist ein kleinere Version des Microkernel der geringe Basisfunktionalität wie Prozesskommunikation und Interrupt Management realisiert. l Vorteile: Sehr leichtgewichtig und minimalistisch; geeignet für Embedded-Geräte l Nachteil: Hoher Aufwand in der Entwicklung und Anpassung an Geräte l Beispiele: EPOC Kernel von Symbian (z.B.: Nokia Telefone wie 3210) 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 13 DER MODULAR KERNEL l Der Modulare Kernel ist grundlegend ein monolithischer Kernel, der jedoch das Nachladen von Funktionalität zur Laufzeit mittels Module ermöglicht, ohne das System neustarten zu müssen l Vorteile: Sehr flexibles System um Funktionalität nachzuladen, ohne Neustart; Reduzierung des Speicherverbrauchs, da nur geladenen Module Ressourcen verbrauchen. l Nachteil: Erbt weiterhin die Komplexität von Monolithischen Kernel l Beispiele: Linux (moderne Versionen mit Linux Kernel Modules) 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 14 LINUX HISTORIE 15 1991: LINUS TORVALDS l Linus Torvalds, ein 21-jähriger Informatik Student aus Helsinki, kauft einen (teuren) PC-AT mit Intel i386 Prozessor. Er möchte Schutzmechanismen des neuen Prozessors ausprobieren. l Er programmiert einen kleinen Bootloader, der zwei Prozesse startet, wechselseitig ausführt und diese „a“ und „b“ ausgeben. l Er braucht dafür ein: l Compiler: er nutzte gcc; einen C Compiler der GNU Free Software Foundation l Host Betriebssystem: zur Ausführung der Programme auf dem i386; er nutzt Minix, einen UNIX-Clone von Prof. Andrew Tanenbaum Uni Amsterdam 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 16 NOTWENDIGE VORENTWICKLUNGEN l 1985: Richard Stallman gründet die Free Software Foundation (FSF) l 1991: Richard Stallmann gründet die GNU Public License (GPL), sowie die Software GNU Hurd, GNU Emacs, GNU C Compiler l 1991: Prof. Andrew S. Tanenbaum entwickelt für seine Betriebssystemvorlesung an der Freien Universität Amsterdam das MINIX-OS 2.0. l Das OS wird als open source herausgegeben (~12k Lines of Code) l Änderungen sind aber restriktiv l MINIX basiert auf einem Micro-Kernel Ansatz 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 17 ZURÜCK ZU LINUS TORVALDS… l Eigentlich will Linus nur ein kleines Terminalprogramm entwickeln, um sich auf den Servern seiner Universität einzuloggen l Aber nach 4 Monaten, am 25.08.1991, sendet Linus eine Email an die Newsgroup des MINIX Teams, dass er einen freien MINIX Clone entwickelt: „I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones... I've currently ported bash(1.08) and gcc(1.40), and things seem to work.... It is NOT portable (uses 386 task switching etc), and it probably never will support anything other than AT-harddisks, as that's all I have L... It's the segmentation that makes it REALLY 386 dependent (every task has a 64Mb segment for code & data - max 64 tasks in 4Gb. Anybody who needs more than 64Mb/task - tough cookies)... Unlike minix, I also happen to LIKE interrupts, so interrupts are handled without trying to hide the reason behind them. Quelle: [Link zur Email] 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 18 DER ERFOLG VON LINUX … l Gründe für den Erfolg von Linux sind: l Mit Linux Torvalds steht eine (diskussions-) starke Persönlichkeit der Entwicklung vor, der aber l frühzeitig Vertraute und Mitstreiter akzeptiert und einbindet, und l es versteht, auch konträre Entwicklungsziele mit zu berücksichtigen! l Ein Zitat über Linus´ Einstellung (hier Security Bugs): „I personally consider security bugs to be just 'normal bugs'. I don't cover them up, but I also don't have any reason what-so-ever to think it's a good idea to track them and announce them as something special... One reason I refuse to bother with the whole security circus is that I think it glorifies – and thus encourages – the wrong behavior. It makes 'heroes' out of security people, as if the people who don't just fix normal bugs aren't as important. In fact, all the boring normal bugs are way more important, just because there's a lot more of them. I don't think some spectacular security hole should be glorified or cared about as being any more 'special' than a random spectacular crash due to bad locking.“ Quelle: [Link zum Interview] 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 19 LINUX RELEASES l 09.1991 Linux v0.01 10.239 Lines-of-code (LOC) l 12.1991 Linux v0.11 (ohne MINIX) l 02.1991 Linux v0.12 unter GPL l 03.1991 X Windows System ~40k LoC 20k Benutzer l 03.1994 Linux v1.0 176.250 LoC 100k Benutzer l 03.1995 Linux v1.2 310.950 LoC l 06.1996 Linux v2.0 716.119 LoC l 01.1999 Linux v2.2 1.800.847 LoC l 01.2001 Linux v2.4 3.377.902 LOC l 12.2003 Linux v2.6 5.929.913 LOC, bis 2011, dann 3.0-Schema l 01.2012 Linux v3.2 14.998.651 LOC l 10.2015 Linux v4.2.3. 18.756.142 LOC l 11.2019 Linux v5.8.3 24.711.894 LOC l 02.2022 Liunx v5.16.11 29.086.702 LOC (Unser Stable-Kernel) l 11.2022 Linux v6.1 ~28.000.000 LOC 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 20 LINUX WACHSTUM l Woran lag das immense Wachstum? l Vor allem an neuen Prozessorarchitekturen, welche die Entwicklung von neuen Treibern benötigten l Open Source ermöglichte es interessierten Einzelentwickler sich am Projekt zu beteiligen l Entwickler die MINIX nicht toll fanden und es in Linux besser machen wollten l Studierende & Lehrende an Universitäten und Forschungseinrichtungen die ein freies und offenes Betriebssystem nutzen wollten 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 21 LINUX TIMELINE Quelle: [Link zur Historie] 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 22 ÜBERSICHT: LINUX KERNEL l Die Struktur des Linux Kernel hat sich seit Beginn nicht geändert: l documentation/ (Alles über Linux) l arch/ (Architektur-abhängige Dateien, z.B. x86) l drivers/ (Alle Low-Level Treiber für Hardware!!!) l fs/ (Schnittstelle und Code für Filesysteme!) l include/ (Alle C-Header Dateien) l init/ (Einsprung nach dem Booten: start_kernel) l kernel/ (Architektur-unabhängige Schnittstellen) l mm/ (Memory Management Schnittstelle) l net/ (Netzwerk Schnittstelle – ohne Treiber) l Wir werden uns Interrupts und Scheduler unter kernel anschauen l Aber zunächst wollen wir den Linux-Kernel übersetzen. 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 23 LINUX KERNEL BAUEN Quelle: [Image by freepik] 24 VORAUSSETZUNGEN l Um den Linux Kernel zu übersetzen und auszutauschen benötigen wir folgende Werkzeuge: l Einen Compiler zur Übersetzung des Programmcodes l Ein Build-Tool um den Kernel zu bauen (make) l Ein Tool um den gebauten Kernel zu installieren (update-grub) l Je nach “Geschmack“ weitere unterstützende Tools: l Ncurses l GTK+ und mehr l QT und andere (z.B. g++ Compiler) 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 25 HILFESTELLUNG l Auf dem GitLab Server der HS Esslingen finden Sie eine Schrittweise Anleitung zum Konfigurieren und Bauen eines Linux Kernels. l https://gitlab.hs-esslingen.de/dgrewe/betriebssysteme 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 26 VORAUSSETZUNGEN (II) l Abhängigkeiten installieren: l $ sudo apt-get update↵ l $ sudo apt-get install build-essential libncurses-dev bison flex libssl- dev libelf-dev↵ l Linux Kernel-Quellcode herunterladen und entpacken l $ wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.10.1.tar.xz↵ l $ tar -xvf linux-5.10.1.tar.xz↵ l $ cd linux-5.10.1↵ 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 27 LINUX KERNEL ÜBERSETZEN MITTELS MAKE l Die “Eigenschaften“ von Linux werden konfiguriert. l Das Tool make bietet eine Möglichkeit den Linux-Kernel zu übersetzen: make help↵ (Zeigt Hilfe zu Make-Parametern an!) make config↵ (Abfrage aller Parameter, erzeugt.config) make oldconfig↵ (basierend auf einer.config, neue abfragen) make listnewconfig↵ (zeigt neue Parameter an) make all↵ (Baut Kernel-Datei/Image und alle Module) make modules_install↵ (Installiert Kernel-Module unter /lib) make install↵ (Installiert Kernel-Image unter /boot) make firmware_install↵ (Das selbe evtl. mit neuerer Firmware) l Allerdings beschreibt dies einen sehr mühsamen Weg der Konfiguration… 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 28 LINUX KERNEL CONFIG MIT GUI: QT l Hierfür braucht Ubuntu noch: l sudo apt-get install libqt4-dev l sudo apt-get install g++ 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 30 LINUX KERNEL MENUCONFIG – UNSERE WAHL l Hierfür braucht man noch: l sudo apt-get install libncurses5-dev l sudo make menuconfig 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 31 ÜBERBLICK: LINUX KERNEL MENUCONFIG l Bei der Auswahl der Optionen sollte folgendes bei der Eingabe beachtet werden: l [ ] ist nicht ausgewählt l [*] ist ausgewählt und wird in den Kernel übersetzt (einkompiliert) l ist ausgewählt, so wird das Modul übersetzt (nachladbar!) l ( ) eine frei wählbare Option (Text oder eine Zahl) l --> ein weiteres Menü folgt (mit Unteroptionen) l Beachten Sie: Ein Kernel entälht ~5000 Optionen 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 32 ÜBERBLICK: LINUX KERNEL MENUCONFIG l Mit Tabulator und Cursortaste kann zwischen den Optionen und Feldern navigiert werden. Weiter wichtige Kommandos l / Suche nach einer Option (wie vi & less) l H (Help): liefert einen Hilfetext zur Option l Y (Yes): selektiert/bestätigt eine Option l N (No): deselektiert/wählt eine Option ab l M (Module): wählt die Option als Modul (nachladbar) aus l E (ESC): Exit 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 33 AI MACHEN SIE AM RECHNER MIT HANDS-ON TIME LINUX KERNEL ÜBERSETZEN Quelle: [Image by Freepik] 34 LINUX KERNEL MENUCONFIG (I) l Starten Sie die Ubuntu VM l Loggen Sie sich als User „test“ ein (pw: „test“) l Starten Sie ein Terminal (CTRL + T) l Werden Sie „root“ user l $ sudo bash (sudo = „superuser do“) l Passwort für User „test“ eingeben l Die Kernel-Quellen liegen unter l $ cd /usr/src/ l $ cd linux-XX.YY.ZZ! l Es gibt schon eine.config-Datei! 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 35 LINUX KERNEL MENUCONFIG (II) l Erstellen/Machen Sie die.config aus der aktuell laufenden Konfiguration: l $ make oldconfig l Nun können Sie eine neue Konfiguration erstellen / umkonfigurieren: l $ make menuconfig (Ncurses Oberfläche) l Oder mittels QT Oberfläche (falls QT4-Bibliothek installiert): l $ make xconfig (QT Oberfläche) l Such Sie die Option für das Dateisystem EXT4 … l Speichern Sie Ihre.config-Datei beim Beenden l Wie viele Zeilen hat Ihre.config-Datei? (Hint: wc…) 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 36 LINUX KERNEL ÜBERSETZEN (I) l Würden wir den Kernel mit der aktuell erstellten Konfiguration übersetzen, so würde dies eine Ewigkeit dauern! l Unser Filesystem ist zwar schnell, aber bei vielen parallelen „builds“ wäre es sehr langsam l Debian hat alle möglichen Treiber und Optionen aktiviert! l Kernel-Debugging und andere Optionen sind ebenfalls aktiviert, die uns (und unter einer VM) nicht interessieren … l Modifizierte Konfiguration: l $ make localmodconfig # erzeugt.config die nur die momentan geladenen Module aktiviert l $ make localyesconfig # erzeugt.config die alle momentan geladenen Module fest in den Kern kompiliert! Keine weiteren Module l à Kleinerer Kern, weniger Module, kürzere „build“ Zeit 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 37 LINUX KERNEL ÜBERSETZEN & INSTALLIEREN (II) l Nun können Sie das „Kernel-Abbild“/Image und alle Module bauen und installieren l $ make all install modules_install l $ make V=1 all install modules_install # v = verbose; liefert Ausgaben l Mit update-grub machen Sie den neuen Kernel dem Boot-Manager (hier: grub) bekannt l Schreiben Sie auf wie groß die Images in /boot sind!? l Geben Sie sich eine Liste aller geladenen Module auf der Konsole aus: l $ lsmod # (Liste aller derzeit geladenen Module) l Bitte schauen Sie nach, welche Systemprogramme es noch für Module gibt! 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 38 LINUX KERNEL BOOTEN / STARTEN l Zuletzt wollen wir unseren Kernel booten / starten. l Dazu starten wir die Virtuelle Maschine neu (reboot / restart) l Im Boot-Manager (hier: grub) wählen wir den neu übersetzten Kernel aus. l Fragen: l Welche Module sind nach dem Einloggen geladen? Überprüfen Sie dies (Hinweis: lsm…). l Welche Module sind überflüssig übersetzt worden und könnten aus der.config rausfliegen? 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Linux Kernel 39 ZUSAMMENFASSUNG l Kennenlernen des Linux Kernel und dessen Historie l Kennenlernen der Möglichkeiten zur Konfiguration des Linux Kernels l Hands-on Linux Kernel übersetzen (menuconfig), installieren und starten 01.10.2024 Prof. Dr. Dennis Grewe | Modul Programmieren SWB/TIB 40