CSCI 451: Operating Systems
Course Agenda (Fall 2026)
| Class | Date | Topics covered in class |
|---|---|---|
| 1 | Wed 9/2 | Getting started; syllabus, grading policy, course outline, online services, submission of assignments, defining operating systems, computer systems organization, int80 demo, Interrupt processing, I/O structure, DMA. |
| 2 | Fri 9/4 | Storage hierarchy, cashing, multiprogramming, job scheduling and multiprocessing, time sharing, intro to processes, user mode and kernel mode, process management, memory management, storage management, CLI shells, system call implementation, parameters passing to system calls, process states, Process Control Block (PCB). |
| 3 | Mon 9/7 | No class (Labor day) |
| 4 | Tue 9/8 | Process and device queues, long- and short-term scheduling, migration of processes between various queues, process forking in C, working with fork() system call, creating processes in Windows, process tree on Linux and Solaris. |
| 5 | Wed 9/9 | Calling native applications from within Java, communication between processes and its simulation on Java with interface BoundedBuffer. socket programming, developing server and client applications in Java. |
| 6 | Fri 9/11 | Remote procedure calls and Java RMI, intro to threads, programming C-threads. |
| 7 | Mon 9/14 | Programming threads in Java, using Java API method sleep, terminating threads in Java, interrupting threads. |
| 8 | Tue 9/15 | Waiting for a thread to complete, developing more threaded apps in Java, working with thread gropus and pools, |
| 9 | Wed 9/16 | CPU burst, CPU scheduling criteria, preemptive/non-preemptive scheduling, FCFS scheduling, SJF scheduling, estimating the next burst time of a process. |
| 10 | Fri 9/18 | Priority scheduling, the Round Robin method, implementing the RR scheduler, scheduling problems on multiple CPUs. |
| 11 | Mon 9/21 | Scheduling algorithms of Solaris, Windows and Linux, Java scheduling, working with Java priorities, intro to process synchronization, race condition, non-synchronized bank accounts demo, critical code sections, Petersen's solution to synchronization. |
| 12 | Tue 9/22 | Hardware synchronization, Java API class semaphore, implementing semaphores, the Bounded Buffer problem and its implementation with semaphores. |
| 13 | Wed 9/23 | The Readers/Writers problem, intro to the Dining Philosophers problem. |
| 14 | Fri 9/25 | Implementation of the Dining Philosophers app, synchronized methods, solving the account deposit problem, Java synchronized blocks, the wait() method, thread synchronization with interface Lock. |
| 15 | Mon 9/28 | Difference between notify() and notifyAll() methods, details of thread synchronization with interface Lock, Condition variables, intro to deadlocks. |
| 16 | Tue 9/29 | Necessary conditions for existence of deadlocks, the resource-process graph, graph-theoretic approach to the single-instance resource allocation problem, handling the general case, DFS and loop detection algorithm. |
| 17 | Wed 9/30 | Implementation of DFS, definition of the system safe state, checking for the safe state, resource allocation with Banker's algorithm. |
| 18 | Fri 10/2 | Implementation and application of Banker's algorithm, examples, deadlock detection methods. |
| 19 | Mon 10/5 | Recovery from deadlocks, review of Section 7, intro to memory management, logical and physical addresses, types of binding, swapping, MMU and its usage. |
| 20 | Tue 10/6 | Consecutive memory allocation, internal and external fragmentation, intro to virtual memory, paging approach to the segmentation problem, address translation. |
| 21 | Wed 10/7 | Paging hardware issues, page tables, TLB tables, TLB effective access time, cache types and algorithms, managing large page tables, hierarchical tables. |
| 22 | Fri 10/9 | Hash tables, inverse tables, memory protection, segmentation, Intel CPU segmentation support, handling segmentation in Linux, MS-DOS approach to segmentation, review of Chapter 7. |
| 23 | Mon 10/12 | Demand paging, FIFO page replacement method, programming the FIFO, Belady's anomaly. |
| 24 | Tue 10/13 | Optimal page placement algorithm, LRU and MRU algorithms, approximations to the LRU method. |
| 25 | Wed 10/14 | LRU and MRU algorithms, approximations to the LRU method, page access bits, the second chance algorithm, minimum number of pages, local and global page allocation, trashing, intro to the process working set. |
| 26 | Fri 10/16 | Review of memory allocation methods, memory mapped files. |
| 27 | Mon 10/19 | Fall break |
| 28 | Tue 10/20 | Fall break |
| 29 | Wed 10/21 | File operations, Linux system calls related to files, sequential and random file access, file locking in Java. |
| 30 | Fri 10/23 | Java API class File and some its methods, writing to text files and binary file from within Java, reading files in Java, directory structure, disk structure. |
| 31 | Mon 10/26 | One- and two-level directories, Linux system calls related to directories, tree- and DAG-based directory structure, soft and hard links, mouting file systems, file protection with access lists and groups. |
| 32 | Tue 10/27 | No class (Workshop in Minneapolis) |
| 33 | Wed 10/28 | File system structure, volume and file control blocks, in-memory file system structures, directory implementation with linear lists and hash tables, indexed allocation of file blocks, intro to FAT. |
| 34 | Fri 10/30 | Hierarchical file blocks indexing, index tables, inodes, Unix allocation schema, managing free disk space. |