Semester: winter 2020/21
Lectures: Friday, 9:00, Zoom (Petr Tůma)
  Wednesday, 14:00, Zoom (consultations, primarily in English) (Lubomír BulejVojtěch Horký)
  Friday, 10:40, Zoom (consultations, primarily in Czech) (Vojtěch HorkýLubomír Bulej)
Page in SIS: NSWI004
Grading: Graded credit
Mailing list:


Assignment 06 was published via GitLab.

Assignment 05 was published via GitLab.

Assignment 04 was published via GitLab.

Next labs (Friday 20th and Wednesday 25th) we will demonstrate mutexes implementation.

Assignment 03 was published via GitLab. Note that kernel_main was changed and no test will pass until you implement rudimentary support for threads.

Assignment 02 was published via GitLab. Please, check that all team members have access to it. If you do not have a team yet, please, form it as soon as possible.

Please, send your questions/complaints about grading to Thank you.

Please, form your teams.

Assignment 01 was published via GitLab.

If you enrolled later, please, ensure that you are subscribed to the mailing-list.

If you login to your Zoom account via (Sign in with before joining the lecture/lab, you will not be put into the Waiting room. Note that Zoom links for the lectures and labs are in your grading repository.

Assignment 00 was published via GitLab.

Zoom links for lectures and labs were sent over e-mail.

Enrolled students should have access to their repository.

Please, ensure your MFF GitLab account is active (use your SIS credentials).

Show all...


Behind every application software, there is an operating system. It is responsible for providing the applications with safe access to the computer hardware, and for implementing standard interfaces and abstractions such as files, windows, or processes. This course provides opportunity to learn about the operating system internals through standard lectures and practical assignments, where the students implement their own working operating system kernel.


All assignment deadlines are in AoE. The deadlines for lecture quizzes are always Thursday noon local time.

Date Title Downloads
2019-09-28 - 2019-10-12 Assignment 00: Printf and lists GitLab repository a00
2019-10-05 - 2019-10-19 Assignment 01: Introduction to kernel GitLab repository a01
2019-10-20 - 2020-11-09 Assignment 02: Heap GitLab repository team
2019-11-03 - 2020-11-23 Assignment 03: Threads and cooperative scheduler GitLab repository team
2019-11-18 - 2020-12-07 Assignment 04: Preemptive scheduler and synchronization GitLab repository team
2019-12-01 - 2020-12-21 Assignment 05: Virtual memory management GitLab repository team
2019-12-16 - 2021-01-18 Assignment 06: Disk driver GitLab repository team


Alternative links: HTML, iCal


We encourage you to use our mailing list as the primary means of communication, both between the lecturers and the students, and among the students themselves. There are also list archives. For subject matter where the mailing list is not suitable, use or contact either Petr Tůma, Vojtěch Horký or Lubomír Bulej directly.



Our primary course book is Arpaci-Dusseau et al.: Operating Systems: Three Easy Pieces (Version 1.00). If you need more information, there are other excellent books that can help you study. Favorites include:

  • Anderson et al.: Operating Systems Principles and Practice
  • Silberschatz et al.: Operating System Concepts
  • Tanenbaum et al.: Modern Operating Systems

None of these books follows the course exactly, but all contain enough material to suffice as a learning material.

A good book on the computer systems background is Patterson et al.: Computer Organization and Design.


MIPS Cross Compiler Toolchain

The cross-compiler toolchain (and MSIM too) is available in the Rotunda lab.

If you want to develop on your own machine, we recommend to use the precompiled packages for Fedora that are available via COPR.

dnf copr enable d3s/teaching
dnf install mff-nswi004-binutils-mipsel-linux-gnu mff-nswi004-gcc-mipsel-linux-gnu
dnf install mff-nswi004-gdb-mipsel-linux-gnu

For other distributions, we offer only a shell scripts to build the whole toolchain from scratch:

We do not support Windows: if you want to develop in Windows, we recommend to install Fedora in VirtualBox and use file-sharing and PuTTy to compile in the VM but develop on Windows.

Note that GitLab runners that run tests on your solutions use Docker images based on Fedora with the following packages.

You can also compile/run your code inside Docker/Podman, using the same environment as in GitLab CI. If the following command is executed from your clone of a00, it runs both the basic and extended tests. Note that it mounts the current directory in read-write mode and thus object files and executables are stored alongside your source files.

podman run \
    --rm \
    --memory=256m --memory-swap=512m \
    --mount=type=bind,src=.,destination=/root/nswi004,ro=false,bind-propagation=shared \
    mffd3s/nswi004-base:latest \
    /bin/bash -c 'cd /root/nswi004; make distclean; make && make check check2'

MSIM MIPS R4000 Simulator

If you want to run MSIM on Windows or on other platform, you need to compile it from sources.