  An operating system project suitable for undergraduate computing/electrical
sciences students is presented. The project can be used as a course project in
a one semester course, or as a self-study project for motivated students. The
course is organized such that a student with a basic background in programming
and computer organization can follow the implementation road map available
online, and build the OS from scratch on her personal machine/laptop, with
minimal instructional supervision. The student is provided with a simulated
abstract machine, an application interface specification, specification and
design of the OS, and a step by step project implementation road map. The
functionalities of the OS include multitasking, virtual memory, semaphores,
shared memory, an elementary file system, interrupt driven disk and console
I/O, and a limited multi-user support. The final stage of the project involves
porting the OS to a two-core machine. An independent one semester compiler
design project, where the student builds a compiler for a tiny object oriented
programming language that generates target code that can be loaded and executed
by the OS is also briefly discussed.
