====== 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