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
-
Midterm 1 – October 2023 [pdf]
- Warning 1: The material covered in 2023 was not exactly the same as this year
- Warning 2: The Midterm 1 will last 60 minutes this year
-
Midterm 1 – October 2022 [pdf]
-
Final exam – December 2023 [pdf]
Misc. documentation (for the lab sessions)
-
Installing Linux
-
For the 2023-2024 academic year, we recommend using the Ubuntu 22.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 (the “Player” version is free, unlike the “Pro” version) - both for Intel x86 and Arm (“Apple Silicon”: M1, M2) based Macs.
- For installing Ubuntu with VMware Fusion 13 on an Arm-based Mac, the following guide is useful (see section 14): link.
-
-
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*.](https://diveintosystems.org) (**Freely available**) - Chapters [1](https://diveintosystems.org/antora/diveintosystems/1.0/C_intro/index.html), [2](https://diveintosystems.org/antora/diveintosystems/1.0/C_depth/index.html) and [3](https://diveintosystems.org/antora/diveintosystems/1.0/C_debug/index.html). * 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](https://modernc.gforge.inria.fr)** * T. Love. [*ANSI C for UNIX programmers*](http://www-h.eng.cam.ac.uk/help/tpl/languages/C/teaching_C). * M. Dahlin. [*C for Java programmers*](http://www.cs.utexas.edu/~dahlin/Classes/439/reference.htm).(See section 1.1: Reading) * J. H. Silverman. [*C Reference Card*](http://www.math.brown.edu/~jhs/ReferenceCards/CRefCard.v2.2.pdf). * [CMU C Bootcamp](http://www.cs.cmu.edu/afs/cs/academic/class/15213-s18/www/activities/c_bootcamp.pdf) * [Types in C](https://www.cs.cmu.edu/~fp/courses/15122-f15/lectures/21-types.pdf)
-
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