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