Advanced Systems Programming H/M (2022-2023)
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.
Aims and Objectives
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:
To discuss the advantages and disadvantages of C as a systems
programming language, and to compare and contrast this with a modern
systems programming language, for example Rust; to discuss the role
of the type system, static analysis, and verification tools in
systems programming, and show awareness of how to model system
properties using the type system to avoid errors;
To discuss the challenges of secure low-level programming and write
secure code in a modern systems programming language to perform
systems programming tasks such as parsing hostile network input; show
awareness of security problems in programs written in C;
To discuss the advantages and disadvantages of integrating automatic
memory management with the operating system/runtime, to understand
the operation of popular garbage collection algorithms and
alternative techniques for memory management, and know when it might
be appropriate to apply such techniques and managed run-times to
real-time systems and/or operating systems;
To understand the impact of heterogeneous multicore systems on
operating systems, compare and evaluate different programming models
for concurrent systems, their implementation, and their impact on
operating systems; and
To construct and/or analyse simple programming to demonstrate
understanding of novel techniques for memory management and/or
concurrent programming, to understand the trade-offs and
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:
Steve Klabnik and Carol Nichols, "The Rust Programming Language",
2nd Edition, 2018, ISBN 978-1-59327-828-1
free online edition).
Jim Blandy, Jason Orendorff, and Leonora Tindall,
"Programming Rust: Fast, Safe Systems Development",
Free online access via University Library)
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%).
Past exam papers: