The following are expectations of what you should know based on material covered in lecture and from the first two chapters of Tanenbaum for the Midterm exam. Understand projects 1 and 2. % chapter 1 Know the two general functions of an operating system. Understand how the operating system relates to application programs and the hardware. Know what happens at the interfaces. Know what is a process. Know what is a resource. Be able to give examples. Know what services are provided by the operating system. Know the different types of operating system structure. Know why virtual machines are used. Know why microkernel (client-server) structures are used. Know the general semantics of the fork() system call to create processes. Know the general semantics of the execve() system call and its related library routines. % chapter 2 Understand how the operating system gives the illusion of executing multiple processes at the same time. Understand what context switching is in an operating system. Understand the possible states of a process and the transitions between states. Understand what the process table is used for and some of the fields it contains. Know how the operating system prevents unwanted interrupts while maninpulating the process table. Know what the operating system does when no processes are eligible for execution. Understand (in general terms) what happens on an interrupt from a hardware device. Understand that I/O can be buffered and the consequences if it is buffered. Be able to define mutual exclusion and synchronization. Know what is a race condition. Know the four requirements that must be satisfied to guarantee mutual exclusion. Be able to define a critical section. Know how to disable/enable interrupts to provide mutual exclusion. Know the advantages and disadvantages of doing so. Understand why busy waiting on a lock variable is not a correct solution for mutual exclusion. Be able to explain how a test-and-set lock instruction allows mutual exclusion to implemented. Know the advantages and disadvantages of this approach. Be able to define a semaphore and the basic operations allowed on a semaphore. Know how to implement mutual exclusion using semaphores. Know how to implement a producer/consumer problem using semaphores. Know how implement this problem with a buffer larger than one and multiple producers or consumers. Know the advantages and disadvantages of using semaphores. Know what is a monitor. Know how mutual exclusion and synchronization are done with monitors. What are the advantages and disadvantages of monitors. Understand basic issues of message passing. Be familiar with the barrier synchronization mechanism. Understand the equivalence of different process coordination primitives so that one can be implemented in terms of another. Know what a thread is and how it compares to a process. Know the differences between kernel-level and user-level threads. Understand the difference between a short and long process. Know the criteria for consideration in a good scheduling algorithm. Know measurements used to compare scheduling policies. Know the difference between preemptive and non-preemptive scheduling policies. Understand how the round robin scheduling policy works. Understand how the shortest process next policy works. Understand how the multiple-level feedback process scheduling policy works. Understand how the Linux process scheduling policy works. Know how priority is used in scheduling policies. Know the three methods used to evaluate scheduling policies.