In this project, you will extend a small operating system to set up a simple system call
and initialize a simple page table.
Since a lot of this code requires more direct access to the computer, you will be working
on your local machine using VirtualBox. VirtualBox can run on top of Windows, Linux, or
Note that if you already run Linux inside VirtualBox (i.e., not natively), then typically you
will not be able to use the second instance of VirtualBox inside Linux itself. So, you will have
to configure and use VirtualBox that is outside of Linux (i.e., in your Windows or macOS
Note that youwill not be able to use the labmachines (other than to just quickly check that
your code still “compiles”). Note that even though the lab machines compile your code, the
resulting binaries are broken due to subtle bugs in the older version of the linker (used by the
lab machines) and you will not be able to run these binaries. These bugs will only manifest
under special conditions, e.g., when using “pure binary” position-independent executables
that we use in this project. Consequently, even compilation will require your local Linux
installation, which uses the latest versions of `gcc’ and `ld’ tools that do not have those bugs.
You will work in groups for this project. The academic integrity rules stay the same as in previous
course assignments and projects.
You are provided with the code of a tiny operating system, which is not based on any other OS
(e.g., Linux). This OS does not include any interrupt or trap handlers, except minimal system call
The system consists of three pieces: (1). the boot loader (boot.efi), which loads the OS kernel
and a user application into memory; you are already given a binary for the boot loader to sim-
plify the build process; (2). the OS kernel (kernel_x86_64), a piece of software that runs in the
privileged mode (ring 0); (3). a simple user application (user_x86_64), a piece of software that
runs in the unprivileged mode (ring 3).
The OS kernel supports a video frame buer which uses 800×600 (RGB32) video mode. On top
of the video frame buffer console, the system implements text output functions such as printf,
which is analogous to the user-space equivalents for the most part but used inside the OS kernel.
To build this OS, you need a Linux development environment and tools. Although the lab ma-
chines will compile the code, the resulting binaries are broken (see above). More importantly, the
lab machines will not be able to run this OS.
Thus, we recommend using latest Linux distributions instead. We have tested compilation
with Ubuntu 20.04,which you can obtain fromhttps://ubuntu.com/download/desktop/thank-you?
version=20.04.3&architecture=amd64. (See also theWSL option for Ubuntu below, for which
you need to follow our WSL tutorial.)
To build this OS, you have two options: (1) UseWSL+Ubuntu inWindows, this can be really
convenient if you use latest versions ofWindows 10 sinceWSL will make file transfers very easy;
please see the up-to-dateWSL tutorial posted on Canvas and our lecture on 10/21; (2) Use Linux,
e.g., Ubuntu, either in a virtual machine or natively.
Irrespective of whether you useWSL or “real” Linux, you need to install necessary packages.
For Ubuntu, you can just install the standard list of packages used in our course:
sudo apt-get update
sudo apt-get install git gdb valgrind zip unzip build-essential genisoimage