Software Engineering (in partnership with KMITL) BSc/MSci
Systems Programming (H) COMPSCI4081
- Academic Session: 2026-27
- School: School of Computing Science
- Credits: 10
- Level: Level 4 (SCQF level 10)
- Typically Offered: Semester 1
- Available to Visiting Students: Yes
- Collaborative Online International Learning: No
- Curriculum For Life: No
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.
Timetable
One two-hour lecture and one one-hour laboratory session per week.
Excluded Courses
None
Co-requisites
None
Assessment
Examination: (80%); Coursework (20%).
Coursework will comprise programming exercises to demonstrate their understanding of the material.
Main Assessment In: April/May
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.
To develop students' understanding of sustainability and decarbonisation as related to the topic.
Intended Learning Outcomes of Course
1. By the end of this course students should be able to:
2. Demonstrate competence in low-level systems programming;
3. Design, implement and explain the behaviour of low-level programs written in a systems language;
4. 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;
5. 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;
6. Discuss and reason about concurrency, race conditions, and the system memory model; and
7. Build well-structured concurrent systems programs of moderate size, using libraries and static analysis tools appropriately.
8. Understand the concept of the carbon footprint as applied to systems programming and reason about the factors that affect it