Design and Analysis of Operating Systems: 2021-2022
OverviewIn this course, we will examine the structure and function of operating systems as an intermediary between applications and computer hardware. Topics include OS design goals, hardware management, multitasking, process and thread abstractions, file and memory management, security, and networking. Upon completion, students should be able to perform operating systems functions at the support level in a single-user environment.
Learning outcomeson successful completion of this module, a student will be able to: 1. Explain basic concepts in the design and structure of operating systems, including kernel/user mode, system calls, preemptive multitasking, and monolithic/microkernel structure. 2. Define processes and threads, describe different ways to communicate between processes and threads, and apply mutual exclusion-based solutions to synchronize multi-threaded processes without deadlock occurring. 3. Identify different scheduling algorithms and their suitability for different types of applications, including compute-bound, I/O-bound and real-time. 4. Explain the concept of virtual memory, the rationale for on-demand paging, and the role of working sets to avoid thrashing in a caching-based memory hierarchy. 5. Demonstrate understanding of fundamental concepts in file system design, including linked and indexed file allocation, mounting, virtual file system layer, memory mapping, journaling, and performance optimizations for storage media. 6. Describe basic concepts to secure and protect operating systems.
(please consult course structure diagram, at https://www.cs.ox.ac.uk/files/8606/CourseStructure2018.pdf (to be updated))
Taking Computer Architecture course is encouraged but not mandatory.
There are 16 lectures which are organized as follows:
- Machine Components, Boot Loader.
- Kernel Mode, System Calls, Virtual Machines (VM).
- Bus, Controllers, Direct Memory Access (DMA), Device Drivers.
- Inter-Processes Communication (IPC).
- Threads, Thread Safe and Reentrant Code, Synchronization.
- Mutual Exclusion, Synchronization Monitors, Conditional Variables.
- Scheduling Processes and Tasks, Performance Criteria.
- Deadlock (Conditions, Detection, Avoidance).
- Memory Management, Virtual Memory.
- Paging, Page Replacement.
- Memory Allocation, On-Demand Paging.
- Disk hardware, Disk R/W scheduling, Flash drives, RAID File Systems.
- File Allocation, Free Space Management.
- File Systems, Distributed File Systems.
- Security, Authorization, Symmetric Key Crypto, Public Key Crypto.
We will cover two lectures each week, from week 1 to week 8.
There are four tutorial classes. Each tutorial covers the materials in the last two weeks. The problem set includes design questions and (small) programming exercises.
There are four practical sessions with 3 programming assignments which are organized as follows:
- Linux kernel compilation, GRUB bootloader configuration, and custom system calls.
- Kernel modules and device drivers.
- Multi-threading and virtual memory. (2 practical sessions)
All the practicals will be conducted on a Linux Virtual Machine. The virtual machine will be provided at the end of week 0.
Multiple-program systems (processes, inter-processes communication, and synchronization), memory allocation (segmentation, paging), resource allocation and scheduling, file systems, basic networking (sockets, layering, APIs), and security.
- "Operating System Concepts", 9th/10th Edition, Abraham Silberschatz, Peter Galvin, Greg Gagne (electronic or hardcover)
Linux Programming materials:
- The Linux Programming Interface, A Linux and UNIX System Programming Handbook, by Michael Kerrisk.
- How Linux Works, What Every Superuser Should Know, 2nd Edition, Brian Ward.
- Linux Device Drivers, by Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman.
- The C Programming Language, second Edition: 2009, Kernighan, Brian and Dennis, Ritchie.