|Module Name||Concurrent Systems and Operating Systems|
|ECTS Weighting ||5 ECTS|
|Semester Taught||Semester 2|
|Module Coordinator/s||Dr Andrew Butterfield|
Module Learning Outcomes
On successful completion of this module, students will be able to:
- Recognise standard concurrent programming problems;
- Solve concurrent programming problems using standard techniques;
- Design and implement concurrent programs using standard threading techniques;
- Develop models of concurrent programs using concurrent modelling languages;
- Verify the correctness of simple concurrent programs using model-checking;
- Describe algorithms, data structures and policies used in modern operating systems for thread scheduling, memory management, disk I/O and file management.
The first part of this module introduces students to concurrency and concurrent programming. The aim is to provide students with the ability to develop concurrent software systems using standard techniques and constructs. To achieve this aim, students must have a thorough understanding of common problems that arise in concurrent systems and how those problems can be avoided. This module will teach the use of tools and techniques for modelling and verifying the correctness of concurrent systems, applying this through practical laboratory exercises in which small concurrent software systems are developed.
The second part of the module addresses various aspects of the design of modern operating systems. The main aim is to explore how programmers can apply a knowledge of operating system features to the design of efficient applications. This is achieved by examining common algorithms and policies used by modern operating systems, as well as the facilities provided to application programmers. This knowledge is then applied in laboratory exercises.
Concurrency: introduction to concurrency; simple multi-threaded programs in C; modelling concurrent systems; interference; mutual exclusion; critical sections; verification of concurrent programs; semaphores; monitors. Operating Systems: operating system architectures; memory management; processor scheduling; disk I/O; file systems.
Teaching and Learning Methods
The course is mainly delivered through lectures and tutorials, with four practical exercises that cover various aspects of the material. Typically these include thread based programming, concurrency modelling and verification, and algorithmic aspects of operating systems, such as scheduling. Laboratory classes are used to give feedback on practical work, as required.
These are tentative at present, particularly the Examination component.
|Assessment Component||Brief Description||Learning Outcomes Addressed||% of Total||Week Set||Week Due|
|Examination||In-person Examination (2hrs)||LO1, LO2, LO3, LO4, LO6||80%||N/A||N/A|
|Practical 1||Tool Usage||LO3||2%||Week 1||Week 2|
|Practical 2||Thread Programming||LO2, LO3||6%||Week 3||Week 5|
|Practical 3||Concurrency Modelling||LO1, LO4, LO5||6%||Week 6||Week 8|
|Practical 4||OS Coding (e.g. Scheduler)||LO1, LO2, LO6||6%||Week 8||Week 10|
Examination (2 hours 30 mins, 100%, real-time online).
Contact Hours and Indicative Student Workload
(Lectures and tutorials are considered somewhat interchangeable)
|Contact Hours (scheduled hours per student over full module), broken down by:||37 hours|
|Tutorial or seminar||11 hours|
|Independent Study (outside scheduled contact hours), broken down by:||72 hours|
|Preparation for classes and review of material (including preparation for examination, if applicable)||36 hours|
|Completion of assessments (including examination, if applicable)||36 hours|
|Total Hours||109 hours|
Recommended Reading List
- SF Computer Science: either CSU22014 (Systems Programming, Semester 1) or CSU22061 (Intermediate Programming, Semester 1)
- JS Engineering: CSU11E03 (Computer Engineering I, Semester 2) and CSU22E03 (Computer Engineering, Semester 1)
Other/alternative non-module prerequisites:
The programming exercises all use the C programming language so some familiarity and experience with C is required.