/projects/tiny-os
tiny-os
RV64 operating system with traps, Sv39 paging, preemption, and a disk-backed copy-on-write filesystem.
systems
tiny-os
tiny-os is a RISC-V operating system project built in C and run under QEMU. Based on the public repo, resume, and LinkedIn write-up, it includes Sv39 page tables, trap and syscall handling, timer-interrupt preemption, round-robin scheduling, a working shell, and a disk-backed copy-on-write filesystem with reflinks and snapshot plumbing.
date: 2025 - Presentstatus: active
overview
The project is a deliberate attempt to understand kernels by building the hard parts directly: bootstrapping, paging, traps, scheduling, filesystems, and the userland surface needed to exercise them meaningfully.
implementation
Booted and tested the OS under QEMU on RV64 with C plus small amounts of assembly and Python tooling.
Implemented paging, process structures, context switching, sleep/wakeup, and timer-based preemption.
Built out a functional shell and disk-backed filesystem with path resolution, directories, read/write, unlink, rename, clone, and snapshot-oriented primitives.
challenges
Growing the storage stack forced work across multiple layers at once: block driver, cache, metadata layout, directory traversal, and CoW bookkeeping.
User/kernel transitions and process lifecycle handling had to be correct enough to support repeated interactive testing.
The project is actively expanding toward telemetry collection and networking, so interfaces need to stay debuggable as complexity grows.
outcomes
The OS now boots into an interactive shell and supports realistic filesystem workflows instead of one-off kernel demos.
You have a platform you can use for future telemetry, regression testing, and networking experiments.
architecture notes
The storage stack includes a VirtIO block driver, buffer cache, mkfs tool, inode and directory traversal paths, and CoW-aware write handling.
User-mode support includes separate address spaces, trampoline and trapframe handling, zombies, and scheduler tracing hooks.
The shell makes kernel features testable from userland instead of relying only on debug prints.
stack
CRISC-VQEMUPythonVirtIO
highlights
Built Sv39 paging, trap/syscall entry and return, timer interrupts, and round-robin scheduling.
Implemented a disk-backed copy-on-write filesystem with refcounted extents, reflink clone, and snapshot plumbing.
Added a real interactive shell with filesystem commands and userland execution from /bin.
metrics
user tests
45+
stress loops
100+
repo stars
4
media

A workstation-style view of shell interaction, kernel logs, and filesystem state.

Trace-like visualization for preemption and scheduler work.