Third assignment same thing but a preemptive scheduler. For the second assignment we were given a bootloader and a partially-implemented kernel, and we had to finish the kernel by writing a non-preemptive (cooperative) scheduler (including implementing context switching and so on).
The first assignment was to write a bootloader in x86 assembly.