Bare metal · x86 · 2026
A teaching kernel, six subsystems deep, on real hardware
Six subsystems built on the XINU teaching kernel, booted on an Intel Galileo board and driven over a serial console.
Xinu for galileo -- version #2 (Irfan Firosh) Sun Sep 13 02:36:44 AM EDT 2026 Ethernet Link is Up 233393696 bytes of free memory. Free list: 116557 bytes of Xinu code. 16817640 bytes of data. === process management ===main() runs as pid 3, parent state 2 === garbage collection ===gc_getmem returned 011451E0; leaving it unfreedkill() will reclaim it when this process exits === producer-consumer ===consumer received: HELLO XINU Hello World! === dynamic priority scheduling ===PID 6 CPU-bound clkcounterms=7032 cpu=372 PID 7 CPU-bounavgresp=17 prid clkcountermso=1=7077 cpu=374 avgresp=17 prio=1PID 8 I/O-bound clkcounterms=7129 cpu=0 avgresp=1 prio=8PID 9 I/O-bound clkcounterms=7133 cpu=0 avgresp=1 prio=8PID 10 Sneaky clkcounterms=7141 cpu=5350 avgresp=1 prio=8 === demo complete === 01
Process management
A second creation path changes where a process lands when its top-level function returns.
02
Scheduling
Priority follows behaviour: burn a whole time slice and you are demoted, block early and you are promoted.
03
Deadlock detection
Semaphore ownership and waiting are kept as a graph, and the clock handler walks it for cycles every 500 ms.
04
Garbage collection
Every allocation is charged to the process that made it, and kill() reclaims whatever it never freed.
05
Filesystem
A file offset resolves through direct blocks and then one, two or three levels of indirection.