Lyx OS unterstützt neben physischen ATA/AHCI-Festplatten bis zu 4 RAM-Disks (Disk-IDs 4–7). Eine RAM-Disk wird aus physisch kontiguösem Speicher alloziert, verhält sich für alle darüber liegenden Schichten (FAT32, VFS, Shell) wie eine normale Festplatte und bleibt bis zum nächsten Neustart erhalten.
→ Syscall-ABI · Kernel-Interna · Übersicht
| Disk-IDs | Typ | Treiber |
|---|---|---|
| 0–3 | ATA PIO / AHCI (physische Festplatten) | kernel/ata.lyx / kernel/ahci.lyx |
| 4–7 | RAM-Disk | kernel/ramdisk.lyx |
Die Dispatch-Schicht in kernel/disk.lyx leitet DiskRead / DiskWrite transparent an den richtigen Treiber weiter — alle höheren Schichten (FAT32, VFS, Diskmap, Shell-Tools) sehen nur Disk-IDs und merken den Unterschied nicht.
Verwaltet eine statische Tabelle von bis zu 4 RAM-Disk-Slots. Jeder Slot ist 24 Bytes groß:
rd_table[slot]:
+0 phys_base (int64) — physische Basisadresse des allokierten Speichers
+8 sectors (int64) — Sektor-Anzahl (size_mb × 2048)
+16 present (int64) — 0 = frei, 1 = belegt
con RD_MAX: int64 := 4; // max. gleichzeitige RAM-Disks
con RD_ID_BASE: int64 := 4; // externe Disk-ID = RD_ID_BASE + slot
con RD_ENT_SZ: int64 := 24; // Bytes pro Tabelleneintrag
| Signatur | Beschreibung |
|---|---|
RdInit(): void | Tabelle allozieren und alle present-Felder auf 0 setzen. Wird von DiskInit() aufgerufen. |
RdPresent(rd_id): bool | Prüft ob Slot rd_id (0-basiert) belegt ist. |
RdSectorCount(rd_id): int64 | Liefert Sektor-Anzahl des Slots; 0 wenn nicht vorhanden. |
RdCreate(size_mb): int64 | Alloziert size_mb MB physischen Speichers (1–256 MB), belegt den nächsten freien Slot. Gibt die externe Disk-ID (4–7) zurück; -1 bei Fehler (kein freier Slot oder OOM). |
RdRead(rd_id, lba, buf): int64 | Liest einen 512-Byte-Sektor (byte-für-byte) aus dem physischen Puffer in buf. |
RdWrite(rd_id, lba, buf): int64 | Schreibt einen 512-Byte-Sektor aus buf in den physischen Puffer. |
RdPrintInfo(): void | Gibt alle belegten RAM-Disk-Slots auf COM1 + Framebuffer aus. |
Hinweis:RdRead/RdWritenehmen die slot-interne ID (0–3), nicht die externe Disk-ID (4–7). Die Umrechnung macht die Dispatch-Schicht indisk.lyx.
disk.lyx ist die einheitliche Zugriffsfassade für alle Disk-Typen. Alle höheren Schichten rufen ausschließlich DiskRead/DiskWrite auf.
pub fn DiskRead(disk_id: int64, lba: int64, buf: int64): int64 {
if (disk_id >= 4) { return RdRead(disk_id - 4, lba, buf); }
return AtaReadDisk(disk_id, lba, buf);
}
pub fn DiskWrite(disk_id: int64, lba: int64, buf: int64): int64 {
if (disk_id >= 4) { return RdWrite(disk_id - 4, lba, buf); }
return AtaWriteDisk(disk_id, lba, buf);
}
| Signatur | Beschreibung |
|---|---|
DiskInit(): void | Initialisiert ATA/AHCI-Disks (Probe) und ruft RdInit() auf. |
DiskRead(disk_id, lba, buf): int64 | Einen 512-Byte-Sektor lesen. Leitet bei ID ≥ 4 an RAM-Disk weiter. |
DiskWrite(disk_id, lba, buf): int64 | Einen 512-Byte-Sektor schreiben. Leitet bei ID ≥ 4 an RAM-Disk weiter. |
DiskCreateRam(size_mb): int64 | Dünner Wrapper um RdCreate. Gibt Disk-ID 4–7 zurück. |
DiskPresent(disk_id): bool | Prüft ob Disk-ID belegt ist (ATA-Tabelle für 0–3, RdPresent für 4–7). |
DiskSectorCount(disk_id): int64 | Liefert Sektor-Anzahl (ATA oder RAM, transparent). |
DiskPrintInfo(): void | Gibt alle Disks aus (ATA + RAM). |
VFS-Layer-Wrapper für die RAM-Disk-Operationen, die über Ring-3-Syscalls erreichbar sind:
| Signatur | Beschreibung |
|---|---|
VfsRamdiskCreate(size_mb): int64 | Ruft DiskCreateRam(size_mb) auf. Gibt Disk-ID 4–7 oder -1 zurück. |
VfsRamdiskFmt(disk_id): bool | Formatiert disk_id als FAT32 (Fat32Format, gesamte Disk ab LBA 0) und mountet sie als aktives Volume (VfsMountDisk(0, disk_id, 0)). Gibt true bei Erfolg. |
| Nr | Name | Argument | Rückgabe | Beschreibung |
|---|---|---|---|---|
| 153 | sys_ramdisk_create | size_mb | disk_id (4–7) oder -1 | RAM-Disk allozieren. Ruft VfsRamdiskCreate auf. |
| 154 | sys_ramdisk_fmt | disk_id | 0 oder -1 | RAM-Disk als FAT32 formatieren + als aktives Volume mounten. Ruft VfsRamdiskFmt auf. |
Beide Wrapper-Bibliotheken stellen identische Funktionen bereit:
// SysRamdiskCreate(size_mb) → disk_id (4-7) oder -1
pub fn SysRamdiskCreate(size_mb: int64): int64 {
poke64(g_r3sc + B_OFF_NR, 153);
poke64(g_r3sc + B_OFF_A0, size_mb);
return b_trigger();
}
// SysRamdiskFmt(disk_id) → 0 oder -1
pub fn SysRamdiskFmt(disk_id: int64): int64 {
poke64(g_r3sc + B_OFF_NR, 154);
poke64(g_r3sc + B_OFF_A0, disk_id);
return b_trigger();
}
Das Tool bin/ramdisk.lyx läuft als normaler Ring-3-Prozess und nutzt SysRamdiskCreate / SysRamdiskFmt / BlockOpen über bsys.
| Befehl | Beschreibung |
|---|---|
ramdisk create <size_mb> | Alloziert eine RAM-Disk der angegebenen Größe (1–256 MB). Gibt die zugewiesene Disk-ID aus. |
ramdisk fmt <disk_id> | Formatiert Disk-ID 4–7 als FAT32 und mountet sie als aktives Volume. |
ramdisk list | Listet alle belegten RAM-Disk-Slots (IDs 4–7) mit Größe und Sektor-Anzahl. |
> ramdisk create 32
ramdisk: created disk_id=4 32 MB
> ramdisk fmt 4
ramdisk: formatting disk_id=4 as FAT32... OK (mounted as active volume)
> ls /
(leeres Root auf RAM-Disk)
> ramdisk list
[4] RAMDISK 32 MB (65536 sectors)
Ring-3-Shell / Anwendung
│ SysRamdiskCreate(mb) / SysRamdiskFmt(id)
▼
bsys.lyx / bsys_vega.lyx
│ Syscall-Nr 153 / 154
▼
kernel/ring3.lyx (Syscall-Handler)
│
├─ VfsRamdiskCreate → DiskCreateRam → RdCreate
└─ VfsRamdiskFmt → Fat32Format + VfsMountDisk
│
DiskRead / DiskWrite
┌─────┴─────┐
ID 0–3 ID 4–7
ATA/AHCI RdRead/RdWrite
(byte-für-byte
physischer Puffer)
FAT32 (kernel/fat32.lyx), Diskmap (kernel/diskmap.lyx) und alle anderen Disk-Konsumenten rufen ausschließlich DiskRead/DiskWrite auf — sie wissen nicht ob sie auf einer physischen Platte oder einer RAM-Disk arbeiten.
RdCreate-Limit). Gesamtlimit durch verfügbaren physischen Speicher.size_mb × 2048 = Sektor-Anzahl (512-Byte-Sektoren).VfsRamdiskFmt mountet immer als Volume 0. Wenn eine physische Disk bereits als Vol 0 gemountet ist, überschreibt fmt den Mount.VfsRamdiskFmt als aktives Volume gemountet sein.| Modul | Datei |
|---|---|
| RAM-Disk-Treiber | kernel/ramdisk.lyx |
| Disk-Dispatch | kernel/disk.lyx |
| VFS-Wrapper | kernel/vfs.lyx (VfsRamdiskCreate, VfsRamdiskFmt) |
| Syscall-Handler | kernel/ring3.lyx (nr=153, nr=154) |
| Ring-3-Wrapper | bin/bsys.lyx, vega/bsys_vega.lyx |
| Shell-Tool | bin/ramdisk.lyx |
Letzte Aktualisierung: 2026-06-18