Official course description:

Full info last published 15/05-24
Course info
ECTS points:
Course code:
Participants max:
Offered to guest students:
Offered to exchange students:
Offered as a single subject:
Price for EU/EEA citizens (Single Subject):
10625 DKK
BSc in Software Development
Course manager
Associate Professor
Course semester
Efterår 2024
26 August 2024
24 January 2025
Exam type
ekstern censur
Grade Scale
Exam Language

This hands-on course teaches you how the design, implementation, and implications, of systems software influence your task as an application programmer. You will get an in-depth understanding of how hardware and the operating system work; in the process, you will learn how computers actually work, and what actually happens when you run an application. This enables you to fully exploit underlying hardware and systems software to write high-quality software.


Behind every running application, there is systems software: software that provides a platform for other software. Examples include operating systems, scientific computing software, game engines, industrial control systems, and software as a service (SaaS). To write quality software that is e.g. correct, high performance, energy efficient, and exploiting hardware features, an application developer must understand how systems software affects the behavior and performance of applications---they must understand the design, implementation, and implications, of systems software.

In this course, you study the most important systems software, using the most important systems programming language: Operating Systems, and C. You gain a deeper understanding of hardware, how it runs software at the lowest level (Assembly), and how high-level (C) code compiles (gcc) to low-level machine code. You get hands-on experience with the compilation process, build automation (make), and with debugging machine code (gdb). Finally, using C, you gain hands-on experience with buffer overflow vulnerabilities, high-performance programming utilizing compiler optimizations and hardware features (e.g. SIMD and multithreading), and with system calls (e.g. file- and network I/O). To facilitate this, you will learn about the three fundamental computer system abstractions (interpreter, memory, communication), the fundamental operating system concepts (processes, virtual memory, files), other key systems concepts (caching, pointers, stack, heap, interrupt signals, file systems, concurrency), and how to use an operating system (shell, scripting, command-line, process management, etc.).

By taking this course, you gain a deep understanding of how computers work. This understanding is crucial for pursuing a career in writing quality software for top software companies, for embedded systems programming, and for programming cloud-based big data systems (think Google, Amazon, Microsoft, Samsung, etc.). Students who have the ambition to contribute to the Linux kernel, or to other open-source projects, will gain a strong foundation for that in this course.

Ultimately, the goal is to enable you to fully exploit underlying hardware and systems software to write high-quality software.

Formal prerequisites

Before taking this course, you must

  • Have experience with an imperative programming language.

This requirement can be satisfied by taking an introductory programming course on e.g. Java, C#, Python, JavaScript, C, or C++.

Intended learning outcomes

After the course, the student should be able to:

  • Describe basic system programming concepts
  • Read, write and debug Assembly and C programs in a shell-environment
  • Interpret how Assembly and C programs execute on a computer system
  • Design and implement secure, high-performance programs
  • Reflect on the impact of hardware, operating system, and compilation process, on application programs
Learning activities

Lectures and exercise sessions.

The lectures present the background, theory, and methods needed for achieving the intended learning outcomes, thus facilitating reflection and discussion. The exercise sessions are a mix of problem solving, group work, student presentations, debates, and peer-to-peer feedback, intended to foster active learning.

Mandatory activities


The assignments are designed to help you realize how programs execute and are managed by operating systems, so you can exploit this knowledge to write secure, high-performance programs.

Deadlines are evenly distributed over the semester. We provide written feedback to your assignment submissions, provided you submit them on-time; you will not receive feedback on late-submission.

To qualify for the exam, each of your assignments must be approved. If an assignment is not approved, you will be allowed to re-submit the assignment once. The deadline for the resubmission is one week after you receive the notification for the not-approved submission.

Finally, here is ITU's policy on mandatory activities (which applies to both the ordinary- and the re-exam):

The student will receive the grade NA (not approved) at the ordinary exam, if the mandatory activities are not approved and the student will use an exam attempt.

Course literature

The course literature is published in the course page in LearnIT.

Student Activity Budget
Estimated distribution of learning activities for the typical student
  • Preparation for lectures and exercises: 20%
  • Lectures: 20%
  • Exercises: 20%
  • Assignments: 40%
Ordinary exam
Exam type:
A: Written exam on premises, External (7-point scale)
Exam variation:
A33: Written exam on premises on paper with restrictions
Exam duration:
5 hours
Aids allowed for the exam:
Written and printed books and notes

Exam type:
B: Oral exam, External (7-point scale)
Exam variation:
B1H: Oral exam with time for preparation. Home.
Exam duration for the preparation:
2 weeks
Exam duration per student for the oral exam:
30 minutes

Time and date
Ordinary Exam - on premises Fri, 10 Jan 2025, 09:00 - 14:00