Advanced Operating Systems M (2010-2011)
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, net books, 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 will review research literature on systems programming techniques and operating systems design, discuss the limitations of deployed systems, and show how the operating system infrastructure might evolve to address the challenges of supporting modern computing systems.
Aims and Objectives
This course aims to explore the programming language and operating systems facilities essential to the implementation of real-time, reactive, and embedded systems. To discuss the limitations of industry-standard operating systems, and introduce new approaches to operating systems design that address the challenges of security, robustness, and concurrency. To give participants an understanding of the practical engineering issues caused by the design of real-time and concurrent systems; to suggest appropriate implementation techniques for such systems.
At the end of this course, students should be able to:
- clearly differentiate the different issues that arise in designing real-time systems;
- analyse a variety of real-time scheduling techniques, and prove the correctness of the resulting schedule; implement basic scheduling algorithms;
- apply real-time scheduling theory to the design and implementation of a real-world system using the POSIX real-time extensions; demonstrate how to manage resource access in such a system;
- describe how embedded systems are constructed, and discuss the limitations and advantages of C as a systems programming language; understand how managed code and advanced type systems might be used in the design and implementation of future operating systems;
- discuss the advantages and disadvantages of integrating garbage collection with the operating system/runtime; understand the operation of popular garbage collection algorithms; know when it might be appropriate to apply garbage collection and managed runtimes to real-time systems;
- 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;
- construct simple concurrent programs using transactional memory (Haskell STM) and message passing (Erlang; Scala actors), to understand trade-offs and implementation decisions.
Prerequisites
Required pre-requisite courses are Computer Systems 2, Operating Systems 3, Advanced Programming 3, and Functional Programming 4.
Computer Architecture 4 is a recommended co-requisite.
Timetable
The course runs during semester 2, and consists of lectures and associated tutorials. There are no scheduled laboratory sessions.
Recommended Reading
Jane W. S. Liu, "Real-Time Systems", Prentice Hall, 2000, ISBN 0130996513 is recommended background reading for the real-time systems parts of the course. Research papers will be set as required reading for some tutorials, and as background reading for some lectures.
Credits
This is a level M course, worth 10 credits.
Assessment
The course will be assessed by a combination of coursework (20%) and a final examination (80%).
Coursework:
Lecture Handouts
- Lecture 1: Introduction and Course Outline
- Lecture 2: Introduction to Real-time Systems
- Lecture 3: Clock-driven Real-time Scheduling
- Lecture 4: Priority-driven Scheduling of Periodic Tasks (1)
- Lecture 5: Priority-driven Scheduling of Periodic Tasks (2)
- Lecture 6: Priority-driven Scheduling of Aperiodic and Sporadic Tasks (1)
- Lecture 7: Priority-driven Scheduling of Aperiodic and Sporadic Tasks (2)
- Lecture 8: Resource Access Control in Real-time Systems
- Lecture 9: Implementing Real-time Systems
- Lecture 10: Programming Real-time and Embedded Systems
- Lecture 11: Evolution of Systems Programming
- Lecture 12: Dependable Device Drivers
- Lecture 13: Dependable Kernel Architectures
- Lecture 14: Garbage Collection (1)
- Lecture 15: Garbage Collection (2)
- Lecture 16: Concurrency (1)
- Lecture 17: Concurrency (2)
- Lecture 18: Software Transactional Memory
- Lecture 19: Message Passing Systems
- Lecture 20: Wrap-up and Review
Tutorial Handouts
- Tutorial 1: Basics of Real-time Systems and Clock-drive Scheduling
- Tutorial 2: Priority-driven Scheduling of Periodic Tasks
- Tutorial 3: Priority-driven Scheduling of Aperiodic and Sporadic Tasks
- Tutorial 4: Systems Programming
- Tutorial 5: Dependable Kernels and Device Drivers
- Tutorial 6: Garbage Collection
- Tutorial 7: Concurrency (1)
- Tutorial 8: Concurrency (2)