Course Overview
|
Course Synopsis
|
This is a graduate level course. The objectives of the course are to explore the design principles of computer operating systems and to emphasize on implementation details of various sub-modules of operating systems. The course will focus on the engineering and performance trade-offs in the design of operating systems. The purpose will be to teach not only what operating systems are and how they work today, but also why they are designed the way they are and how they are likely to evolve in the future. The emphasize will be on the practical aspects of the topics through the case study of Linux kernel as an example of a commercial operating system. The course will cover programming aspects through some programming assignments. It will also introduce the state of the art OS research topics through a few research paper reading assignments.
|
Course Learning Outcomes
|
Upon successful completion of the course the students would be able to:
- Understand in great detail how and why different parts of an operating system work.
- Understand the engineering tradeoffs involved in the design of various sub-modules of an operating system.
- Understand how operating systems are structured, what are alternative OS architectures and how different modules interact together to form a cohesive and complex system.
- Write non-trivial programs in C or C++ that would invoke OS services via system calls in an efficient manner.
- Understand various contemporary research issues in operating systems e.g. security and protection, efficient memory management, I/O buffering, device handling, faster and more efficient file systems and OS architectures.
|
Course Calendar
|
1
|
Course Objectives, Introduction, Issues involved in the design of Operating Systems
|
2
|
Major Components, Structure and Internal Architecture of an OS, Monolithic vs Micro-kernel
|
3
|
Linking and Loading Anatomy of a Process; Static, Dynamic and Shared libraries
|
4
|
Processes: Definition, Address Space; Context Switching, Process Management Models
|
5
|
Process Management Models, State Machines, PCB, System Calls for Process Management
|
6
|
fork() Examples, Zombies, wait and waitpid system calls, Concurrency, Threads
|
7
|
Threads: design space, address space, user and kernel level threads, advantages and . . .
|
8
|
POSIX Threads: interface, e.g; clone() system call, Process/Threads states, FSM in Linux
|
9
|
Shared Variables, Concurrency and Synchronization, Critical Sections
|
10
|
Concurrency examples, Locks, Implementing Locks, Semaphores
|
11
|
Producer Consumer Problem, Semaphores, Condition Variables and monitors
|
12
|
Readers/Writers problem, Thread Safety and reentrant functions, solving thread un-safety
|
13
|
Deadlocks: definition, required conditions, examples, detection, avoidance, prevention ...
|
14
|
Thread usage paradigms, Paper by Hauser et al., Pros and Cons of different paradigms
|
15
|
Design alternatives for concurrent servers, CPU Scheduling
|
16
|
Scheduling: Round Robin, Priority Scheduling, STCF . . .
|
17
|
Multilevel queue, Scheduling in: Unix, Linux; Multiprocessor Systems . . .
|
18
|
Assignment and Scheduling of processes | threads to Processors, Real-time Systems . . .
|
19
|
Real-time Operating Systems
|
20
|
Goals of a good Allocator, Memory Fragmentation, Implementation Issues of Memory Allocator
|
21
|
Explicit free lists base allocator, Segregated free lists, Exploiting allocation patterns
|
22
|
Overview of first 21 Lectures
|
23
|
Goals of OS Memory Management, Multiprogramming, Virtual Addresses, Fixed & Variable Part.
|
24
|
Paging, Address Translation, Page Tables & Page Table Entries, Multi-level Addr. Trans . .
|
25
|
Segmentation, Combined Segmentation and Paging, Efficient Translation and Caching . . . .
|
26
|
Set Associative & Fully Associative Cache, Demand Paging, Page Replacement Algorithms
|
27
|
Page Replacement, Thrashing, Working Set Model, Page Fault Frequency, Copy on Write, . . .
|
28
|
Page Fault Frequency, Sharing, Copy on Write, Mapped Files, P6 Memory System, . . .
|
29
|
File Systems: Basic Operations, File Access Methods, Directories, Protection, . . . .
|
30
|
Indexed Allocation, i-node format, File Buffer Cache, Caching Writes, Read Ahead, . . .
|
31
|
Consistency Problem, Atomic Disk Operations, . . .
|
32
|
Files Systems (cont.): deleting a file, bogus reference count, creating a new file, FSCK,
|
33
|
File Systems (cont.): physical disk structure, disk scheduling, BSD 4.4 FFS, . . .
|
34
|
File Systems (cont.): Log Structured File Systems
|
35
|
I/O Subsystem: Goals, Layers, Direct vs Memory Mapped, Interrupt Driven, Polled; DMA
|
36
|
Device Independent I/O Software Layer, Buffered & un-buffered I/O, Block & Char. Devices,
|
37
|
Interrupt Handlers, Interrupts & Exceptions, Linux Interrupt Handling, Top, Bottom halfs,
|
38
|
Loadable kernel modules & device drivers, Linux module: mgt., conflict resolution, . . . .
|
39
|
Security Issues, Policy vs Mechanism, Design principles for security, requirements, . . .
|
40
|
User Authentication, Password based Authentication, Unix password scheme, . . . .
|
41
|
ACL vs Capabilities, Delegation vs Revocation, Operations on capabilities, roles . . .
|
42
|
Trojan Horses, Login spoofing attacks, Logic bombs, Trap doors, Buffer & stack overflow,
|
43
|
Types of buffer overflow attacks, Methods for fighting, StackGuard & PointGurad, Libsafe,
|
44
|
Java security, Unix file security, Setuid programs, Windows security, SE Linux, . . . . .
|
45
|
OS research directions, Reliability of commodity OSes, Mobile phone risks and security . .
|
|
|
|