System programming

Objectives and outcomes

Preparing students to become programmers who can create a) low-level programs that are run within the operating system, b) system tools for other programmers and users (assemblers, compilers, loaders, debuggers) and c) programs that communicate with each other via computer networks. Upon completion of the course, students understand the function and construction methods of various system tools, such as macro processors, assemblers, compilers, emulators, linkers and loaders. They are able to implement different kernel modules for Unix and Windows operating systems.

Lectures

Familiarity with the functions and construction of various system tools, such as macro processors, assemblers, emulators, linkers and loaders. Basics of assembler for different processor architectures. Functions of the assembler as a tool. Construction of assembler and macro processor. Preprocessor for language C. Design of highly optimising compilers. Designing interpretive and JIT emulators. Formats of object programs. Dynamic connection and loading. Operating system kernel functions and their use. Familiarity with the functioning of system libraries and kernel APIs of different operating systems Kernel API and system calls. Input and output programming. Creating drivers. Kernel debugging. Implementation of the kernel module. Interprocess and intercomputer communication.

Practical classes

Designing machine code compactors. Designing an origin-destination simulator. Designing components for debugging and controlled program execution. Integrated development environment. Processes, their communication with each other and the use of traceroute commands. Implementation of the most important Unix system commands. Writing new commands. Using the POSIX API and signals. Development of drivers for Unix and Windows. System programming using a scripting language.