csperkins.org

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:

Prerequisites

Systems Programming (H), Operating Systems (H), Networked Systems (H), and Functional Programming (H), or equivalent, are pre-requisites.

Timetable

The course consists of a series of pre-recorded lectures delivered over 10 weeks, supported by weekly discussion and laboratory sessions.

Recommended Reading

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 research papers.

Credits

This course is offered at Level H and at Level M. It is worth 10 credits.

Assessment

Assessment is by examination (80%) and assessed coursework (20%).

Coursework:

Past exam papers:

Lecture Recordings

Laboratory Handouts