Concurrency and Distributed Systems
      The language of Communicating Sequential Processes (CSP) is a powerful tool for understanding concurrent behaviour. It models parallel execution and inter-process communication, it supports a practical theory of correctness and refinement, and it is attractive and intuitive to use in specification.
Course dates
Objectives
At the end of the course, students will have a deeper understanding of concurrency. They will be better equipped to design and develop distributed systems.
Contents
- Events and processes:
 - models of concurrency; representing communication and interaction; components and interfaces; behavioural and state-based specification; levels of abstraction.
 - Interaction:
 - state machines; internal and external choice; nondeterminism; safety and liveness constraints; algebraic properties; traces and refusals; process refinement.
 - Concurrency:
 - parallel combination; specifying interfaces; static alphabets; refinement in context; dynamic process creation and mobile code.
 - Abstraction:
 - changing levels of abstraction; mechanisms: interleaving, renaming, and hiding; abstraction and nondeterminism; encapsulation and refinement.
 - Communication:
 - shared channels; synchronous and asynchronous communication; modelling values and state; input and output; indexing and replication; data independence.
 - Sequential composition:
 - distributed termination; sequential composition of parallel components; abstract data types; processes and state; polling, interrupts, and timeouts.
 - Applications:
 - case studies and exercises, including: communication protocols; critical systems; caching algorithms; objects, classes, and threads.
 
Requirements
There are no prerequisites for this course, although some familiarity with discrete mathematics would be useful: Software engineering mathematics would be an ideal preparation.
[an error occurred while processing this directive]