Official course description:

Full info last published 8/12-23
Course info
Language:
English
ECTS points:
7.5
Course code:
BSOPSYC1KU
Participants max:
155
Offered to guest students:
yes
Offered to exchange students:
yes
Offered as a single subject:
yes
Price for EU/EEA citizens (Single Subject):
10625 DKK
Programme
Level:
Bachelor
Programme:
BSc in Software Development
Staff
Course manager
Associate Professor
Teacher
PhD student (4+4, part 2)
Course semester
Semester
Efterår 2023
Start
28 August 2023
End
26 January 2024
Exam
Exam type
ordinær
Internal/External
ekstern censur
Grade Scale
7-trinsskala
Exam Language
GB
Abstract

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.

Description

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:

  • Read, write and debug C programs in a shell-environment
  • Interpret how C programs execute on a computer system
  • Describe basic system programming concepts in C (I/Os, network programming, concurrent programming)
  • Reflect on the impact of hardware, operating system and compilation process on application programs
  • Design and implement cache efficient matrix multiplication
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

Assignments.

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:


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:
C: Submission of written work, External (7-point scale)
Exam variation:
C11: Submission of written work
Exam submission description:
The exam is a take-home exam. It takes 3 days of work to complete, and you will have ca. 3 weeks to complete it. The exam consist of questions based on the mandatory assignments from the semester. Your answers must be in PDF format, at most 8 pages long (excluding front page, table of contents, references, and appendix), in a Times-like font, 11pt font size, single line spacing.

To prevent fraud, SAP will randomly select 20% of students for a short validation discussion, after the exam is submitted (aka. "snydtjek"). The goal of the discussion is to render probable that the student worked alone on the hand-in. This takes ca. 5 minutes per student. The validation discussion does not influence the grade; its only purpose is to discover possible exam fraud.


reexam
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 - submission Tue, 12 Dec 2023, 08:00 - 14:00
Reexam Thu, 4 Apr 2024, 09:00 - 16:00
Reexam Fri, 5 Apr 2024, 09:00 - 16:00