Diese Seite beschreibt den Aufbau von Lyx OS: die Schichten vom UEFI-Boot bis zum Ring-3-Userspace, das Speicherlayout, die Kernel-Module und die Syscall-Grenze.
→ Übersicht · Syscall-ABI · Kernel-Interna
┌─────────────────────────────────────────────────────┐
│ Ring-3 – Userspace │
│ Anwendungen, Shell — kompiliert mit lyxc │
│ Interaktion: ausschließlich via SYSCALL-Instruktion │
├─────────────────────────────────────────────────────┤
│ Syscall-Gate (Ring-0 / Ring-3 Grenze) │
│ SYSCALL/SYSRET — rax = Syscall-Nr, rdx = Rückgabe │
├─────────────────────────────────────────────────────┤
│ Ring-0 – Lyx-Kernel (Lyx-Sprache) │
│ PMM · VMM · Exceptions/IDT · SMP · Process │
│ ATA · FAT32 · VFS · Keyboard · Sync │
├─────────────────────────────────────────────────────┤
│ UEFI-Bootloader (NASM, boot.asm) │
│ PE32+-Binary — BOOTX64.EFI │
├─────────────────────────────────────────────────────┤
│ UEFI-Firmware (OVMF) / PC-Hardware │
└─────────────────────────────────────────────────────┘
Der Bootloader (bootloader/boot.asm, NASM, ~2900 Zeilen) ist ein PE32+-Flat-Binary. UEFI lädt es als BOOTX64.EFI und ruft efi_main(ImageHandle, SystemTable) auf (MS x64 ABI).
Schritte:
ConOut\\kernel.elf vom UEFI SimpleFileSystem lesenPT_LOAD-Segmente mappen, BSS nullenExitBootServices aufrufenIA32_LSTAR) auf den Ring-0-Einsprungpunkt setzenpub fn main(boot_info_ptr: int64) in kernel.lyx)| Adressbereich | Inhalt |
|---|---|
0x0000 – 0x0FFF | Null-Page (unmapped, für nil-Checks) |
0x1000 – 0x1FFFF | Bootloader-Code (PE32+ Text-Section) |
0x100000 – 0x1FFFFF | Bootloader-Heap / Temporäre Strukturen |
0x200000 – ~ | Kernel-ELF (PT_LOAD-Segmente) |
0x2000000 | Bump-Allocator-Basis (Kernel-Heap) |
- 4 GB | Identity-Map (1:1 physisch ↔ virtuell) |
0xFFFF800000000000+ | (Zukünftig: höhere Hälfte Kernel-Space) |
Page-Größen:
PDE mit PS-Bit) für die ersten 4 GB
Der Kernel besteht aus 11 Lyx-Units, die beim Build einzeln zu .lyu vorkompiliert und dann zu kernel.elf zusammengelinkt werden:
| Modul | Datei | Aufgabe |
|---|---|---|
| Exceptions | exceptions.lyx | IDT (256 Gates), CPU-Fault-Routing, panic/assert |
| PMM | pmm.lyx | Physical Memory Manager — Bitmap-basiert, 4 GB, UEFI-Memory-Map als Basis |
| VMM | vmm.lyx | Virtual Memory Manager — PML4-Hierarchie, 2 MB Huge Pages, CR3-Operationen |
| Process | process.lyx | Prozess-Modell: ProcCreate, ProcActivate |
| Sync | sync.lyx | Synchronisations-Primitive (Mutex, Spinlock) |
| SMP | smp.lyx | Symmetric Multiprocessing — LAPIC, Trampoline-Code, AP-Startup |
| ATA | ata.lyx | ATA-Disk-I/O — Sektorweises Lesen und Schreiben |
| FAT32 | fat32.lyx | Vollständige FAT32-Implementierung (~795 Zeilen) |
| VFS | vfs.lyx | Virtual-Filesystem-Layer — abstrahiert über FAT32 |
| Keyboard | keyboard.lyx | Tastatureingabe (PS/2) |
| Kernel | kernel.lyx | Einstiegspunkt — initialisiert alle Module in der richtigen Reihenfolge |
Initialisierungsreihenfolge in kernel.lyx:
PMM → VMM → Exceptions/IDT → SMP → ATA → FAT32 → VFS → Keyboard → Ring-3-Jump
Ring-3-Code kommuniziert mit dem Kernel ausschließlich über die SYSCALL-Instruktion (AMD64 Fast Syscall). Kein UIO, kein /proc, kein ioctl-Polymorphismus.
Register-Layout (kurz):
Eingabe: rax = Syscall-Nummer rdi/rsi/rdx/r10/r8/r9 = Argumente
Ausgabe: rax = Fehlercode (0 = OK) rdx = Rückgabewert
errno.rcx und r11 werden vom SYSCALL-Mechanismus selbst überschrieben und stehen nicht als Argumente zur Verfügung.→ Vollständige ABI-Spezifikation: Syscall-Referenz
Lyx OS kennt keine root-Privileg-Eskalation. Jeder fd ist eine Capability: er kodiert sowohl die Ressource als auch die erlaubten Operationen (Lesen, Schreiben, Mappen, Löschen …). Capabilities können mit sys_cap_restrict nur eingeschränkt, nie erweitert werden.
| Designprinzip | Konsequenz |
|---|---|
| Kein Root | Kein chmod 4755, kein sudo-Äquivalent |
| CLOEXEC by default | Neue fd werden nicht über sys_spawn vererbt — opt-in mit O_INHERIT |
Ein fd-Typ | fd für Dateien, Sockets, Prozesse, AI-Sessions sind konzeptuell gleich |
Alle Pfad-Syscalls nehmen dir_fd | AT_CWD als Default — keine TOCTOU-Lücken durch absolute Pfade |
Letzte Aktualisierung: 2026-06-09