<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Userspace</id>
	<title>Userspace - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Userspace"/>
	<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Userspace&amp;action=history"/>
	<updated>2026-05-14T19:32:21Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.ixheim.de/index.php?title=Userspace&amp;diff=66828&amp;oldid=prev</id>
		<title>Maximilian.pottgiesser: Die Seite wurde neu angelegt: „&lt;pre&gt; # Linux Architektur – Userspace, Kernel Space &amp; Hardware  ``` ╔════════════════════════════…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Userspace&amp;diff=66828&amp;oldid=prev"/>
		<updated>2026-02-12T09:16:43Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „&amp;lt;pre&amp;gt; # Linux Architektur – Userspace, Kernel Space &amp;amp; Hardware  ``` ╔════════════════════════════…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# Linux Architektur – Userspace, Kernel Space &amp;amp; Hardware&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
╔════════════════════════════════════════════════════════════════════════════╗&lt;br /&gt;
║                                                                            ║&lt;br /&gt;
║                            USERSPACE                                       ║&lt;br /&gt;
║                    (Ring 3 – unprivilegiert)                               ║&lt;br /&gt;
║                                                                            ║&lt;br /&gt;
║   Alles was der Benutzer sieht und womit er arbeitet.                     ║&lt;br /&gt;
║   Programme hier haben KEINEN direkten Zugriff auf Hardware.              ║&lt;br /&gt;
║   Jeder Zugriff muss über den Kernel laufen.                              ║&lt;br /&gt;
║                                                                            ║&lt;br /&gt;
║  ┌─────────────────────────────────────────────────────────────────┐       ║&lt;br /&gt;
║  │                    Benutzer-Anwendungen                         │       ║&lt;br /&gt;
║  │                                                                 │       ║&lt;br /&gt;
║  │  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────────────┐  │       ║&lt;br /&gt;
║  │  │ Firefox  │ │ Apache   │ │ Terminal │ │ Datenbank (MariaDB)│  │       ║&lt;br /&gt;
║  │  └──────────┘ └──────────┘ └──────────┘ └───────────────────┘  │       ║&lt;br /&gt;
║  │  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────────────┐  │       ║&lt;br /&gt;
║  │  │ SSH-     │ │ Python-  │ │ systemd  │ │ Monitoring        │  │       ║&lt;br /&gt;
║  │  │ Server   │ │ Skript   │ │ (init)   │ │ (Zabbix Agent)    │  │       ║&lt;br /&gt;
║  │  └──────────┘ └──────────┘ └──────────┘ └───────────────────┘  │       ║&lt;br /&gt;
║  └─────────────────────────────────────────────────────────────────┘       ║&lt;br /&gt;
║                                    │                                       ║&lt;br /&gt;
║  ┌─────────────────────────────────┼───────────────────────────────┐       ║&lt;br /&gt;
║  │              System-Bibliotheken │ (z.B. glibc)                 │       ║&lt;br /&gt;
║  │                                 │                               │       ║&lt;br /&gt;
║  │  Übersetzen Programmaufrufe     │                               │       ║&lt;br /&gt;
║  │  in System Calls                │                               │       ║&lt;br /&gt;
║  │                                 │                               │       ║&lt;br /&gt;
║  │  Beispiel:                      │                               │       ║&lt;br /&gt;
║  │  fopen(&amp;quot;datei.txt&amp;quot;) ──────► open() System Call                  │       ║&lt;br /&gt;
║  │  printf(&amp;quot;Hallo&amp;quot;)   ──────► write() System Call                  │       ║&lt;br /&gt;
║  │  malloc(1024)       ──────► brk()/mmap() System Call            │       ║&lt;br /&gt;
║  └─────────────────────────────────┼───────────────────────────────┘       ║&lt;br /&gt;
║                                    │                                       ║&lt;br /&gt;
║                                    │ System Calls                          ║&lt;br /&gt;
║                                    │ (die EINZIGE Tür zum Kernel)          ║&lt;br /&gt;
║                                    ▼                                       ║&lt;br /&gt;
╠══════════════════════════════════════════════════════════════════════════╗  ║&lt;br /&gt;
║░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░║  ║&lt;br /&gt;
║░░░░░░░░░░░░░░░░░░░░░ SYSTEM CALL INTERFACE ░░░░░░░░░░░░░░░░░░░░░░░░░░░║  ║&lt;br /&gt;
║░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░║  ║&lt;br /&gt;
║░░  open() · read() · write() · close() · fork() · exec() · ioctl()  ░░║  ║&lt;br /&gt;
║░░  socket() · bind() · connect() · mmap() · mount() · kill() · ...  ░░║  ║&lt;br /&gt;
║░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░║  ║&lt;br /&gt;
╠══════════════════════════════════════════════════════════════════════════╝  ║&lt;br /&gt;
║                                    │                                       ║&lt;br /&gt;
║                                    ▼                                       ║&lt;br /&gt;
║                          KERNEL SPACE                                      ║&lt;br /&gt;
║                    (Ring 0 – privilegiert)                                  ║&lt;br /&gt;
║                                                                            ║&lt;br /&gt;
║   Vollständiger Zugriff auf Hardware.                                     ║&lt;br /&gt;
║   Verwaltet ALLE Ressourcen und teilt sie den Prozessen zu.               ║&lt;br /&gt;
║   Ein Fehler hier = kompletter Systemabsturz (Kernel Panic)              ║&lt;br /&gt;
║                                                                            ║&lt;br /&gt;
║  ┌─────────────────────────────────────────────────────────────────┐       ║&lt;br /&gt;
║  │                                                                 │       ║&lt;br /&gt;
║  │  ┌─────────────────────┐     ┌──────────────────────────────┐  │       ║&lt;br /&gt;
║  │  │   Prozessverwaltung │     │     Speicherverwaltung       │  │       ║&lt;br /&gt;
║  │  │                     │     │                              │  │       ║&lt;br /&gt;
║  │  │  • Scheduler        │     │  • Virtueller Speicher       │  │       ║&lt;br /&gt;
║  │  │    (wer darf wann   │     │    (jeder Prozess glaubt,   │  │       ║&lt;br /&gt;
║  │  │     auf die CPU?)   │     │     er hat eigenen RAM)     │  │       ║&lt;br /&gt;
║  │  │  • Prozess-Isolation│     │  • Page Tables               │  │       ║&lt;br /&gt;
║  │  │  • Threads          │     │  • Swap-Verwaltung           │  │       ║&lt;br /&gt;
║  │  └─────────────────────┘     └──────────────────────────────┘  │       ║&lt;br /&gt;
║  │                                                                 │       ║&lt;br /&gt;
║  │  ┌─────────────────────┐     ┌──────────────────────────────┐  │       ║&lt;br /&gt;
║  │  │   Netzwerk-Stack    │     │   Dateisystem-Schicht (VFS)  │  │       ║&lt;br /&gt;
║  │  │                     │     │                              │  │       ║&lt;br /&gt;
║  │  │  • TCP/IP           │     │  • ext4, XFS, ZFS, Btrfs    │  │       ║&lt;br /&gt;
║  │  │  • Firewall         │     │  • Berechtigungen            │  │       ║&lt;br /&gt;
║  │  │    (nftables)       │     │  • Journaling                │  │       ║&lt;br /&gt;
║  │  │  • Routing          │     │  • I/O Scheduling            │  │       ║&lt;br /&gt;
║  │  │  • Namespaces       │     │  • Mount-Verwaltung          │  │       ║&lt;br /&gt;
║  │  └─────────────────────┘     └──────────────────────────────┘  │       ║&lt;br /&gt;
║  │                                                                 │       ║&lt;br /&gt;
║  │  ┌─────────────────────┐     ┌──────────────────────────────┐  │       ║&lt;br /&gt;
║  │  │   Sicherheit        │     │   Kernel-Module              │  │       ║&lt;br /&gt;
║  │  │                     │     │                              │  │       ║&lt;br /&gt;
║  │  │  • Berechtigungen   │     │  • Ladbare Treiber           │  │       ║&lt;br /&gt;
║  │  │  • SELinux/AppArmor │     │  • Dateisystem-Module        │  │       ║&lt;br /&gt;
║  │  │  • Namespaces       │     │  • Netzwerk-Module           │  │       ║&lt;br /&gt;
║  │  │  • cgroups          │     │  • Krypto-Module             │  │       ║&lt;br /&gt;
║  │  └─────────────────────┘     └──────────────────────────────┘  │       ║&lt;br /&gt;
║  │                                                                 │       ║&lt;br /&gt;
║  └─────────────────────────────────────────────────────────────────┘       ║&lt;br /&gt;
║                                    │                                       ║&lt;br /&gt;
║  ┌─────────────────────────────────┼───────────────────────────────┐       ║&lt;br /&gt;
║  │              Gerätetreiber      │                               │       ║&lt;br /&gt;
║  │                                 │                               │       ║&lt;br /&gt;
║  │  Übersetzen generische Kernel-  │                               │       ║&lt;br /&gt;
║  │  Befehle in hardwarespezifische │                               │       ║&lt;br /&gt;
║  │  Kommandos                      │                               │       ║&lt;br /&gt;
║  │                                 │                               │       ║&lt;br /&gt;
║  │  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────────────┐  │       ║&lt;br /&gt;
║  │  │  NIC-    │ │  SATA/   │ │  GPU-    │ │  USB-Treiber      │  │       ║&lt;br /&gt;
║  │  │  Treiber │ │  NVMe    │ │  Treiber │ │                   │  │       ║&lt;br /&gt;
║  │  └──────────┘ └──────────┘ └──────────┘ └───────────────────┘  │       ║&lt;br /&gt;
║  └─────────────────────────────────┼───────────────────────────────┘       ║&lt;br /&gt;
║                                    │                                       ║&lt;br /&gt;
╠════════════════════════════════════╪══════════════════════════════════════╣&lt;br /&gt;
║                                    ▼                                       ║&lt;br /&gt;
║                              HARDWARE                                      ║&lt;br /&gt;
║                                                                            ║&lt;br /&gt;
║  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐        ║&lt;br /&gt;
║  │          │ │          │ │          │ │          │ │          │        ║&lt;br /&gt;
║  │   CPU    │ │   RAM    │ │   NIC    │ │  NVMe/   │ │   GPU    │        ║&lt;br /&gt;
║  │          │ │          │ │          │ │  HDD     │ │          │        ║&lt;br /&gt;
║  └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘        ║&lt;br /&gt;
║                                                                            ║&lt;br /&gt;
╚════════════════════════════════════════════════════════════════════════════╝&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
═══════════════════════════════════════════════════════════════════════════════&lt;br /&gt;
                     WAS PASSIERT BEI EINEM DATEIZUGRIFF?&lt;br /&gt;
═══════════════════════════════════════════════════════════════════════════════&lt;br /&gt;
&lt;br /&gt;
  Beispiel: Ein Python-Skript will eine Datei lesen&lt;br /&gt;
&lt;br /&gt;
  ┌─────────────────────────────────────────────────────────────────────────┐&lt;br /&gt;
  │ USERSPACE                                                               │&lt;br /&gt;
  │                                                                         │&lt;br /&gt;
  │  1. Python-Skript: f = open(&amp;quot;/etc/hostname&amp;quot;, &amp;quot;r&amp;quot;)                       │&lt;br /&gt;
  │         │                                                               │&lt;br /&gt;
  │         ▼                                                               │&lt;br /&gt;
  │  2. glibc übersetzt das in einen System Call: open()                    │&lt;br /&gt;
  │         │                                                               │&lt;br /&gt;
  ├─────────┼───────────────────────────────────────────────────────────────┤&lt;br /&gt;
  │         │    ← Grenze: Wechsel von Ring 3 → Ring 0 (Context Switch)    │&lt;br /&gt;
  ├─────────┼───────────────────────────────────────────────────────────────┤&lt;br /&gt;
  │ KERNEL  │                                                               │&lt;br /&gt;
  │         ▼                                                               │&lt;br /&gt;
  │  3. System Call Interface empfängt open()                               │&lt;br /&gt;
  │         │                                                               │&lt;br /&gt;
  │         ▼                                                               │&lt;br /&gt;
  │  4. VFS (Virtual Filesystem) bestimmt: ext4 zuständig                  │&lt;br /&gt;
  │         │                                                               │&lt;br /&gt;
  │         ▼                                                               │&lt;br /&gt;
  │  5. ext4-Treiber ermittelt die physischen Blöcke                       │&lt;br /&gt;
  │         │                                                               │&lt;br /&gt;
  │         ▼                                                               │&lt;br /&gt;
  │  6. I/O-Scheduler reiht den Leseauftrag ein                           │&lt;br /&gt;
  │         │                                                               │&lt;br /&gt;
  │         ▼                                                               │&lt;br /&gt;
  │  7. Gerätetreiber (z.B. NVMe) sendet Kommando an Hardware             │&lt;br /&gt;
  │         │                                                               │&lt;br /&gt;
  ├─────────┼───────────────────────────────────────────────────────────────┤&lt;br /&gt;
  │ HARDWARE│                                                               │&lt;br /&gt;
  │         ▼                                                               │&lt;br /&gt;
  │  8. NVMe-SSD liest die Daten und gibt sie zurück                       │&lt;br /&gt;
  │         │                                                               │&lt;br /&gt;
  ├─────────┼───────────────────────────────────────────────────────────────┤&lt;br /&gt;
  │ KERNEL  │                                                               │&lt;br /&gt;
  │         ▼                                                               │&lt;br /&gt;
  │  9. Daten landen im Kernel-Buffer (Page Cache)                         │&lt;br /&gt;
  │         │                                                               │&lt;br /&gt;
  │         ▼                                                               │&lt;br /&gt;
  │ 10. Kernel kopiert Daten in den Userspace-Speicher des Prozesses       │&lt;br /&gt;
  │         │                                                               │&lt;br /&gt;
  ├─────────┼───────────────────────────────────────────────────────────────┤&lt;br /&gt;
  │         │    ← Rückwechsel: Ring 0 → Ring 3                            │&lt;br /&gt;
  ├─────────┼───────────────────────────────────────────────────────────────┤&lt;br /&gt;
  │ USERSPACE                                                               │&lt;br /&gt;
  │         ▼                                                               │&lt;br /&gt;
  │ 11. Python-Skript kann die Daten jetzt lesen: f.read()                 │&lt;br /&gt;
  │                                                                         │&lt;br /&gt;
  └─────────────────────────────────────────────────────────────────────────┘&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
═══════════════════════════════════════════════════════════════════════════════&lt;br /&gt;
                        WARUM DIESE TRENNUNG?&lt;br /&gt;
═══════════════════════════════════════════════════════════════════════════════&lt;br /&gt;
&lt;br /&gt;
  ┌──────────────────────────────┐    ┌──────────────────────────────┐&lt;br /&gt;
  │       OHNE Trennung          │    │       MIT Trennung           │&lt;br /&gt;
  │                              │    │                              │&lt;br /&gt;
  │  Jedes Programm kann:       │    │  Programme müssen:           │&lt;br /&gt;
  │                              │    │                              │&lt;br /&gt;
  │  • direkt auf RAM zugreifen │    │  • den Kernel FRAGEN         │&lt;br /&gt;
  │  • Festplatte beschreiben   │    │  • der Kernel PRÜFT          │&lt;br /&gt;
  │  • Netzwerkkarte steuern    │    │  • der Kernel VERMITTELT     │&lt;br /&gt;
  │  • andere Programme killen  │    │                              │&lt;br /&gt;
  │                              │    │  Vorteile:                   │&lt;br /&gt;
  │  Ergebnis:                   │    │  ✓ Stabilität (ein Absturz  │&lt;br /&gt;
  │  ✗ Ein Fehler in Firefox    │    │    in Firefox betrifft nur   │&lt;br /&gt;
  │    kann das ganze System    │    │    Firefox)                  │&lt;br /&gt;
  │    zerstören                │    │  ✓ Sicherheit (Prozesse     │&lt;br /&gt;
  │  ✗ Keine Sicherheit         │    │    können sich nicht        │&lt;br /&gt;
  │  ✗ Keine Stabilität         │    │    gegenseitig manipulieren)│&lt;br /&gt;
  │                              │    │  ✓ Fairness (Kernel teilt   │&lt;br /&gt;
  │  (→ MS-DOS, Windows 95/98) │    │    Ressourcen gerecht auf)  │&lt;br /&gt;
  │                              │    │                              │&lt;br /&gt;
  │                              │    │  (→ Linux, moderne Windows) │&lt;br /&gt;
  └──────────────────────────────┘    └──────────────────────────────┘&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
═══════════════════════════════════════════════════════════════════════════════&lt;br /&gt;
                       CPU PROTECTION RINGS&lt;br /&gt;
═══════════════════════════════════════════════════════════════════════════════&lt;br /&gt;
&lt;br /&gt;
              ┌─────────────────────────────────┐&lt;br /&gt;
              │                                 │&lt;br /&gt;
              │   Ring 3: Userspace             │&lt;br /&gt;
              │   Anwendungen, Dienste          │&lt;br /&gt;
              │   (eingeschränkte Rechte)       │&lt;br /&gt;
              │                                 │&lt;br /&gt;
              │     ┌─────────────────────┐     │&lt;br /&gt;
              │     │                     │     │&lt;br /&gt;
              │     │  Ring 2: (unused)   │     │&lt;br /&gt;
              │     │                     │     │&lt;br /&gt;
              │     │   ┌─────────────┐   │     │&lt;br /&gt;
              │     │   │             │   │     │&lt;br /&gt;
              │     │   │  Ring 1:    │   │     │&lt;br /&gt;
              │     │   │  (unused)   │   │     │&lt;br /&gt;
              │     │   │             │   │     │&lt;br /&gt;
              │     │   │  ┌───────┐  │   │     │&lt;br /&gt;
              │     │   │  │       │  │   │     │&lt;br /&gt;
              │     │   │  │Ring 0 │  │   │     │&lt;br /&gt;
              │     │   │  │Kernel │  │   │     │&lt;br /&gt;
              │     │   │  │       │  │   │     │&lt;br /&gt;
              │     │   │  └───────┘  │   │     │&lt;br /&gt;
              │     │   │             │   │     │&lt;br /&gt;
              │     │   └─────────────┘   │     │&lt;br /&gt;
              │     │                     │     │&lt;br /&gt;
              │     └─────────────────────┘     │&lt;br /&gt;
              │                                 │&lt;br /&gt;
              └─────────────────────────────────┘&lt;br /&gt;
&lt;br /&gt;
  Ring 0 = höchste Privilegien (Kernel)&lt;br /&gt;
  Ring 3 = niedrigste Privilegien (Userspace)&lt;br /&gt;
  Ring 1+2 = von Linux nicht genutzt&lt;br /&gt;
&lt;br /&gt;
  Bei Virtualisierung:&lt;br /&gt;
  Ring -1 (VMX root) = Hypervisor&lt;br /&gt;
  Ring  0           = Gast-Kernel&lt;br /&gt;
  Ring  3           = Gast-Anwendungen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maximilian.pottgiesser</name></author>
	</entry>
</feed>