├── slides ├── 02-files.pdf ├── 02-fuse.pdf ├── 08-llvm.pdf ├── 03-processes.pdf ├── 00-introduction.pdf ├── 01-system_calls.pdf ├── 04-concurrency.pdf ├── 07-performance.pdf ├── 05-memory_management.pdf ├── preliminary_meeting.pdf └── 06-network_programming.pdf └── README.md /slides/02-files.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ls1-sys-prog-course/docs/HEAD/slides/02-files.pdf -------------------------------------------------------------------------------- /slides/02-fuse.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ls1-sys-prog-course/docs/HEAD/slides/02-fuse.pdf -------------------------------------------------------------------------------- /slides/08-llvm.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ls1-sys-prog-course/docs/HEAD/slides/08-llvm.pdf -------------------------------------------------------------------------------- /slides/03-processes.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ls1-sys-prog-course/docs/HEAD/slides/03-processes.pdf -------------------------------------------------------------------------------- /slides/00-introduction.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ls1-sys-prog-course/docs/HEAD/slides/00-introduction.pdf -------------------------------------------------------------------------------- /slides/01-system_calls.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ls1-sys-prog-course/docs/HEAD/slides/01-system_calls.pdf -------------------------------------------------------------------------------- /slides/04-concurrency.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ls1-sys-prog-course/docs/HEAD/slides/04-concurrency.pdf -------------------------------------------------------------------------------- /slides/07-performance.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ls1-sys-prog-course/docs/HEAD/slides/07-performance.pdf -------------------------------------------------------------------------------- /slides/05-memory_management.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ls1-sys-prog-course/docs/HEAD/slides/05-memory_management.pdf -------------------------------------------------------------------------------- /slides/preliminary_meeting.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ls1-sys-prog-course/docs/HEAD/slides/preliminary_meeting.pdf -------------------------------------------------------------------------------- /slides/06-network_programming.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ls1-sys-prog-course/docs/HEAD/slides/06-network_programming.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Practical course: Systems Programming -- WiSe 2025-2026 2 | 3 | 13 | 14 | ## Chair website 15 | 16 | - The practical course is organized by the [Chair of Distributed Systems & Operating Systems](https://dse.in.tum.de/) at TU Munich. 17 | 18 | ## Course Information 19 | - Language: English 20 | - Type: Practical training 21 | - Module: IN0012, IN2106, IN2128 22 | - (_*This course is not offered to IN2397*_) 23 | - SWS: 6 24 | - ECTS Credits: 10 25 | - Prerequisites: 26 | - We don't have any compulsory prerequisites, but we prefer students to be proficient in the basic concepts of operating systems and systems programming (C/C++/Rust). 27 | - Preferred knowledge or equivalent to the lectures: 28 | - Fundamentals of Programming (IN0002) 29 | - Introduction to Computer Architecture (IN0004) 30 | - Basic Principles: Operating Systems and System Software (IN0009) 31 | - Course Material: 32 | - The Linux Programming Interface – Michael Kerrisk 33 | - Linux System Programming – Robert Love 34 | - TUM Online: You must register for this course in TUM Online before the course starts 35 | - Student note: Compulsory enrollment after two weeks of the matching outcome; students who fail to de-register in this period will be registered for the exam 36 | 37 | ## Course Details 38 | This course covers some of the most important aspects of systems programming. 39 | More specifically, we will cover the following topics through a set of programming assignments over the semester: 40 | 41 | - Kernel and system calls: How programs interact with the operating system, how to implement some system calls yourself in assembly 42 | - File I/O: Learn about file descriptors, direct i/o, memory mapped i/o, page cache etc. 43 | - Concurrency and synchronization: Learn about different threading primitives, i.e., mutexes, concurrent data structure design, and how they are implemented 44 | - Processes: Different system calls related to process handling like fork(), execve(), wait() 45 | - Memory management: How virtual memory, heap, stack, and how malloc() works 46 | - Networking: How to handle network protocols, efficient ways to implement servers 47 | - Compiler/LLVM: How to implement LLVM passes to improve compiler-generated codes (**C++ only**) 48 | 49 | 50 | This course consists of a set of modules related to different aspects of systems programming. 51 | For each of these modules, there is a dedicated assignment that will help students dig deeper into the concepts and get familiar with them with actual, useful, hands-on tasks. 52 | There is also a weekly Q&A meeting where we answer students' questions and discuss the specific goal of each assignment. 53 | The students will be required to perform tasks within a time frame (around 2-3 weeks, depending on the task) and submit their work in the online evaluation system. 54 | The submitted workpieces will then be evaluated, and based on that, a grade will be calculated for each assignment. 55 | 56 | ## Objectives 57 | - Introduction to a variety of operating system concepts 58 | - Techniques for debugging and optimization of low-level code 59 | - Good understanding of memory- and resource management 60 | 61 | ## Meeting place 62 | 63 | - Preliminary meeting: Tues, Feb 11th @ 13:00 CET (Zoom) 64 | - [Slide](./slides/preliminary_meeting.pdf). 65 | - [Zoom link](https://tum-conf.zoom-x.de/j/67953460706?pwd=XIWf0KcUS4oJMURHATfiFu3FdEQNXr.1). 66 | - Q&A session: Weekly on Thursday from 15:00 to 15:30 CET online (zoom) 67 | - [Zoom link](https://tum-conf.zoom-x.de/j/64801329797?pwd=s4mul2WJqTL5ZBNDAnVZN9QHt9jvVO.1). 68 | - Passcode: 718602. 69 | - The meeting starts exactly at 15:00 CET but may finish earlier than 15:30 depending on the demand. 70 | 71 | ## Tasks 72 | 73 | Please refer to the respective task repositories (that are released on the published date) for details. 74 | The schedule may change. **Tasks are released on the publishing date at 15:00 (CEST)**. **All deadlines are at 15:00 (CEST)**. 75 | 76 | | Task | Organizer | Published on | Deadline | Points | Language | Slide | Video | 77 | |--------------------------------------------------------------------------|---------------------------------------------------------|--------------|----------------|--------|----------|------------------------------------------------|-------------------------------------------------------------------------------| 78 | | [Introduction]() | [Tom von Allwörden](https://github.com/karmagiel) | 20.10.2025 | 03.11.2025 | 0 | C/C++, Rust | [link](./slides/00-introduction.pdf) | [Lecture]( https://youtu.be/Kv8OgLs1crI) | 79 | | [System Calls]() | [Tom von Allwörden](https://github.com/karmagiel) | 27.10.2025 | 10.11.2025 | 30 | C/C++, Rust | [link](./slides/01-system_calls.pdf) | [Lecture](https://youtu.be/qO33G1od3Xo) | 80 | | [File I/O]() | [Ludovico Capiaghi](https://github.com/ludof63) | 03.11.2025 | 17.11.2025 | 30 | C/C++, Rust | [link](./slides/02-files.pdf), [FUSE](./slides/02-fuse.pdf) | [Lecture](https://youtu.be/wDPH8DYZwCg), [FUSE](https://www.youtube.com/watch?v=i3YJK3es-iQ) | 81 | | [Processes]() | [Ludovico Capiaghi](https://github.com/ludof63) | 10.11.2025 | 24.11.2025 | 30 | C/C++, Rust | [link](./slides/03-processes.pdf) | [Lecture](https://youtu.be/qNzgterdPng) | 82 | | [Concurrency]() | [Maximilian Jäcklein](https://github.com/maxjae) | 17.11.2025 | 01.12.2025 | 30 | C/C++, Rust | [link](./slides/04-concurrency.pdf) | [Lecture](https://youtu.be/Bj-1pFh8Bck) | 83 | | [Memory Management]() | [Maximilian Jäcklein](https://github.com/maxjae) | 24.11.2025 | 08.12.2025 | 30 | C/C++, Rust | [link](./slides/05-memory_management.pdf) | [Lecture](https://youtu.be/1LxVzohqRx0) | 84 | | [Networking]() | [Victor Trost](https://github.com/TrostV) | 01.12.2025 | 15.12.2025 | 30 | C/C++, Rust | [link](./slides/06-network_programming.pdf) | [Lecture](https://youtu.be/fDRaXnhjoDE) | 85 | | [Compiler/LLVM]() | [Victor Trost](https://github.com/TrostV) | 08.12.2025 | 22.12.2025 | 30 | C++ | [link](./slides/08-llvm.pdf) | [Lecture](https://youtu.be/7SSkksFEKfk) | 86 | 87 | 88 | Note that 89 | - 100% points lost if private tests detect cheating or we find a solution tries to game the system (modifying test scripts, etc.) 90 | - 50% points lost if normal private tests fail 91 | 92 | 93 | ## Allowed Libraries 94 | 95 | In general, only standard libraries can be used. In addition to this, the following libraries are available for use. 96 | 97 | - Rust: [libc](https://crates.io/crates/libc), [nix](https://crates.io/crates/nix) 98 | - C++: [{fmt}](https://fmt.dev/latest/index.html), [range-v3](https://github.com/ericniebler/range-v3) 99 | - General argument parsing libraries, such as [clap](https://crates.io/crates/clap) 100 | - General error handling libraries, such as [anyhow](https://docs.rs/anyhow/latest/anyhow/) 101 | 102 | Depending on the task, the use of additional libraries may be allowed or the use of libraries (including standard libraries) may be restricted. Please refer to the task description for details. 103 | 104 | 105 | For a reference of the standard library, check out: 106 | - [cppreference](https://en.cppreference.com/w/) for C/C++ 107 | - [std](https://doc.rust-lang.org/std/) for rust 108 | 109 | ## Environment 110 | 111 | All executables must run on Linux, x86_64. Therefore, we strongly recommend having a local Linux 112 | x86_64 environment for development. Note that some tasks involve loading kernel modules and 113 | configuring kernel parameters, including cgroups, and some operations are not allowed in some 114 | container (docker) environments. While we only guarantee the execution of tasks in a local Linux 115 | 86_64 environment, if you are using different OSes, you can try to use a virtual machine. 116 | Specifically, we recommend the following approaches: 117 | 118 | - Windows: WSL2 works for many tasks. Also, Hyper-V, VirtualBox, and VMware can be used. 119 | - Mac: If you use an Intel Mac, Docker for Mac works. If you use Arm mac (M-series), then you can 120 | try to use [utm](https://mac.getutm.app/) to emulate the entire x86_64 environment. Note that this 121 | incurs major overhead, which may affect your development. 122 | 123 | In both cases, we recommend accessing the systems provided by the Rechnerhalle, which have been 124 | tested in the past to work for sysprog tasks. 125 | 126 | Each task gives more details information on runnable environments. Please note that you will be 127 | graded only based on the test results in the CI, based on the last commit before the deadline. 128 | 129 | ## Grades 130 | 131 | Using [this script](https://gist.github.com/HE7086/87025cbcf622898558ba6674658719e3), grades are computed as follows: 132 | 133 | |From| To|Grade|Interval| 134 | |----|---|-----|-----| 135 | | 0 |100| 5.0 | 100 | 136 | |101 |112| 4.7 | | 137 | |113 |124| 4.3 | | 138 | |125 |148| 4.0 | | 139 | |149 |163| 3.7 | | 140 | |164 |178| 3.3 | | 141 | |179 |193| 3.0 | | 142 | |194 |205| 2.7 | 12 | 143 | |206 |217| 2.3 | | 144 | |218 |229| 2.0 | | 145 | |230 |238| 1.7 | 9 | 146 | |239 |245| 1.3 | 7 | 147 | |246 |250| 1.0 | 5 | 148 | 149 | ## Communication Medium 150 | 151 | We will use the official [Zulip chat](https://zulip.in.tum.de/) server hosted by TUM for all communication. 152 | 158 | 159 | ## Other resources 160 | 161 | - [Youtube playlist](https://www.youtube.com/playlist?list=PLfKm1-FQibbB3U8jBJ5-mF3jmH0aCiQ7V) 162 | - [Bugtracker](https://github.com/ls1-sys-prog-course/docs/issues) 163 | - [Docker image](https://github.com/orgs/ls1-courses/packages/container/package/ls1-runner) 164 | - [The previous semester (SoSe25)](https://github.com/ls1-sys-prog-course-archive-SoSe25/docs) 165 | - NOTE: The course material is being kept updated; therefore, the old version has differences. 166 | 167 | ## Contact 168 | 169 | We *strongly* prefer Zulip for all communications. For any further questions/comments, please contact the course organizer(s): 170 | 171 | - [Theofilos Augoustis](https://taugoust.github.io/) 172 | - [Patrick Sabanic](https://www.sabanic.de/) 173 | - [Prof. Bhatotia](https://dse.in.tum.de/bhatotia/) 174 | 175 | --------------------------------------------------------------------------------