Mailing list: We will use piazza for online discussions
Course Summary:
This course covers the fundamental concepts of operating
systems. Topics including OS structure, processes/thread
management, synchronization, deadlocks, file systems, I/O and
memory management will be discussed.
A good understanding of C or C++ is required. A prior
understanding of assembly programming will be useful, especially
x86 assembly, bu this is not prerequisite knowledge.
Advanced topics including those based on distributed
computing will be discussed, time permitting. Additionally, case
studies based on a real-world operating system (e.g., Linux)
will be covered, where appropriate, throughout the course.
You will be required to tackle projects that involve
kernel-level programming of existing systems such as Linux, and
possibly writing your own OS abstractions/features on bare-bones
hardware. In the latter case, we will use PC
emulation/virtualization tools such as Bochs, QEMU/KVM, VMWare
Workstation/Player and Oracle's VirtualBox.
Several projects may require development and use of our own
in-house operating system, called Quest.
Socket programming and abstractions such as remote procedure
calls may be required for some of the projects.
Prerequisites: CS210 (or the consent of the instructor).
NB: Due to Covid-19, this is a Learn-from-anywhere
course, so lectures will be recorded live and posted on storage
servers for those who cannot attend due to timezone differences.
Labs will be conducted on campus for those who wish to attend,
with zoom links for those observing remotely. All office hours
will be remote-only, via zoom, using the links provided.
This course is based on CS552 but is intended for
undergraduates. While we will stick to the topics covered in
CS552, we will adjust the expectations accordingly.
This is a pilot course, currently being offered on a one-time
basis.
Further Information:
"Linux Device Drivers," by Corbet, Kroah-Hartman, and
Rubini, O'Reilly . This is useful to understand how kernel
modules are implemented in Linux, as well as to find out about
synchronization capabilities, interrupt and device management.
The following links are primarily for those curious to know
how to write their own operating system:
Lots of info on bootloaders, PC emulators and hardware.
This site has come a long way over the years and is very
valuable if you want to write your own OS. My research group
has used this site a lot.
For those wishing to find out more about PC
emulators/virtualizers, the following are particularly relevant:
VMPlayer is free but Workstation (PC) and Fusion (Mac) are
not. However, Workstation and Fusion both now support nested
virtual machines that rely on x86 hardware virtualization,
such as VMX/EPT support on Intel processors. For most, this
is not important, but if you're a bleeding-edge
researcher/developer who wants to design a system or a
hypervisor in a VM this is extremely useful. Without it, you
have to work on the bare metal.
this has a very good user interface, like VMware's
software. For getting up and running this or one of the
VMware tools is probably easiest but the ones below are all
very good for developing and debugging kernel code.
this is actually a Linux kernel loadable module that
exposes the hardware virtualization features of Intel VT and
AMD-V processors.
The concept of "threads" will feature as part of this course.
Some useful documentation on threads includes:
Pthreads
Programming, Bradford Nichols, Dick Buttlar &
Jacqueline Proulx Farrell, O'Reilly, ISBN 1-56592-115-1.
Multithreaded Programming with Pthreads, Bil Lewis and
Daniel J. Berg, Sun Microsystems Press, ISBN 0-13-680729-1.
Using a Solaris-based workstation or PC, use "answerbook2"
(or the older "answerbook"), to access Sun's Multithreaded
Programming Guide.
Additional textbooks relevant to this course include:
"Understanding the Linux Kernel", Daniel P. Bovet and Marco
Cesati, O'Reilly, 2001 (ISBN: 0-596-00002-2),
"Advanced Programming in the UNIX Environment", W. Richard
Stevens, Addison Wesley, 2000 (ISBN: 0201563177).
"UNIX Network Programming", Volume 1, W. Richard Stevens,
Prentice Hall, 1998 (ISBN: 0-13-490012-X).
Useful documentation on the Intel 64 and IA-32
architectures is included in the Software Developer's Manuals.
These manuals are split into several volumes, and can be found here.