1. Parallel systems architecture.
2. Concurrency, processes and threads: interleaving, parallelism, execution order, pre-emption.
3. Working with threads: creation, joining, and problems.
4. Concurrent access to shared data: race condition and mutual exclusion, atomic operations.
5. Event synchronisation: deadlock, conditional variables, barrier.
6. Patterns: semaphores, producer-consumer, readers and writers, task pool.
7. Multithreading in practice: thread-safe programming, advantages of multithreaded programs, multithreaded program models
8. Graphical accelerator architecture.
9. Graphical accelerator programming, offload model.
10. Distributed systems: benefits and challenges, network protocols, client-server systems, remote function calling (RPC).
11. Systems models and faults: synchronous, partially synchronous and non-synchronous, system failure, faults and fault tolerance, Byzantine faults and the two-generals problem.
12. Clock time and event classification: physical clocks, universal time, time synchronisation and drift, protocol NTP, causality.
13. Logical time: Lamport clock, vector clocks, broadcast.
14. Replication and quorums: replica consistency, read-after-write consistency, state machine replication, leader-based replication.
15. Consensus: leader selection, the Raft algorithm.
16. Distributed systems use cases: consensus, causal propagation, two-stage commit.