Diese Seite dokumentiert die vollständige Syscall-Schnittstelle von Lyx OS. Sie richtet sich an Entwickler, die Ring-3-Anwendungen schreiben, Kernel-nahe Bibliotheken implementieren oder Syscalls direkt in NASM-Assembly nutzen.
→ Anwendungen entwickeln · Architektur · Übersicht
Lyx OS nutzt ausschließlich die SYSCALL/SYSRET-Instruktion (AMD64 Fast Syscall). Es gibt keine Int-80-Kompatibilität und kein Vsyscall-Interface.
Eingabe:
rax = Syscall-Nummer (0x0000 – 0x0CFF)
rdi = Argument 1
rsi = Argument 2
rdx = Argument 3
r10 = Argument 4 (statt rcx — wird vom SYSCALL-Mechanismus überschrieben)
r8 = Argument 5
r9 = Argument 6
Ausgabe:
rax = Fehlercode (0 = Erfolg; >0 = ERR_* Konstante)
rdx = Rückgabewert (fd, Adresse, Byte-Anzahl, PID, ...)
Nicht verändert (callee-saved): rbx, rbp, r12–r15
CLOBBERT: rcx, r11 (SYSCALL-Mechanismus)
rdi, rsi, r10, r8, r9
Das Design-Alleinstellungsmerkmal: Fehler und Nutzwert kommen in zwei getrennten Registern. Kein globales errno, kein Vorzeichentest auf einem einzigen Register.
rax = 0 → Erfolg; Nutzwert steht in rdx
rax = ERR_* → Fehler; rdx ist undefiniert
lyxc –target=lyxos übersetze das als Tupel-Syntax:
var fd, err := sys_open(AT_CWD, "config.txt", O_READ, 0);
if (err != ERR_OK) {
EPrintLn("open fehlgeschlagen: " + IntToStr(err));
return 1;
}
; sys_write(FD_STDOUT, buf, len) → bytes_written in rdx, Fehler in rax
mov rax, 0x0203 ; sys_write
mov rdi, 1 ; arg1: fd = FD_STDOUT
mov rsi, buf ; arg2: Puffer
mov rdx, len ; arg3: Länge
syscall
test rax, rax
jnz .error ; rax ≠ 0 → Fehler
; rdx = Anzahl tatsächlich geschriebener Bytes
| lyxc-Builtin | LyxOS-Syscall |
|---|---|
PrintLn(s) | sys_write(FD_STDOUT, …) |
EPrintLn(s) | sys_write(FD_STDERR, …) |
mmap(…) | sys_mmap(…) |
open(path, …) | sys_open(AT_CWD, path, …) |
read(fd, …) | sys_read(fd, …) |
write(fd, …) | sys_write(fd, …) |
close(fd) | sys_close(fd) |
con ERR_OK : int64 := 0 // Erfolg
con ERR_PERM : int64 := 1 // Zugriff verweigert
con ERR_NOENT : int64 := 2 // Datei / Ressource nicht gefunden
con ERR_BUSY : int64 := 3 // Ressource belegt
con ERR_IO : int64 := 4 // I/O-Fehler
con ERR_NOMEM : int64 := 5 // Kein Speicher
con ERR_AGAIN : int64 := 6 // Nochmal versuchen (würde blockieren)
con ERR_INVAL : int64 := 7 // Ungültiges Argument
con ERR_OVERFLOW : int64 := 8 // Puffer- / Wert-Überlauf
con ERR_TIMEOUT : int64 := 9 // Zeitüberschreitung
con ERR_EXIST : int64 := 10 // Existiert bereits
con ERR_NOTDIR : int64 := 11 // Kein Verzeichnis
con ERR_ISDIR : int64 := 12 // Ist ein Verzeichnis
con ERR_NOTEMPTY : int64 := 13 // Verzeichnis nicht leer
con ERR_BADFD : int64 := 14 // Ungültiger File-Deskriptor
con ERR_NOSYS : int64 := 15 // Syscall nicht implementiert
con ERR_NOTSUP : int64 := 16 // Operation nicht unterstützt
con ERR_RANGE : int64 := 17 // Wert außerhalb des gültigen Bereichs
con ERR_FAULT : int64 := 18 // Ungültige Speicheradresse
con ERR_LOOP : int64 := 19 // Symbolischer-Link-Schleife
con ERR_NAMETOOLONG : int64 := 20 // Pfad-Komponente zu lang
con ERR_NOTCONN : int64 := 21 // Socket nicht verbunden
con ERR_CONNREFUSED : int64 := 22 // Verbindung abgelehnt
con ERR_ADDRUSE : int64 := 23 // Adresse bereits in Benutzung
con ERR_BROKEN : int64 := 24 // Verbindung / Pipe getrennt
con ERR_CANCELED : int64 := 25 // Operation abgebrochen
con ERR_DEADLOCK : int64 := 26 // Würde Deadlock verursachen
con ERR_TOOBIG : int64 := 27 // Argument / Daten zu groß
con ERR_NODEV : int64 := 28 // Kein solches Gerät
con ERR_CAPVIOL : int64 := 29 // Capability-Verletzung
con ERR_AIBUSY : int64 := 30 // KI-Inferenz-Engine ausgelastet
con ERR_BADMODEL : int64 := 31 // Ungültiges oder nicht unterstütztes KI-Modell
con ERR_CTXFULL : int64 := 32 // KI-Kontextfenster voll
// Standard-File-Deskriptoren
con FD_STDIN : int64 := 0
con FD_STDOUT : int64 := 1
con FD_STDERR : int64 := 2
// Spezielle dir_fd-Werte (alle Pfad-Syscalls nehmen dir_fd als erstes Argument)
con AT_CWD : int64 := -1 // Aktuelles Arbeitsverzeichnis
con AT_ROOT : int64 := -2 // Dateisystem-Wurzel
| Nr | Name | Argumente | Rückgabe (rdx) | Beschreibung |
|---|---|---|---|---|
| 0x0000 | sys_version | — | (major«32)|minor | ABI-Version; sollte beim Programmstart geprüft werden |
| 0x0001 | sys_exit | code | — | Beendet aktuellen Thread; kehrt nie zurück |
| 0x0002 | sys_exit_group | code | — | Beendet alle Threads der Prozessgruppe; kehrt nie zurück |
| 0x0003 | sys_spawn | dir_fd, path, argv, envp, SpawnOpts* | Prozess-fd | Neuer Prozess aus ELF-Binary; kein fork() |
| 0x0004 | sys_thread_spawn | entry, stack, stack_size, arg | Thread-fd | Neuer Thread im selben Adressraum |
| 0x0005 | sys_thread_exit | code | — | Beendet aktuellen Thread; kehrt nie zurück |
| 0x0006 | sys_wait | proc_fd, status_out*, timeout_ns | — | Wartet auf Prozess/Thread-Ende; -1 = unbegrenzt |
| 0x0007 | sys_getpid | — | PID | Prozess-ID |
| 0x0008 | sys_gettid | — | TID | Thread-ID |
| 0x0009 | sys_yield | — | — | CPU freiwillig abgeben |
| 0x000A | sys_sleep_ns | nanoseconds | — | Schläft mindestens N Nanosekunden |
| 0x000B | sys_priority | fd, priority | — | Scheduling-Priorität setzen (0=normal, <0=höher) |
| 0x000C | sys_getrandom | buf, len, flags | Bytes | Kryptographisch sicherer Zufall |
| 0x000D | sys_signal_mask | notify_fd, mask | vorherige Maske | Asynchrone Benachrichtigungen maskieren |
| Nr | Name | Argumente | Rückgabe (rdx) | Beschreibung |
|---|---|---|---|---|
| 0x0100 | sys_mmap | hint, size, prot, flags | Adresse | Speicher-Mapping; hint=0 → Kernel wählt Adresse |
| 0x0101 | sys_munmap | addr, size | — | Mapping freigeben |
| 0x0102 | sys_mprotect | addr, size, prot | — | Schutzflags ändern |
| 0x0103 | sys_madvise | addr, size, advice | — | Hinweise an VMM (MADV_SEQUENTIAL usw.) |
| 0x0104 | sys_shm_create | size, flags | shm-fd | Shared-Memory-Objekt erzeugen |
| 0x0105 | sys_shm_map | shm_fd, offset, size, prot | Adresse | Shared Memory in Adressraum einblenden |
con PROT_NONE : int64 := 0
con PROT_READ : int64 := 1
con PROT_WRITE : int64 := 2
con PROT_EXEC : int64 := 4
con MAP_PRIVATE : int64 := 1
con MAP_SHARED : int64 := 2
con MAP_ANONYMOUS : int64 := 4
con MAP_FIXED : int64 := 8
con MAP_POPULATE : int64 := 16 // Seiten sofort einpagen
Alle Pfad-Syscalls nehmen dir_fd als erstes Argument. AT_CWD = -1 ist der Default. Kein open() ohne Basis-fd — verhindert TOCTOU-Lücken von Grund auf. CLOEXEC ist implizit; O_INHERIT deaktiviert es explizit.
| Nr | Name | Argumente | Rückgabe (rdx) | Beschreibung |
|---|---|---|---|---|
| 0x0200 | sys_open | dir_fd, path, flags, mode | fd | Datei öffnen oder anlegen |
| 0x0201 | sys_close | fd | — | fd schließen |
| 0x0202 | sys_read | fd, buf, count | Bytes gelesen | Bis zu count Bytes lesen |
| 0x0203 | sys_write | fd, buf, count | Bytes geschrieben | Bis zu count Bytes schreiben |
| 0x0204 | sys_seek | fd, offset, whence | neue Position | Cursor setzen (SEEK_SET=0, SEEK_CUR=1, SEEK_END=2) |
| 0x0205 | sys_stat | dir_fd, path, Stat*, flags | — | Datei-Metadaten lesen |
| 0x0206 | sys_fstat | fd, Stat* | — | stat auf bereits offenem fd |
| 0x0207 | sys_mkdir | dir_fd, path, mode | — | Verzeichnis anlegen |
| 0x0208 | sys_unlink | dir_fd, path, flags | — | Datei löschen; UNLINK_DIR=1 → rmdir |
| 0x0209 | sys_rename | old_dir, old_path, new_dir, new_path | — | Atomares Umbenennen |
| 0x020A | sys_readdir | fd, buf, buf_size | Bytes | Verzeichniseinträge lesen (DirEntry-Array) |
| 0x020B | sys_dup | fd, flags | neuer fd | fd duplizieren |
| 0x020C | sys_pipe | read_fd*, write_fd*, flags | — | Unidirektionales Byte-Pipe-Paar |
| 0x020D | sys_truncate | fd, size | — | Dateigröße setzen |
| 0x020E | sys_sync | fd | — | Puffer auf Datenträger schreiben |
| 0x020F | sys_mount | dev_fd, mnt_dir, path, fs_type, flags | — | Dateisystem einhängen |
| 0x0210 | sys_umount | dir_fd, path, flags | — | Dateisystem aushängen |
| 0x0211 | sys_getcwd | buf, size | Bytes | Aktuelles Arbeitsverzeichnis |
| 0x0212 | sys_chdir | dir_fd, path | — | Arbeitsverzeichnis wechseln |
| 0x0213 | sys_symlink | target, dir_fd, link_path | — | Symbolischen Link erzeugen |
| 0x0214 | sys_readlink | dir_fd, path, buf, size | Bytes | Link-Ziel lesen |
| 0x0215 | sys_content_id | fd, algo, out, out_len | Hash-Bytes | Kryptographischer Content-Hash (BLAKE3 oder SHA-256) |
con O_READ : int64 := 1
con O_WRITE : int64 := 2
con O_RDWR : int64 := 3
con O_CREAT : int64 := 4
con O_EXCL : int64 := 8
con O_TRUNC : int64 := 16
con O_APPEND : int64 := 32
con O_NONBLOCK : int64 := 64
con O_INHERIT : int64 := 128 // fd über sys_spawn vererben (CLOEXEC ist Default)
con O_DIRECTORY : int64 := 256
con O_TMPFILE : int64 := 512
| Nr | Name | Argumente | Rückgabe (rdx) | Beschreibung |
|---|---|---|---|---|
| 0x0300 | sys_poll | PollEvent*, count, timeout_ns | bereite fds | Mehrere fds gleichzeitig beobachten |
| 0x0301 | sys_ioctl | fd, request, arg | gerätespezifisch | Gerätespezifische Steuerbefehle |
| 0x0302 | sys_mmap_device | fd, offset, size, prot | Adresse | MMIO-Register in Adressraum mappen |
| 0x0303 | sys_irq_bind | irq, notify_fd | — | IRQ an Notification-fd binden (Userspace-Treiber) |
| 0x0304 | sys_port_in | port, width | Wert | x86 IN-Befehl (erfordert CAP_IOPORT) |
| 0x0305 | sys_port_out | port, width, value | — | x86 OUT-Befehl (erfordert CAP_IOPORT) |
| Nr | Name | Argumente | Rückgabe (rdx) | Beschreibung |
|---|---|---|---|---|
| 0x0400 | sys_mutex_create | flags | Mutex-fd | Kernel-Mutex (MUTEX_PLAIN/RECURSIVE/ROBUST) |
| 0x0401 | sys_mutex_lock | fd, timeout_ns | — | Mutex sperren |
| 0x0402 | sys_mutex_unlock | fd | — | Mutex entsperren |
| 0x0403 | sys_sem_create | initial, flags | Semaphor-fd | Zählsemaphor |
| 0x0404 | sys_sem_wait | fd, timeout_ns | — | Semaphor dekrementieren |
| 0x0405 | sys_sem_post | fd | — | Semaphor inkrementieren |
| 0x0406 | sys_channel_create | flags | (send«32)|recv | Bidirektionaler Nachrichten-Kanal (Mach-Port-Stil) |
| 0x0407 | sys_channel_send | fd, msg, size, fds*, count | — | Nachricht + optionale fds senden |
| 0x0408 | sys_channel_recv | fd, msg, size, fds*, count* | Bytes | Nachricht + fds empfangen |
| 0x0409 | sys_notify_create | flags | Notify-fd | Asynchrone Notification-Queue (Unix-Signal-Ersatz) |
| 0x040A | sys_notify_wait | fd, Notification*, count, timeout_ns | Events | Ausstehende Notifications lesen |
| 0x040B | sys_notify_post | fd, type, data | — | Notification in Queue schreiben |
| 0x040C | sys_futex | addr*, op, val, timeout_ns, addr2*, val3 | — | Fast Userspace Mutex (für Laufzeit-Implementierungen) |
| Nr | Name | Argumente | Rückgabe (rdx) | Beschreibung |
|---|---|---|---|---|
| 0x0500 | sys_clock_get | clock_id, TimeSpec* | Nanosekunden | Systemuhr lesen |
| 0x0501 | sys_clock_set | clock_id, TimeSpec* | — | Systemuhr setzen (erfordert Admin-Capability) |
| 0x0502 | sys_timer_create | clock_id, notify_fd, flags | Timer-fd | Periodischen/einmaligen Timer erzeugen |
| 0x0503 | sys_timer_set | fd, interval_ns, initial_ns | — | Timer aktivieren / deaktivieren (0/0 = disarm) |
| 0x0504 | sys_timer_wait | fd, timeout_ns | abgelaufene Ticks | Bis zum nächsten Timer-Ablauf warten |
con CLOCK_REAL : int64 := 0 // Wanduhr (UTC, kann springen)
con CLOCK_MONO : int64 := 1 // Monoton seit Boot
con CLOCK_CPU : int64 := 2 // CPU-Zeit des aktuellen Prozesses
con CLOCK_THREAD : int64 := 3 // CPU-Zeit des aktuellen Threads
| Nr | Name | Argumente | Rückgabe (rdx) | Beschreibung |
|---|---|---|---|---|
| 0x0600 | sys_socket | domain, type, proto | Socket-fd | Socket erzeugen |
| 0x0601 | sys_bind | fd, addr*, addr_len | — | Socket an lokale Adresse binden |
| 0x0602 | sys_listen | fd, backlog | — | TCP-Socket in Wartezustand versetzen |
| 0x0603 | sys_accept | fd, addr_out*, len* | Client-fd | Eingehende Verbindung akzeptieren |
| 0x0604 | sys_connect | fd, addr*, addr_len | — | Verbindung herstellen |
| 0x0605 | sys_sendmsg | fd, MsgHdr*, flags | Bytes | Daten mit Scatter/Gather senden |
| 0x0606 | sys_recvmsg | fd, MsgHdr*, flags | Bytes | Daten empfangen |
| 0x0607 | sys_setsockopt | fd, level, opt, val*, len | — | Socket-Option setzen |
| 0x0608 | sys_getsockopt | fd, level, opt, val*, len* | — | Socket-Option lesen |
| 0x0609 | sys_shutdown | fd, how | — | Socket-Verbindung (teil-)schließen |
| Nr | Name | Argumente | Rückgabe (rdx) | Beschreibung |
|---|---|---|---|---|
| 0x0700 | sys_cap_create | resource_fd, rights | Capability-fd | Capability für fd mit bestimmten Rechten erzeugen |
| 0x0701 | sys_cap_restrict | cap_fd, rights | eingeschränkter fd | Rechte reduzieren (nie erweitern) |
| 0x0702 | sys_cap_rights | cap_fd | Rechte-Bitmask | Aktuelle Rechte abfragen |
| 0x0703 | sys_pledge | promises, exec_promises | — | Erlaubte Syscall-Klassen dauerhaft einschränken |
| 0x0704 | sys_unveil | path, permissions | — | Sichtbaren Dateisystem-Baum einschränken |
| 0x0705 | sys_uid_get | — | UID | User-ID abfragen |
| 0x0706 | sys_gid_get | — | GID | Gruppen-ID abfragen |
| 0x0707 | sys_setuid | uid | — | User-ID ändern (erfordert Admin-Capability) |
| 0x0708 | sys_seccomp | mode, BpfProg* | — | BPF-Syscall-Filter installieren |
// Capability-Rechte
con RIGHT_READ : int64 := 1
con RIGHT_WRITE : int64 := 2
con RIGHT_EXEC : int64 := 4
con RIGHT_MMAP : int64 := 8
con RIGHT_SEEK : int64 := 16
con RIGHT_STAT : int64 := 32
con RIGHT_DELETE : int64 := 64
con RIGHT_CONTROL : int64 := 128
con RIGHT_ALL : int64 := 0x7FFFFFFFFFFFFFFF
KI-Modelle sind Kernel-verwaltete Ressourcen. Das gesamte KI-Subsystem ist ein ladbares Kernel-Modul (kernel/ai.lyx). Wenn es nicht geladen ist, geben alle 0x0800-Syscalls ERR_NOTSUP zurück.
| Nr | Name | Argumente | Rückgabe (rdx) | Beschreibung |
|---|---|---|---|---|
| 0x0800 | sys_ai_model_load | dir_fd, path, flags | Model-fd | KI-Modell laden (GGUF, SafeTensors); Weights OS-weit geteilt |
| 0x0801 | sys_ai_model_unload | model_fd | — | Modell freigeben wenn alle Contexts geschlossen |
| 0x0802 | sys_ai_model_info | model_fd, AiModelInfo* | — | Metadaten lesen (Name, Architektur, Parameter, Context-Größe) |
| 0x0803 | sys_ai_ctx_create | model_fd, ctx_size, flags | Context-fd | Inferenz-Kontext (KV-Cache) erzeugen |
| 0x0804 | sys_ai_ctx_destroy | ctx_fd | — | KV-Cache freigeben |
| 0x0805 | sys_ai_infer | ctx_fd, prompt_fd, result_fd, AiInferOpts* | Job-fd | Asynchrone Inferenz; beobachtbar via sys_poll |
| 0x0806 | sys_ai_infer_sync | ctx_fd, prompt, len, result, max, AiInferOpts* | Bytes | Synchrone Inferenz; blockiert den Thread |
| 0x0807 | sys_ai_embed | ctx_fd, text, len, f32*, dim* | — | Embedding-Vektor erzeugen |
| 0x0808 | sys_ai_token_count | ctx_fd, text, len | Token-Anzahl | Tokens zählen ohne Inferenz |
| 0x0809 | sys_ai_search | index_fd, f32*, dim, k, AiSearchResult*, max | Treffer | k-Nearest-Neighbor-Suche im Kernel-Vektorindex |
| 0x080A | sys_ai_index_create | dim, flags | Index-fd | Kernel-Vektorindex erzeugen |
| 0x080B | sys_ai_index_insert | index_fd, id, f32*, dim, meta*, len | — | Vektor in Index einfügen |
| 0x080C | sys_ai_index_delete | index_fd, id | — | Vektoreintrag entfernen |
| 0x080D | sys_sem_annotate | addr, size, embed_fd | — | Embedding an Speicherregion binden (semantisches Paging) |
| 0x080E | sys_sem_query | f32*, dim, k, SemMemResult*, max | Treffer | Speicherregionen semantisch suchen |
| 0x080F | sys_graph_node_create | fd, flags | Node-ID | fd als Knoten im Kernel-Wissensgraphen registrieren |
| 0x0810 | sys_graph_edge_add | src, rel_type, dst, meta*, len | Edge-ID | Gerichtete Kante zwischen Graph-Knoten erzeugen |
| 0x0811 | sys_graph_edge_remove | edge_id | — | Graph-Kante entfernen |
| 0x0812 | sys_graph_query | node_id, rel_type, depth, GraphQueryResult*, max | Treffer | Wissensgraph traversieren |
Nur für Prozesse mit „lyra“-Pledge. Normale Anwendungen kommunizieren mit Lyra über sys_channel_*.
| Nr | Name | Argumente | Rückgabe (rdx) | Beschreibung |
|---|---|---|---|---|
| 0x0900 | sys_intent_submit | text, len, priority | Intent-ID | Natürlichsprachlichen Intent an Lyra übermitteln |
| 0x0901 | sys_intent_wait | intent_id, timeout_ns, result_fd | Status | Auf Intent-Auflösung warten |
| 0x0902 | sys_intent_cancel | intent_id | — | Laufenden Intent abbrechen |
| 0x0903 | sys_lyra_event | event_type, data*, len | — | Sensorisches Event senden (Sprache, Geste, …) |
| 0x0904 | sys_dream_register | fn_fd, interval_ns, flags | Dream-ID | Callback in CPU-Idle-Zyklen registrieren |
| 0x0905 | sys_dream_unregister | dream_id | — | Dream-Callback entfernen |
| 0x0906 | sys_memory_store | key, val*, len, flags | — | Eintrag in Lyras episodischen Ringpuffer schreiben |
| 0x0907 | sys_memory_recall | key, buf*, size | Bytes | Eintrag aus episodischem Speicher lesen |
| 0x0908 | sys_memory_search | f32*, dim, k, MemoryResult*, max | Treffer | Semantische Suche im episodischen Speicher |
| 0x0909 | sys_context_push | frame*, len | — | Kontext-Frame auf Lyras Kernel-Stack schieben |
| 0x090A | sys_context_pop | — | — | Obersten Kontext-Frame entfernen |
| 0x090B | sys_timeline_query | from_ns, to_ns, f32*, dim, TimelineResult*, max | Treffer | Ereignisse im Zeitfenster suchen |
| Nr | Name | Argumente | Rückgabe (rdx) | Beschreibung |
|---|---|---|---|---|
| 0x0B00 | sys_task_spawn | fn*, arg*, arg_size, flags | Task-fd | Leichtgewichtigen Task starten; Kernel wählt Core |
| 0x0B01 | sys_task_await | task_fd, result*, size, timeout_ns | Bytes | Auf Task-Abschluss warten |
| 0x0B02 | sys_task_cancel | task_fd | — | Task abbrechen |
| 0x0B03 | sys_task_group_create | flags | group_fd | Task-Gruppe erzeugen |
| 0x0B04 | sys_task_group_add | group_fd, fn*, arg*, size | Task-fd | Task zur Gruppe hinzufügen |
| 0x0B05 | sys_task_group_await | group_fd, timeout_ns | abgeschl. Tasks | Auf alle Tasks der Gruppe warten |
| 0x0B06 | sys_cpu_count | — | CPU-Anzahl | Anzahl logischer Kerne |
| 0x0B07 | sys_cpu_topology | CpuTopology*, size | — | CPU-Topologie lesen (Cores, Sockets, NUMA) |
| 0x0B08 | sys_affinity_hint | fd, cpu_mask | — | Weicher Core-Präferenz-Hinweis (kein Mandat) |
| 0x0B09 | sys_numa_alloc | size, node_hint, prot | Adresse | Speicher bevorzugt auf NUMA-Node allozieren |
con TASK_DETACHED : int64 := 1
con TASK_CPU_INTENSIVE : int64 := 2
con TASK_IO_INTENSIVE : int64 := 4
con TASK_LATENCY_SENSITIVE : int64 := 8
con TASK_INHERIT_CAPS : int64 := 16
| Nr | Name | Argumente | Rückgabe (rdx) | Beschreibung |
|---|---|---|---|---|
| 0x0A00 | sys_debug_print | msg, len | — | Kernel-Debug-Ausgabe (Port 0xE9 / COM1); No-Op in Release |
| 0x0A01 | sys_trace_event | event_id, data*, len | — | Trace-Event in Kernel-Ringpuffer |
| 0x0A02 | sys_perf_counter | counter_id | Wert | Hardware-Performance-Counter (RDPMC) |
| 0x0A03 | sys_stack_trace | buf*, size | Frame-Anzahl | Aktuelle Rücksprungadressen in Puffer schreiben |
| 0x0A04 | sys_watchpoint_set | addr*, size, flags | Watchpoint-ID | Hardware-Watchpoint setzen (DR0–DR3) |
| 0x0A05 | sys_watchpoint_clear | wp_id | — | Hardware-Watchpoint löschen |
Niedrig-Level-Zugang zum Island & Ocean File System. Normale Anwendungen nutzen das VFS-Interface.
| Nr | Name | Argumente | Rückgabe (rdx) | Beschreibung |
|---|---|---|---|---|
| 0x0C00 | sys_iofs_mount | dev_fd, IofsOpts* | mount_fd | Raw-Block-Device als IOFS einbinden |
| 0x0C01 | sys_iofs_compact | mount_fd, region_hint | Pages | Manuellen Kompaktierungszyklus auslösen |
| 0x0C02 | sys_iofs_page_info | mount_fd, page_id, IofsPageInfo* | — | IOFS-Page-Header und Metadaten lesen |
| 0x0C03 | sys_iofs_sandbox_enter | mount_fd | — | Panic-Sandbox aktivieren (CAP_ADMIN erforderlich) |
| 0x0C04 | sys_iofs_sandbox_exit | — | — | Panic-Sandbox verlassen |
| Bereich | Kategorie | Syscall-Anzahl |
|---|---|---|
| 0x0000–0x000D | Prozess & Threads | 14 |
| 0x0100–0x0105 | Speicher | 6 |
| 0x0200–0x0215 | Dateisystem & VFS | 22 |
| 0x0300–0x0305 | I/O & Geräte | 6 |
| 0x0400–0x040C | IPC & Synchronisation | 13 |
| 0x0500–0x0504 | Zeit | 5 |
| 0x0600–0x0609 | Netzwerk | 10 |
| 0x0700–0x0708 | Sicherheit & Capabilities | 9 |
| 0x0800–0x0812 | KI & Semantik + Wissensgraph | 19 |
| 0x0900–0x090B | Lyra Agent Interface | 12 |
| 0x0A00–0x0A05 | Debug & Telemetrie | 6 |
| 0x0B00–0x0B09 | Task & Automatische Parallelität | 10 |
| 0x0C00–0x0C04 | IOFS | 5 |
| Gesamt | 137 |
Reservierte Bereiche: 0x000E–0x00FF, 0x0106–0x01FF, 0x0216–0x02FF, 0x0813–0x08FF, 0x090C–0x09FF, 0x0D00–0xFFFF (zukünftige Kategorien).
sys_pledge beschränkt dauerhaft die erlaubten Syscall-Klassen eines Prozesses. Einmal gesetzt, nie erweiterbar.
"stdio" – read/write/poll auf bestehenden fds
"rpath" – Dateisystem lesend öffnen/stat
"wpath" – Dateisystem schreibend öffnen
"cpath" – Dateien erzeugen/löschen
"exec" – sys_spawn
"net" – Socket-Syscalls (0x0600-0x0609)
"thread" – sys_thread_spawn
"memory" – sys_mmap / sys_mprotect
"device" – sys_ioctl, sys_port_in/out
"ai" – KI-Syscalls (0x0800-0x08FF)
"lyra" – Lyra-Syscalls (0x0900-0x09FF)
"admin" – privilegierte Syscalls (sys_mount, sys_setuid, ...)
Letzte Aktualisierung: 2026-06-09