This course covers advanced topics systems programming, building on the
material in Systems Programming (H) to explore new techniques for safer
and more effective systems programming. It will focus on programming in
an unmanaged environment, where data layout matters, and where
performance is critical. This might include operating systems kernels,
device drivers, low-level networking code, or other areas where the
software-machine interface becomes critical.
This course builds on Systems Programming (H) and Functional Programming
(H), but does not involve programming in C or Haskell.
Programs in those languages are used as examples, however, so some
familiarity with those languages is assumed.
The computing landscape has changed radically in the last decade. The
desktop personal computer has become largely irrelevant, and
heterogeneous, multicore, mobile, and real-time systems – smart mobile
phones, netbooks, and laptops – are now ubiquitous. Yet, despite this
shift, these systems are still programmed in C, and the majority run some
variant of the Unix operating system.
This course aims to explore the features of modern programming languages
and operating systems that can ease the challenges of systems
programming, considering type systems and run-time support. It will
review the research literature on systems programming and operating
system interfaces, discuss the limitations of deployed systems, and
consider how systems programming might evolve to address the challenges
of supporting modern computing systems. Particular emphasis will be
placed on system correctness and secure programming, to ensure the
resulting systems are safe to use in an adversarial environment.
By the end of the course, students should be able to:
Systems Programming (H), Operating Systems (H), Networked Systems (H),
and Functional Programming (H), or equivalent, are pre-requisites.
The course consists of a series of pre-recorded lectures delivered
over 10 weeks, supported by weekly discussion and laboratory sessions.
You are expected to learn the basics of the Rust programming language
as part of this course. The following books may be useful:
In addition, research papers and blog posts will be highlighted during
the lectures to help illustrate important ideas and concepts. You are
expected to read this material. There is a guide to
how to read a research paper that might be useful when reading
This course is offered at Level H and at Level M. It is worth 10 credits.
Assessment is by examination (80%) and assessed coursework (20%).