Table of Content
Lectures and labs
- For lecture slides, please refer to the schedule page.
- For lab sessions, please refer to the Moodle page.
Reference books
-
Main textbook: Remzi Arpaci-Dusseau and Andrea Arpaci-Dusseau. Operating Systems: Three Easy Pieces. Freely available online.
-
Silberschatz, Galvin, Gagne. Operating Systems Concepts. Wiley. (Preferably 8th edition or above.)
-
A.S. Tanenbaum. Modern Operating Systems. Pearson education. (Preferably 3rd edition or above.)
-
S. Mathews, T. Newhall, K. Webb. Dive into systems. Freely available online.
- This is a multidisciplinary textbook, which covers C programming, computer organization and architecture, (Intel and ARM) assembly programming, operating systems, and parallel computing. May be useful for the pre-requisites (C programming, notions of assembly and computer architecture).
Past exams
(This section will be filled in throughout the semester.)
Misc. documentation (for the lab sessions)
-
Installing Linux
-
For the 2024-2025 academic year, we recommend using the Ubuntu 24.04 Linux distribution.
-
A few slides on how to install Linux on a Windows machine
-
Virtualization software for Windows PCs
- For running a Linux virtual machine on a PC with Windows, we recommend using VirtualBox.
- Helpful links for enabling enhanced features in VirtualBox:
-
Virtualization software for Macs
- For running a Linux virtual machine on a Mac computer with macOS, we recommend using VMware Fusion Player 13 both for Intel x86 and Arm (“Apple Silicon”: M1, M2) based Macs.
-
-
Linux online man pages (from man7.org)
-
GDB (the GNU Debugger):
-
[Advanced topic] A very detailed/advanced description of how system calls are implemented on Linux/Intel processors
-
Intel/AMD x86_64 processors
-
Note: These processors equip the vast majority of the machines that you will use at the University (servers and desktop machines). They also (most likely) equip your own laptop/PC.
-
A short description of function calling conventions and stack frames on x86_64
-
CMU documentation on x86_64 machine-level programming:
-
Document (quite long but very clear/accessible)
-
Lecture slides:
-
-
The specification of the ABI used by Linux on x84_64
-
-
For assembly programming, see also “Dive into systems” (freely available):
Useful references about C programming
-
Reminder: The material presented by Grégory Mounié for the training on C programming and Git is available here.
-
Books and documents in English:
- S. Mathews, T. Newhall, K. Webb. Dive into systems. (Freely available) - Chapters 1, 2 and 3.
- B. W. Kernighan, D. M. Ritchie. The C Programming Language (2nd edition). Prentice Hall, 1988.
- K. N. King. C Programming. A Modern Approach (2nd edition). Norton, 2008.
- J. Gustedt. Modern C (2nd edition). Manning, 2019. Freely available as a pdf ebook from the following page: https://modernc.gforge.inria.fr
- T. Love. ANSI C for UNIX programmers.
- M. Dahlin. C for Java programmers.(See section 1.1: Reading)
- J. H. Silverman. C Reference Card.
- CMU C Bootcamp
- Types in C
-
Books and documents in French:
- B. W. Kernighan, D. M. Ritchie. Le Langage C (2e edition). Dunod.
- B. Cassagne. Introduction au langage C. 1998.
- A. Braquelaire. Methodologie de la programmation en C. Dunod.
Useful references about programming on 64-bit machines
- IBM developerWorks. Porting Linux applications to 64-bit systems
- Andreas Jaeger. Porting to 64-bit GNU/Linux
- Intel blog. All about 64-bit programming in one place.
Misc. articles for further reading
Some interesting (and usually relatively short) articles about specific/timely topics related to operating systems. (Note: these are optional readings.)
-
A parallel between (OS/paging/swapping) memory management techniques to avoid “thrasing” (pathological performance collapse) and managing multitasking in your real life. Understanding the former may help you with the latter. And vice versa.
- Peter J. Denning. Multitasking Without Thrashing. Communications of the ACM. September 2017. [pdf]
-
A story (from 2003) about an attempt to introduce a “security backdoor” in the Linux kernel. Here are a few additional details to help you understand the principle of this attack:
- The attack targeted the (kernel-side) implementation of
wait4
, a variant ofwaitpid
. - In the Linux kernel,
current
is a global variable that points to thetask_struct
(i.e., the process control block) of the currently running process. current->uid
corresponds to the user ID of the owner of the currently running process.
- The attack targeted the (kernel-side) implementation of