Lectures: Friday, 9:00, Zoom (Petr Tůma)
Wednesday, 14:00, Zoom (consultations, primarily in English) (Lubomír Bulej, Vojtě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: firstname.lastname@example.org
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
email@example.com. 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 cesnet.zoom.us (Sign in with eduID.cz) 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).
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.
|2019-09-28 - 2019-10-12||Assignment 00: Printf and lists||GitLab repository
|2019-10-05 - 2019-10-19||Assignment 01: Introduction to kernel||GitLab repository
|2019-10-20 - 2020-11-09||Assignment 02: Heap||GitLab repository
|2019-11-03 - 2020-11-23||Assignment 03: Threads and cooperative scheduler||GitLab repository
|2019-11-18 - 2020-12-07||Assignment 04: Preemptive scheduler and synchronization||GitLab repository
|2019-12-01 - 2020-12-21||Assignment 05: Virtual memory management||GitLab repository
|2019-12-16 - 2021-01-18||Assignment 06: Disk driver||GitLab repository
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,
firstname.lastname@example.org or contact either
Petr Tůma, Vojtěch Horký
or Lubomír Bulej directly.
- Lecture slides (PDF)
- Lecture notes (PDF)
- Additional slides
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 R4000 Processor Manuals
- MIPS R4000 Microprocessor User’s Manual, 2nd edition, 1994
- Additional MIPS Processor Manuals (not necessarily limited to MIPS R4000)
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:
- toolchain-dynamic.sh (with dynamically linked binaries)
- toolchain-static.sh (with statically linked binaries)
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
- Git repository
- Reference Manual
- Tutorial (incomplete)
If you want to run MSIM on Windows or on other platform, you need to compile it from sources.