====== Lyx OS – Syscall-ABI v1.0 ======
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.
→ [[lyxos:anwendungen|Anwendungen entwickeln]] · [[lyxos:architektur|Architektur]] · [[lyxos:start|Übersicht]]
----
===== 1. Aufrufkonvention =====
Lyx OS nutzt ausschließlich die ''SYSCALL''/''SYSRET''-Instruktion (AMD64 Fast Syscall). Es gibt keine Int-80-Kompatibilität und kein Vsyscall-Interface.
==== Register-Layout ====
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
==== Zwei-Register-Rückgabe ====
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;
}
==== NASM-Beispiel ====
; 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-Mapping ====
^ 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)'' |
----
===== 2. Fehlercodes =====
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
----
===== 3. Standard-Konstanten =====
// 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
----
===== 4. Syscall-Tabelle =====
==== Kategorie 0x0000 – Prozess & Threads ====
^ 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 |
==== Kategorie 0x0100 – Speicher ====
^ 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
==== Kategorie 0x0200 – Dateisystem & VFS ====
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
==== Kategorie 0x0300 – I/O & Geräte ====
^ 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'') |
==== Kategorie 0x0400 – IPC & Synchronisation ====
^ 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) |
==== Kategorie 0x0500 – Zeit ====
^ 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
==== Kategorie 0x0600 – Netzwerk ====
^ 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 |
==== Kategorie 0x0700 – Sicherheit & Capabilities ====
^ 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
==== Kategorie 0x0800 – KI & Semantik ====
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 |
==== Kategorie 0x0900 – Lyra Agent Interface ====
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 |
==== Kategorie 0x0B00 – Task & Automatische Parallelität ====
^ 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
==== Kategorie 0x0A00 – Debug & Telemetrie ====
^ 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 |
==== Kategorie 0x0C00 – IOFS ====
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 |
----
===== 5. Übersicht aller Kategorien =====
^ 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).
----
===== 6. Pledge-Promises =====
''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