View on GitHub

Computer Architecture and Operating Systems

Course taught at Faculty of Computer Science of Higher School of Economics

SiFive HiFive Unleashed

Welcome to Computer Architecture and Operating Systems

This site contains materials for the “Computer Architecture and Operating Systems” course taught at Faculty of Computer Science of Higher School of Economics.

For information on course administration, please refer to the university website.

Course Motivation

This course is taught to second-year students who major in data 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. Also, the course will give a starting background to those who are planning to apply machine learning methods in system software (most of top-ranked IT companies have such projects). 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

  1. Introduction. Course motivation. Historical perspective.
  2. Data types. Byte ordering. Integer formats.
  3. Computer organization. Microprocessor. RISC and RISC-V. Assembly language.
  4. RISC-V instructions. Instruction formats.
  5. Pseudo instructions, macros, and includes. Conditions, loops, loads, and stores.
  6. Subroutines. Call stack. Calling conventions.
  7. Floating-point format. IEEE 754. Floating-point instructions.
  8. Memory and caches.
  9. Virtual memory.
  10. Processor and pipeline.
  11. Exceptions and interrupts.
  12. Input/Output.
  13. Data-level parallelism: Vector, SIMD, GPU.
  14. Thread-level parallelism.
  15. Optimizations.
  16. Domain-specific architectures. Tensor Processing Unit.

All homeworks for “Computer Architecture and Assembly Language” are here.

Final test for Computer Architecture is here.

Operating Systems and System Programming

  1. Operating system architecture. Linux.
  2. C programming language. GNU tools (GCC, Make).
  3. System calls.
  4. Linking and loading. Libraries and binary file format.
  5. Strings and regular expressions.
  6. Processes and threads.
  7. I/O and files.
  8. Synchronization.
  9. Inter-process communication.
  10. Users, groups, and permissions.
  11. Virtual Machines.
  12. Networking.
  13. Sockets.
  14. High-level Languages and Operating System.
  15. Workshop: Linux Kernel Modules

Final test for Operating Systems is here.

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.

The list of similar and related courses is here.

Links to other related external resources are here.

Acknowledgements

The author would like to thank George Kouryachy who was the first lecturer of this course and who kindly shared his materials. Also, thanks to Alexander Kamkin who was the PhD advisor of the author and who taught him a lot.

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.