Welcome to Computer Architecture and Operating Systems
This site contains materials for the “Computer Architecture and Operating Systems”. For information on course administration (grades, deadlines, etc.), please refer to the university website.
Course Motivation
This course is taught to second-year students who major in computer science. The goal of the course is to give an introduction to how operating systems and hardware work under the hood, which is essential for general computer science literacy. This knowledge will help better understand the performance of software systems and create more efficient solutions. The practical part will give some experience in working with system software such as Unix-based operating systems, compilers, build tools, emulators, virtual machines, and so on.
Course Description
The course consists of two logical parts. The first part is given in module 3 and is dedicated to computer architecture and assembly language programming. This part is based on the RISC-V instruction set architecture and its assembly language. The second part is given in module 4 and covers foundations of operating system organisation and system programming. The main tools for this part are the Linux operating system and the C programming language.
Calendar plan by weeks can be found here.
Computer Architecture and Assembly Language
- Introduction. Course motivation. Historical perspective.
- Data types. Byte ordering. Integer formats.
- Computer organization. Microprocessor. RISC and RISC-V. Assembly language.
- RISC-V instructions. Instruction formats.
- Pseudo instructions, macros, and includes. Conditions, loops, loads, and stores.
- Subroutines. Call stack. Calling conventions.
- Floating-point format. IEEE 754. Floating-point instructions.
- Memory and caches.
- Virtual memory.
- Processor and pipeline.
- Exceptions and interrupts.
- Input/Output.
- Data-level parallelism: Vector, SIMD, GPU.
- Thread-level parallelism.
- Optimizations.
All homeworks for “Computer Architecture and Assembly Language” are here.
Final test for Computer Architecture is here.
Operating Systems and System Programming
- Operating system architecture. Linux.
- C programming language. GNU tools (GCC, Make).
- System calls.
- Linking and loading. Libraries and binary file format.
- Dynamic memory allocation and string handling.
- Processes and threads.
- I/O and files.
- Synchronization.
- Inter-process communication.
- Users, groups, and permissions.
- Virtual Machines.
- Networking.
- Sockets.
- High-level Languages and Operating System.
- Workshop: Linux Kernel Modules
Final test for Operating Systems is here.
Additional Chapters
Exam
Exam questions are here.
Grading System
Information on the grading system for the course is here.
Software
The list of software required for the course is here.
Textbooks
The list of textbooks recommended for reading is here.
Related Materials
The list of similar courses is here. Links to other related external resources are here.
Feedback
If you have any questions or suggestions related to the course content, please feel free to submit an issue or contact the course author. If you like the course, you are welcome to star it in GitHub.