Something is off about scheduling, I don't think the kernel is handing out all the available time to processes that are available to run.
@@ -165,6 +165,7 @@ static void init_stage2()
#endif
for (;;) {
+ sleep(3600 * TICKS_PER_SECOND);
asm("hlt");
}