CISC 3310         Final Exam Review Sheet


1. Virtual memory. Know what "virtual" means, what "virtual memory" means, and how virtual memory is implemented. Know the difference between demand paging and anticipatory paging. Know how demand paging works and the extra tables (page map table, frame map table) and fields (use bit, dirty bit, in-core bit)  that are required. Know what a page fault is, what happens when a program page faults. Know how to calculate addresses under demand paging. Know the difference between global and local page replacement strategies. Know page replacement algorithms, including FIFO, LRU, and LRU approximations: clock, second chance. Know how to count page replacements using a reference string. Understand thrashing, level of multiprogramming, principle of locality, working set theory. Be able to calculate effective access time when using a cache.


2. Process coordination and synchronization. Understand the concept of "cooperating sequential processes," and what it means to say processes run "at the same time." Understand the critical section problem and various attempts to solve that problem. Know what Dekker's algorithm is (but you don't have to memorize it) and understand the ideas that are built into it. Know the criteria for a successful solution to the CS problem (simple, symmetric, provide mutual exclusion, prevent mutual lockout (allow progress), prevent starvation (guarantee bounded waiting)).


3. Semaphores and Classic Process Coordination Problems:  Know about semaphores: implementation (actual and theoretical), know the various kinds of semaphores and how they are used. Know the classic process coordination problems: Producer-Consumer, Bounded-Buffer (simple and full solution), Dining Philosophers', Readers and Writers (you do not need to reproduce the code for the last). Be able to apply semaphores to simple tasks.


4. Deadlock. Know the 4 necessary conditions for deadlock, and the 3 methods of handling deadlock. Be able to read a resource allocation graph, including one that has multiple instances of a resource. Know the algorithms for deadlock prevention. Understand the principles of deadlock avoidance. Be able to use the Banker's Algorithm for a single resource to determine whether a system is in a safe state or not. Understand the relation between a safe state, an unsafe state, and deadlock. Understand the concept of a safe sequence. Understand deadlock detection and recovery methods, including termination, rollback, and selecting a victim.


5. Disk management.  Know disk structure, latency time, seek time, access time. Know and be able to apply seek time optimization algorithms (FCFS, SSTF, SCAN, C-SCAN, LOOK, C-LOOK) to schedule a list of I/O requests. Know the shortcomings of various algorithms.


6. File allocation methods. Know the four allocation methods: contiguous, linked, linked with FAT, indexed. Know how each is set up, its advantages and disadvantages, and what each is good and bad for (sequential or direct access or both).


7. Files. Know directory structure, including paths and links (shortcuts), tree structure, AFT and its fields. Know how the OS represents and manipulates a shared files. Understand the purpose of a time stamp, a lock, and the KFT. Know how the KFT protects files. Understand how the AFT and KFT are used for file synchronization and protection.


8. Project: Know how your project works and how it interacts with SOS. Remember the problems you have encountered in writing and debugging the project. Know the code you wrote.