Skip to content

Asuro OS Architecture

System Overview

flowchart TB
    subgraph USERSPACE [" User Space "]
        direction LR
        VTERM["VTerminal\nLVGL Terminal"]
        STDIO["Stdio\nCommands · Params"]
        PROGMGR["Prog Manager\nBuilt-in cmds"]
        FILEDISPATCH["File Dispatch\nMagic routing"]

        VTERM --- STDIO --- PROGMGR --- FILEDISPATCH
    end

    subgraph WASM_LAYER [" WASM Integration "]
        direction LR
        WASMRUNNER["WASM Runner\n1024 ticks/yield"]
        WASMSHIM["WASM Shim\nProcess ↔ VM"]
        WASMIO["WASM IO\nWASI ↔ StdIO"]
        WASURO["WASURO VM\nParser · WASI P1"]

        WASMRUNNER --- WASMSHIM --- WASMIO --- WASURO
    end

    subgraph PROC_LAYER [" Process Management "]
        direction LR
        PROCMGR["Process Manager\ncreate · kill · yield · reap"]
        CTXSW["Context Switcher\nISR32 · PUSHAD"]
        SCHED["Scheduler\nRound-robin · Priority"]

        PROCMGR --- CTXSW --- SCHED
    end

    subgraph GFX_LAYER [" Graphics "]
        direction LR
        LVGL["LVGL 9.x\nWidgets · Styles"]
        WINMGR["Window Manager\n16 windows · Z-order"]
        DESKTOP_W["Desktop\nDock · Launcher"]
        GFXREFRESH["GFX Refresh\n~256 FPS"]
        VIDEODRV["Video\nVESA · DoubleBuffer"]

        LVGL --- WINMGR --- DESKTOP_W --- GFXREFRESH --- VIDEODRV
    end

    subgraph SERVICES [" Services "]
        direction LR
        VFS["VFS\nPath resolution\n32 handles"]
        STORMGMT["Storage Mgmt\nDevices · Volumes"]
        NETSTACK["Network Stack\nETH → IP → TCP/UDP"]

        VFS --- STORMGMT --- NETSTACK
    end

    subgraph FILESYS [" Filesystems & NICs "]
        direction LR
        FAT32["FAT32\nCluster chains"]
        RAMDRIVE["RAM Drive\n/disk/ram"]
        E1000["E1000 NIC\nIntel I217"]

        FAT32 --- RAMDRIVE --- E1000
    end

    subgraph DRIVER_LAYER [" Drivers "]
        direction LR
        DRVMGMT["Driver Mgmt\nAuto-match"]
        IDE["IDE / ATA\nPIO R/W"]
        INPUT["Input\nPS/2 + USB\nKeyboard · Mouse"]
        USBSTACK["USB Stack\nUHCI · OHCI\nEHCI · XHCI"]

        DRVMGMT --- IDE --- INPUT --- USBSTACK
    end

    subgraph BUS_LAYER [" Bus "]
        PCI["PCI Bus — Config Space Enumeration — BAR · IRQ · Class"]
    end

    subgraph MEM_LAYER [" Memory "]
        direction LR
        LMM["Heap Allocator\nkalloc / kfree"]
        VMM["Virtual MM\nPage Directory"]
        PMM["Physical MM\n4MiB block bitmap"]

        LMM --- VMM --- PMM
    end

    subgraph CPU_LAYER [" CPU Primitives "]
        direction LR
        GDT["GDT\n4GB flat"]
        IDT["IDT\n256 gates"]
        ISR["ISR Manager\n+ Faults"]
        IRQ["IRQ\nPIC remap"]
        PIT["PIT Timer\n1024 Hz"]
        TSS["TSS\nRing 0 stack"]

        GDT --- IDT --- ISR --- IRQ --- PIT --- TSS
    end

    subgraph BOOT_LAYER [" Boot & Utilities "]
        direction LR
        MULTIBOOT["Multiboot\nGRUB"]
        SERIAL["Serial\nSyslog"]
        RTC["RTC\nBIOS Data"]
        UTIL["Strings · Lists\nHashmap · MD5\nRNG · Tracer"]

        MULTIBOOT --- SERIAL --- RTC --- UTIL
    end

    USERSPACE --> WASM_LAYER
    WASM_LAYER --> PROC_LAYER
    USERSPACE --> GFX_LAYER
    PROC_LAYER --> SERVICES
    GFX_LAYER --> SERVICES
    SERVICES --> FILESYS
    FILESYS --> DRIVER_LAYER
    DRIVER_LAYER --> BUS_LAYER
    BUS_LAYER --> MEM_LAYER
    MEM_LAYER --> CPU_LAYER
    CPU_LAYER --> BOOT_LAYER

Boot Sequence

flowchart LR
    A["GRUB\nMultiboot"]
    B["Serial\nSyslog"]
    C["GDT · IDT\nIRQ"]
    D["PMM → VMM\n→ Heap"]
    E["Stdio · TSS\nScheduler"]
    F["Video\nVESA"]
    G["VFS\nDrivers · PCI"]
    H["FAT32 · USB\nNetwork"]
    I["LVGL\nDesktop"]
    J["Context\nSwitcher"]
    K(("Idle\nHLT"))

    A --> B --> C --> D --> E --> F --> G --> H --> I --> J --> K

Memory Management

flowchart TB
    subgraph LMM [" Logical Memory Manager "]
        L1["kalloc(size) / kfree(ptr)"]
        L2["8-byte allocation units"]
        L3["16-byte size prefix · SSE aligned"]
        L4["klalloc for large multi-page"]
    end

    subgraph VMM [" Virtual Memory Manager "]
        V1["x86 Page Directory"]
        V2["Maps 4MiB physical → virtual"]
        V3["Kernel page directory"]
    end

    subgraph PMM [" Physical Memory Manager "]
        P1["1024 × 4MiB blocks"]
        P2["Dual bitmap: Present + Allocated"]
        P3["Reads multiboot memory map"]
    end

    LMM -->|"requests pages"| VMM
    VMM -->|"allocates blocks"| PMM

Process Lifecycle

stateDiagram-v2
    [*] --> Created : create()
    Created --> Ready : scheduled

    Ready --> Running : picked by scheduler
    Running --> Ready : quantum expired

    Running --> Suspended : proc_suspend
    Suspended --> Ready : proc_resume

    Running --> Awaiting : proc_await
    Awaiting --> Ready : event fired

    Running --> Finished : proc_exit / return
    Running --> Error : fault

    Finished --> [*] : reaped
    Error --> [*] : reaped

Network Stack

flowchart TB
    E1000["E1000 NIC Driver"]
    NIC["net.pas — NIC Interface"]
    ETH["Ethernet L2 — EtherType dispatch"]
    ARP["ARP — MAC ↔ IP cache"]
    IPV4["IPv4 — Routing · Fragmentation"]
    ICMP["ICMP — Ping"]
    TCP["TCP — Handshake · Retransmit"]
    UDP["UDP — Datagrams"]
    DHCP["DHCP Client — Auto-config"]

    E1000 --> NIC
    NIC --> ETH
    ETH --> ARP
    ETH --> IPV4
    IPV4 --> ICMP
    IPV4 --> TCP
    IPV4 --> UDP
    UDP --> DHCP

USB Stack

flowchart TB
    PCI_D["PCI Discovery"]
    USB["USB Init"]
    UHCI["UHCI"]
    OHCI["OHCI"]
    EHCI["EHCI"]
    XHCI["XHCI"]
    CORE["USB Core\nEnumeration · Transfers"]
    HUB["Hub Driver"]
    HID_KB["USB Keyboard"]
    HID_MS["USB Mouse"]
    MSC["USB Mass Storage"]
    STOR["Storage Management"]

    PCI_D --> USB
    USB --> UHCI
    USB --> OHCI
    USB --> EHCI
    USB --> XHCI
    UHCI --> CORE
    OHCI --> CORE
    EHCI --> CORE
    XHCI --> CORE
    CORE --> HUB
    CORE --> HID_KB
    CORE --> HID_MS
    CORE --> MSC
    HUB -->|"downstream"| CORE
    MSC --> STOR

Graphics Pipeline

flowchart LR
    subgraph RENDER [" Rendering "]
        VESA["VESA Driver\n8/16/24/32 BPP"]
        DBUF["Double Buffer\nSSE 128-bit copy"]
        VDRV["Video Abstraction"]

        VESA --> VDRV
        DBUF --> VDRV
    end

    subgraph UI [" UI Toolkit "]
        LVGL_G["LVGL 9.x"]
        WIN["Window Manager\n16 windows · Z-order"]
        DESK["Desktop\nDock · Launcher · Clock"]

        LVGL_G --> WIN --> DESK
    end

    subgraph LOOP [" Refresh Loop "]
        TMR["Timer Hook\n~256 FPS"]
    end

    TMR -->|"tick"| DESK
    TMR -->|"lv_handler"| LVGL_G
    TMR -->|"Flush"| VDRV

Terminal Command Flow

flowchart LR
    A["User types\ncommand"]
    B["VTerminal\nparse input"]
    C{"Command\nregistered?"}
    D["stdio.findCommand\nexecute as process"]
    E{"File\nexists?"}
    F["filedispatch\ncheck magic bytes"]
    G["Error:\nunknown command"]
    H["wasmrunner\ncreate VM process"]
    I["Process Manager\npreemptive execution"]
    J["Output drains\nback to VTerminal"]

    A --> B --> C
    C -->|"Yes"| D --> I
    C -->|"No"| E
    E -->|"Yes"| F -->|"WASM magic"| H --> I
    E -->|"No"| G
    I --> J

WASM Execution

flowchart TB
    subgraph LOAD [" Loading "]
        A["File Dispatch\nmatches 0x00 0x61 0x73 0x6D"]
        B["Read .wasm via VFS"]
        C["wasm_load — parse binary"]
        D["Create shim +\nserialize params"]

        A --> B --> C --> D
    end

    subgraph WIRE [" Wiring "]
        E["Wire WASI hooks\nfd_write · fd_read\nclock · random · args"]
        F["Register host functions"]
        G["Create preemptive process"]

        E --> F --> G
    end

    subgraph RUN [" Execution Loop "]
        H["wasm_prepare_start"]
        I{"Running?"}
        J["Execute 1024 opcodes"]
        K["proc_yield to scheduler"]
        L["Propagate exit code"]

        H --> I
        I -->|"Yes"| J --> K --> I
        I -->|"No"| L
    end

    LOAD --> WIRE --> RUN