| Wk | Scheduled Dates | Actual Dates | Topics | Expected Learning Outcomes | Learning Resources | Labs | F2F/Async Activities | 
| 1 | Aug 19-23 | 
 | Introduction to the Course
 | 
 | 
 
 | Tutorial01: Installing Ubuntu Desktop 20.04 on VirtualBox, 
 | F2F: Discussion/Quizzes/LabAsync: Readings/Videos/Consultation via Slack
 
 | 
| 2 | Aug 26-30 | Aug 26-30 | Introduction to OSThe Process AbstractionProcess API Example
 | Describe  the main services provided by an operating system in the context of virtualization, concurrency, and persistenceDifferentiate a program from a processDescribe the different states a process can be inDifferentiate CPU-bound process and I/O-bound processesExplain how a process transitions from one state to anotherExplain how the fork(), wait(), and exec() system calls workDescribe other process control functions
 | 
 | Lab01: Advanced Linux Commands 
 | F2F: Discussion/Quizzes/LabAsync: Readings/Videos/Consultation via Slack
 
 | 
| 3 | Sep 2-6 | Sep 2- 6 
 
 
 
 Sep 9-13 
 | Limited Direct ExecutionScheduling
 
 
 Multi-Level Feedback QueueFair-Share SchedulingMultiprocessor Scheduling
 | Illustrate the Limited Direct Execution ProtocolDescribe how the trap and return-from-trap instructions workDifferentiate user mode from kernel modeDescribe the approaches on how the kernel takes back control when switching processesExplain how the timer interrupt  is used for the kernel to regain controlEvaluate various CPU scheduling policies based on certain metrics given some assumptions on the input processesDescribe how MLFQ worksDescribe the different approaches to proportional share schedulingDescribe the challenges, and  solutions, in multiprocessor scheduling 
 |  | Lab02: BASH Shell Scripting | F2F: Discussion/Quizzes/LabAsync: Readings/Videos/Consultation via Slack
 
 | 
| 4 | Sep 9-13 | Sep 16-20 | Address SpacesMemory APIAddress Translation
 | Explain what the address space of a process isIllustrate the address space of a process Explain the function and behaviour of each section of a process’ address space: code, data, stack, heapDescribe the goals for virtualizing memoryExplain how the malloc(), free(), sbrk(), and other  functions are used in C programsExplain the importance and mechanisms of address translation: virtual  address to physical addressIllustrate Limited Direct Execution with Dynamic Relocation at boot time and at run timeIllustrate internal fragmentation
 |  | Lab03: Process API in Linux | F2F: Discussion/Quizzes/LabAsync: Readings/Videos/Consultation via Slack
 
 | 
| 5 | Sep 16-20 | Sep 23-27 
 
 Sep 30-Oct 4 
 
 
 Oct 7-11 | SegmentationFree Space ManagementPagingTLBSwapping MechanismsAdvanced Page Tables
 
 | Illustrate how segmentation worksExplain how the hardware determines the segment and offset within a segment given a memory addressIllustrate external fragmentationDescribe a basic algorithm for implementing malloc()Illustrate how paging worksIllustrate how the TLB helps in improving paging performanceIllustrate how paged-segmentation worksIllustrate how multi-level paging works
 | 
 | Lab04: CPU Scheduling Simulations | F2F: Discussion/Quizzes/LabAsync: Readings/Videos/Consultation via Slack
 
 | 
| 6 | Sep 23-27 | 
 
 
 
 | Policies and Mechanisms for Memory (reading assignment)
 
 | Explain the role and implementation of swap spaceIllustrate what happens during a page faultExplain what thrashing is
 
 |  | Lab05: Understanding the PC Boot Process | F2F: Discussion/Quizzes/LabAsync: Readings/Videos/Consultation via Slack
 
 | 
| 7 | Sep 30-Oct  4 | 
 |  | 
 | 
 | Lab06: Virtual Memory Simulation | 
 | 
| 
 | 
 | 
 | EXAM 1 (Oct 3, Thu, 7PM-9PM) | 
| 8 | Oct 7-11 | Nov 4-8 | ConcurrencyThread APILocks
 
 | Explain what a thread is and its advantagesDifferentiate a process from a threadExplain terms related to concurrency: race condition, critical section, mutual exclusion, atomicityWrite multithreaded programs using the PThreads APIDescribe the lock abstractionDescribe and evaluate different lock implementationsDescribe how basic data structures are implemented to support concurrent accessExplain what a thread is and its advantagesDifferentiate a process from a threadExplain terms related to concurrency: race condition, critical section, mutual exclusion, atomicityWrite multithreaded programs using the PThreads APIDescribe the lock abstractionDescribe and evaluate different lock implementationsDescribe how basic data structures are implemented to support concurrent access
 |  | Lab07: Unix System V Shared Memory API | F2F: Discussion/Quizzes/LabAsync: Readings/Videos/Consultation via Slack
 
 | 
| 
 | Oct 14-19 | 
 | READING BREAK | 
| 9 | Oct 21-24 | Nov 11-15 | Lock-based concurrent data structuresCondition VariablesSemaphores
 
 
 | Articulate when and how to use condition variables in concurrent programsArticulate when and how to use semaphores in concurrent programsDescribe and evaluate solutions to the Bounded-Buffer ProblemArticulate when and how to use reader-writer locks in concurrent programsDescribe and evaluate solutions to the Dining Philosophers ProblemImplement semaphores using locks and condition variablesDescribe some non-deadlock concurrency bugsExplain why deadlocks occurDescribe the approaches on how to prevent and avoid deadlocks as well as detect and recover from itDescribe how event-based concurrency worksExplain how select() worksExplain what asynchronous I/O is
 |  | Lab08: Programming with PThreads 
 | F2F: Discussion/Quizzes/LabAsync: Readings/Videos/Consultation via Slack
 
 | 
| 10 | Oct 28-Nov 1 | Nov 18-22 | Common Concurrency ProblemsEvent-based ConcurrencyI/O DevicesHDD
 
 | Describe modern computer system architectureDescribe a basic I/O device and its interfaceDifferentiate programmed I/O from interrupt-driven I/OExplain how Direct Memory Access (DMA) worksDescribe approaches on how the CPU interacts with the hardware: I/O instructions and memory-mapped I/ODescribe what a device driver is and how it interacts with the kernelExplain how a simple IDE Disk driver worksExplain the interface and geometry of hard disk drivesExplain the factors that contribute to disk performanceCalculate the I/O time and rate of I/O of a disk given a disk specification and different workloadsDescribe various disk scheduling algorithms and their properties
 |  | Lab09: Thread Synchronization in PThreads  
 | F2F: Discussion/Quizzes/LabAsync: Readings/Videos/Consultation via Slack
 | 
| 11 | Nov 4-8 | Nov 25-30 
 Dec 2-6 | Files and DirectoriesFile System Implementation
 
 
 | Explain the  file and directory abstractions as well as associated terminologiesDescribe and use the File System API: creating, reading and writing, renaming, mounting, etc.Describe a simple File System ImplementationExplain the importance of caching and buffering in File SystemsDescribe how the Fast File System works
 |  | Lab10a: [ICS-OS] Building and Booting ICS-OS 
 Lab10b: [ICS-OS] Command Line Interface, System Calls, and System Utilities  
 
 | F2F: Discussion/Quizzes/LabAsync: Readings/Videos/Consultation via Slack
 | 
| 12 | Nov 11-15 | 
 |  |  | 
 | Lab11: [ICS-OS] Environment Variables, Processes, and Threads 
 
 | F2F: Discussion/Quizzes/LabAsync: Readings/Videos/Consultation via Slack
 | 
| 13 | Nov 18-22 | 
 | 
 |  | 
 | *Lab12: [ICS-OS] Implementing Lottery Scheduling in ICS-OS | 
 | 
| 14 | Nov 25-30 | 
 |  |  | 
 | 
 | 
 | 
| 
 | 
 | 
 | EXAM 2 | 
| 15 | Dec 2-6 | 
 | 
 | 
 | 
 | 
 | 
 | 
| 16 | Dec 9-12 | 
 | 
 | 
 | 
 | 
 | 
 |