Architecture Overview — AeroOS 26R1
Boot Chain
QEMU -kernel AeroOS-26R1-riscv64.elf
↓ OpenSBI FW_DYNAMIC firmware
OpenSBI 1.3 → jumps to kernel .text entry (0x80200000)
↓
_start.S (riscv64 boot.S)
↓ sets up stack, clears BSS, calls C
kernel_start() in main.aero
↓
aeroos_uart_puts("AeroOS 26R1 booting...")
scheduler_demo() # creates T0-T3 S-mode + default userapp
timer_enable()
worker_0() - worker_3()
Memory Layout
0x80000000 ── QEMU virt DRAM start
0x80200000 ── kernel .text entry point
... .rodata / .data / .bss
_kernel_end ── heap start (page allocator)
UART0 = 0x10000000
CLINT = 0x80080000
PLIC = 0x0C000000
Scheduler
Preemptive round-robin, dual-track:
- Cooperative yield (sys_yield) → fairness
- Timer interrupt (0.2s period) → no starvation
- 4 S-mode workers + 1 U-mode task created at boot
Context Switch
30-register frame (240 bytes), saved on trap entry:
trap_entry (trap.S)
→ save all caller-saved regs
→ determine trap cause
→ dispatch (timer / ecall / ...)
trap_return
→ restore regs, sret to U-mode or S-mode