Please note: there may be some adjustments to the teaching arrangements published in the course catalogue for 2020-21. Given current circumstances related to the Covid-19 pandemic it is anticipated that some usual arrangements for teaching on campus will be modified to ensure the safety and wellbeing of students and staff on campus; further adjustments may also be necessary, or beneficial, during the course of the academic year as national requirements relating to management of the pandemic are revised.

Systems Programming (H) COMPSCI4081

  • Academic Session: 2020-21
  • School: School of Computing Science
  • Credits: 10
  • Level: Level 4 (SCQF level 10)
  • Typically Offered: Semester 1
  • Available to Visiting Students: Yes
  • Available to Erasmus Students: Yes

Short Description

This course aims to introduce students to low-level systems programming. It focusses 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.


The course will use a low-level systems programming language, for example C, to introduce these concepts. Students will be expected to learn the basics of this language in a self-study manner prior to entry, however a review of the major concepts will be provided at the start of the course.


This material is an essential prerequisite for the Operating Systems (H) and Networked Systems (H) courses.


One two-hour lecture and one one-hour laboratory session per week.

Requirements of Entry

Object Oriented Software Engineering 2 (or equivalent)

Java Programming 2 (or equivalent)

Algorithms and Data Structures 2 (or equivalent)

Excluded Courses





Examination: (80%); Coursework (20%). 


Coursework will comprise programming exercises to demonstrate their understanding of the material.

Main Assessment In: April/May

Are reassessment opportunities available for all summative assessments? No

Reassessments are normally available for all courses, except those which contribute to the Honours classification. For non-Honours courses, students are offered reassessment in all or any of the components of assessment if the satisfactory (threshold) grade for the overall course is not achieved at the first attempt. This is normally grade D3 for undergraduate students and grade C3 for postgraduate students. Exceptionally it may not be possible to offer reassessment of some coursework items, in which case the mark achieved at the first attempt will be counted towards the final course grade. Any such exceptions for this course are described below. 


The coursework cannot be redone because it is impossible to generate an equivalent piece of coursework which replicates the original one because of the follow-up work which was done subsequent to the original submission.

Course Aims

■ To introduce low-level systems programming concepts and develop the students' experience and understanding of programming in a systems language;

■ To develop the ability to craft efficient and effective code in a pointer-rich language;

■ To develop the ability to manage memory, and other resources, in a language/environment that lacks automatic storage management;

■ To demonstrate the impact of data layout, caching, non-uniform memory access, virtual memory, and other machine specifics on the performance of systems code;

■ To explore a variety of different concurrency control mechanisms, and develop practice programming concurrent code in a systems language; and

■ To introduce students to the differences between hardware platforms and operating systems, and the impact these have on systems programming.

Intended Learning Outcomes of Course

By the end of this course students should be able to:

■ Demonstrate competence in low-level systems programming;

■ Design, implement and explain the behaviour of low-level programs written in a systems language;

■ Explain the concepts of stack and heap allocation, pointers, and memory ownership, including demonstrating an understanding of issues such as memory leaks, buffer overflows, use-after-free, and race conditions;

■ Explain how data structures are represented, and how this interacts with caching and virtual memory, and to be able to demonstrate the performance impact of such issues;

■ Discuss and reason about concurrency, race conditions, and the system memory model; and

■ Build well-structured concurrent systems programs of moderate size, using libraries and static analysis tools appropriately.

Minimum Requirement for Award of Credits

Students must submit at least 75% by weight of the components (including examinations) of the course's summative assessment.