Course Overview Principles of Operating Systems Introduction Computer System Structures Operating System Structures Processes Process Synchronization Deadlocks CPU Scheduling © 2000 Franz Kurfess Memory Management Virtual Memory File Management Security Networking Distributed Systems Case Studies Conclusions Process Synchronization 1 Chapter Overview Process Synchronization Motivation Objectives Concurrency Synchronization Problems Race Conditions Critical Sections Mutual Exclusion Synchronization Patterns Bounded Buffer Readers-Writers Dining Philosophers Important Concepts and Terms Chapter Summary Synchronization Methods Hardware Semaphores Monitors © 2000 Franz Kurfess Process Synchronization 2 Motivation several processes exist simultaneously in a system co-existing processes may interfere with each other’s execution incorrect calculations,decrease in efficiency,deadlock processes may cooperate within the same task the activities of cooperating processes need to be coordinated the use of shared resources must be coordinated the separation of independent activities in processes may lead to higher performance and more convenient use © 2000 Franz Kurfess Process Synchronization 3 Objectives recognize potential problems with the coordination of activities for several processes (cooperation or resource sharing) know how to use synchronization methods to prevent problems be aware of the advantages and problems of different synchronization methods be familiar with some fundamental synchronization patterns © 2000 Franz Kurfess Process Synchronization 4 Process Synchronization the activities of several concurrent processes are synchronized access to common resources is coordinated © 2000 Franz Kurfess Process Synchronization 5 Importance of Synchronization prevention and elimination of race conditions, deadlocks and starvation serious ramifications can occur otherwise (Therac 25) data integrity/consistency collaboration efficiency © 2000 Franz Kurfess [Son 97] [2] “An Investigation of the Therac-25 Accidents” 2 Process Synchronization 6 Concurrency several processes are active at the same time between their start and finish operations each process must make some progress multitasking, multiprogramming process multiplexing: the CPU switches between different processes to the human user, these processes seem to be executed simultaneously multiprocessing several processes are executed simultaneously by multiple processing elements (CPUs) © 2000 Franz Kurfess Process Synchronization 7 Resource Types shared: several processes can utilize them simultaneously exclusive: only one process at a time preemptible: can be taken away from a process, given to another, and returned to the old process non-preemptible: one process must finish before another can use the resource © 2000 Franz Kurfess Process Synchronization 8 Synchronization Problems race conditions the exact timing in the execution of concurrent processes is critical critical sections part of a program that must be protected from interference usually resolved via mutual exclusion mutual exclusion the usage of resources by processes is restricted usually: only one process may use one instance of a resource © 2000 Franz Kurfess Process Synchronization 9 Race Conditions the final result of an activity involving shared resources depends on the timing of processes caused by the division of activities into several separate operations (multitasking on a single CPU) simultaneous operations on shared resources in multiprocessor systems race conditions may happen only very rarely coincidence of the interruption of an operation and manipulation of shared resources by another process very difficult to detect and reproduce © 2000 Franz Kurfess Process Synchronization 10 Example Race Conditions procedure for a character echo function procedure echo; var out, in: character; begin input (in, keyboard); out := in; output (out, display) end. © 2000 Franz Kurfess [Stallings 98] Process Synchronization 11 Example Race Conditions processes A and B use the echo procedure implicitly shared variables out, in two no restrictions on modifications of the variables Process A . input (in, keyboard) . out := in; output (out, display) . . © 2000 Franz Kurfess Process A . input (in, keyboard) out := in; . output (out, display) . [Stallings 98] Process Synchronization 12 Example Race Conditions problem value of the shared variable in depends on the exact timing between the two processes undesired results (the same value is echoed by both processes) the solution control access to shared resources here: protect shared variables by allowing only one process at a time in the procedure echo echo is an example for a critical section © 2000 Franz Kurfess Process Synchronization 13 Handling of Race Conditions guarantee the correct sequence of execution through process synchronization mechanisms relies on the correct use of these mechanisms by the processes delay the execution of one process improper, but frequently used “hack”, often depending on hardware specifics like processor speed © 2000 Franz Kurfess Process Synchronization 14 Critical Sections several processes cooperate on a task by sharing resources a critical section is a segment of code in which a process utilizes some shared resources, and no other process may interfere execution of critical sections must be mutually exclusive in time there may be different critical sections for different sets of shared resources a protocol us required to guarantee that only one process is in the critical section © 2000 Franz Kurfess Process Synchronization 15 Critical Section Diagram repeat other code entry section critical section exit section other code until false; © 2000 Franz Kurfess Process Synchronization 16 Critical Section Requirements solutions mutual for the critical section problem must satisfy exclusion if one process is executing in its critical section, then no other processes can execute in their critical sections progress processes wishing to enter their critical sections must come to a decision eventually bounded waiting after a process has made a request to enter its critical section, only a finite number of other processes may go first assumptions processes execute at non-zero speed no assumptions on their relative speed © 2000 Franz Kurfess Process Synchronization 17 Two-Process Solutions critical section problem with only two processes shared Boolean or integer variables for synchronization Algorithm turn 1 variable to switch between the two processes Algorithm 2 flag variable for each process to indicate that it wants to enter its critical section Algorithm 3 combination © 2000 Franz Kurfess of the above two Process Synchronization 18 Algorithm 1 processes P0 and P1 share a common variable turn initialized to 0 or 1. if turn = 0 then process P0 enters critical section if turn = 1 then process P1 enters critical section © 2000 Franz Kurfess Process Synchronization 19 Diagram of Algorithm 1 repeat other code while turn <> i do no-op; critical section turn := j; other code until false; © 2000 Franz Kurfess Process Synchronization 20 Evaluation Algorithm 1 Requirements mutual satisfied? exclusion yes, only one process is allowed in its critical section progress no, requires strict alternation bounded waiting yes, exactly one waiting period is required © 2000 Franz Kurfess Process Synchronization 21 Algorithm 2 array flag of two elements flag[0] and flag[1] indicates if a process wants to enter its critical section an flag[i] is true, then Pi is ready to enter its critical section elements of the array flag are initialized to false if [Son 97] © 2000 Franz Kurfess [Silberschatz & Galvin, 1998] 30 Process Synchronization 22 Diagram of Algorithm 2 repeat other code flag[i] := true while flag[j] do no-op; critical section flag[i] := false; other code until false; © 2000 Franz Kurfess Process Synchronization 23 Problems with Algorithm 2 What happens if P0 sets flag[0] to true and P1 sets flag[1] to true before they get into their while statement? Answer: Infinite loop within while statements Problem: depends too much on the exact timing of the two processes not very likely, but may happen [Son 97] © 2000 Franz Kurfess [Silberschatz & Galvin, 1998] 32 Process Synchronization 24 Evaluation Algorithm 2 Requirements mutual satisfied? exclusion yes, only one process is allowed in its critical section progress no, endless loop in the entry sections possible if both processes set their flags simultaneously switching the order of the two instructions in the entry section is not a solution, it will lead to mutual exclusion problems bounded waiting yes, a process sets flag in the exit section such that the other can continue © 2000 Franz Kurfess Process Synchronization 25 Algorithm 3 combination of algorithms 1 & 2 designed to meet all three mutual exclusion requirements processes share two Boolean variables turn the array flag [Son 97] © 2000 Franz Kurfess [Silberschatz & Galvin, 1998] 33 Process Synchronization 26 Diagram of Algorithm 3 repeat other code flag[i] := true; turn := j; while (flag[j] and turn = j) do no-op; critical section flag[i] := false; other code until false; © 2000 Franz Kurfess Process Synchronization 27 Algorithm 3 - Visualization Process i flag[i]:= true turn := j executing ‘no-op’ until the expression (flag[j] and turn = j) becomes false Process j flag[j]:= true turn := i the expression (flag[i] and turn = i) is false enters critical section flag[j] := false enters critical section flag[i] := false © 2000 Franz Kurfess Process Synchronization 28 Analysis of Algorithm 3 a process Pi can enter its critical section only if = false (the other process doesn’t want to enter its critical section), or turn = i (the other process wants to enter its critical section, but set the turn variable to process Pi ) flag[j] two processes cannot be both in their while loops because turn can either be true or false, but not both in its exit section, a process resets its flag variable, thus permitting the other process entry the [Son 97] © 2000 Franz Kurfess [Silberschatz & Galvin, 1998] 36 Process Synchronization 29 Evaluation Algorithm 3 Requirements mutual satisfied? exclusion yes progress yes bounded waiting yes algorithm 3 is a satisfactory solution for the twoprocess critical section problem how can this algorithm be extended to n processes? © 2000 Franz Kurfess Process Synchronization 30 Multiple-Process Critical Section critical section problem with n processes one solution utilizes the “bakery algorithm” customers pick a number when they enter the store, and are served according to the value of their numbers each process calculates a number when it wants to enter the critical section based process on the maximum number already assigned with the lowest number gets served first If two processes have the same number, then the process with the lower process id gets served first [Son 97] © 2000 Franz Kurfess [Silberschatz & Galvin, 1998] 37 Process Synchronization 31 Bakery Algorithm designed with distributed systems in mind relies on two arrays of variables choosing: indicates that a process is calculating its number number: array[0..n-1] of Boolean array[0..n-1] of integer used as identifier for processes under certain circumstances, two processes may have the same number (if they arrive at the same time) [Son 97] © 2000 Franz Kurfess [Silberschatz & Galvin, 1998] 38 Process Synchronization 32 Code Bakery Algorithm repeat choosing[i] := true; number[i] := max(number[0],number[1],...,number[n-1]) + 1; choosing[i] := false; for j := 0 to n - 1 do begin while choosing[j] do no-op; while number[j] <> 0 and (number[j],j) < (number[i],i) do no-op; end; critical section number[i] := 0; other code until false; © 2000 Franz Kurfess 40 Process Synchronization 33 Mutual Exclusion requires that only one process performs operations on shared resources if two processes attempt to access a shared resource simultaneously, one will have to wait necessary for the protection of critical sections © 2000 Franz Kurfess Process Synchronization 34 Handling Mutual Exclusion protect access to resources through synchronization mechanisms implicit synchronization for many cases through the use of system calls not sufficient, since many system calls are reentrant © 2000 Franz Kurfess Process Synchronization 35 Implementing Mutual Exclusion hardware special instructions OS data structures and operations provided by the OS, e.g. via system calls programming constructs language at the language level (e.g. rendezvous in Ada) application application all programmer must take care of it solutions usually involve critical sections © 2000 Franz Kurfess Process Synchronization 36 H/W Mutual Exclusion special machine instructions that do two steps indivisibly test_and_set: test a value; if it is false set it to true, else leave it as false exchange: swap the values of two variables test_and_set while (test_and_set(lock)) do no-op; critical section lock := false; exchange key := true repeat exchange(lock, key) until (key = false); critical section lock := false; © 2000 Franz Kurfess Process Synchronization 37 Characteristics hardware-based mutual exclusion advantages can be used by a single- or multi-processor systems (with shared memory) simple, easy to verify supports multiple critical sections disadvantages often busy waiting is used starvation is possible deadlock is possible (especially with priorities) © 2000 Franz Kurfess Process Synchronization 38 Disabling Interrupts interrupts are disabled during the time period when mutual exclusion is required without interrupts no process switching can occur somewhat dangerous: one process can hold up the whole system endless loop waiting for resources used in special-purpose systems with limited hardware © 2000 Franz Kurfess Process Synchronization 39 OS Mutual Exclusion mechanisms to handle mutual exclusion are provided by the operating system semaphores, mutexes, monitors, rendezvous, etc. available to user processes via system calls provided in most modern OSs © 2000 Franz Kurfess Process Synchronization 40 Programming Language Mutual Exclusion mutual exclusion mechanisms are built into the programming language rendezvous often in Ada, monitors in Pascal/Modula relies implicitly on OS mechanisms © 2000 Franz Kurfess Process Synchronization 41 Application Mutual Exclusion implemented by the application programmer difficult to do right frequently practically impossible to test sufficiently very inefficient usually © 2000 Franz Kurfess relies on busy waiting Process Synchronization 42 Dangers of Mutual Exclusion solutions to the mutual exclusion problem may lead to starvation deadlock inefficiency © 2000 Franz Kurfess Process Synchronization 43 Starvation indefinite postponement of a process a process never gets a resource because the resource is allocated to other processes higher priority consequence of scheduling algorithm frequent solution: aging the longer a process waits for a resource, the higher its priority until it eventually has the highest priority among the competing processes © 2000 Franz Kurfess Process Synchronization 44 Deadlock several processes are waiting for an event that never occurs because it only can be caused by one of the waiting processes example: process A waits for process B, and process B waits for process A in real life, deadlock is usually resolved by applying politeness or common sense; processes don’t have common sense, they stick to their programs © 2000 Franz Kurfess Process Synchronization 45 Example Deadlocks studying students: both students need the textbook and the course notes to study, but there is only one copy of each consider the following situation: Student A get coursenotes get textbook study release textbook release coursenotes © 2000 Franz Kurfess Student B get textbook get coursenotes study release coursenotes release textbook Process Synchronization 46 Synchronization Methods hardware semaphores monitors © 2000 Franz Kurfess Process Synchronization 47 Hardware on special instructions like test_and_set, exchange based often in combination with interrupts sometimes used as basis for OS synchronization mechanisms © 2000 Franz Kurfess Process Synchronization 48 Semaphores used to solve synchronization problems among n processes fundamental synchronization tool used in many operating systems integer variable that can be accessed only via two atomic operations wait signal frequently mutex [Son 97] © 2000 Franz Kurfess used for mutual exclusion as special semaphore [Silberschatz & Galvin, 1998] 2 Process Synchronization 49 Semaphore Usage - Example goal: force P2 to execute after P1 common semaphore synch to synchronize the operations of the two concurrent processes wait, signal utilized to delay P2 until P1 is done synch initialized to 0 [Son 97] © 2000 Franz Kurfess [Silberschatz & Galvin, 1998] 5 Process Synchronization 50 Example Semaphore P1 process 1 statements signal(synch); done executing P2 since synch = 0, must stay idle until signal from P1 wait(synch); received signal from P1 process 2 statements © 2000 Franz Kurfess 6 Process Synchronization 51 Semaphore mutex repeat other code wait(mutex); critical section signal(mutex); other code until false; © 2000 Franz Kurfess Process Synchronization 52 Busy Waiting if P2 has to wait for P1, P2 loops continuously until P1 is done Most mutual exclusion solutions result in “busy waiting” Solution: P2 blocks itself; “wakes up” via wakeup operation [Son 97] © 2000 Franz Kurfess [Silberschatz & Galvin, 1998] 8 Process Synchronization 53 Analysis each semaphore has an integer value and a list of associated processes when a process blocks itself on a semaphore, it is added to a queue of waiting processes The signal operation on a semaphore removes a process from the queue and wakes the process up © 2000 Franz Kurfess Process Synchronization 54 Declaration and Operations type semaphore = record value: integer; L: list of process; end; wait(S): S.value := S.value - 1; if S.value < 0 then begin -- add this process to S.L; block; end; signal(S): S.value := S.value + 1; if S.value < = 0 then begin -- remove next process from S.L; wakeup(P); end; © 2000 Franz Kurfess [Silberschatz & Galvin, 1998] Process Synchronization 55 Critical Sections and Semaphores operations on semaphores must be atomic: we must ensure that no two processes can execute wait and signal on the same semaphore at the same time uni-processor system hardware support such that transactions are atomic utilize interrupts during the time wait and signal are executing multiprocessor system hardware support is expensive for multiple CPUs employ software algorithms if hardware instructions are not available © 2000 Franz Kurfess Process Synchronization 56 Deadlock with Semaphores semaphores must be used with care: P0 P1 wait(S); wait(Q); wait(Q); wait(S); P0 is waiting for P1 to execute signal(Q) P1 is waiting for P0 to execute signal(S) Both processes are in a deadlock! © 2000 Franz Kurfess [Silberschatz & Galvin, 1998] Process Synchronization 57 Binary Semaphores Binary semaphores - semaphores in which their integer values can only be either 0 or 1 used by 2 or more processes to ensure only one can enter critical section [Son 97] © 2000 Franz Kurfess [4] "Modern Operating Systems" 16 Process Synchronization 58 Example Semaphores Three processes all share a resource on which one draws an A one draws a B one draws a C Implement a form of synchronization so that A B C appears in this sequence Process A Process B Process C think(); draw_A(); think(); draw_B(); think(); draw_C(); © 2000 Franz Kurfess Process Synchronization 59 Example Semaphores no semaphores A B think(); draw_A(); think(); draw_B(); ? C think(); draw_C(); © 2000 Franz Kurfess Process Synchronization 60 Example Semaphores no semaphores A B think(); draw_A(); think(); draw_B(); C think(); draw_C(); © 2000 Franz Kurfess Process Synchronization 61 Example Semaphores no semaphores A B think(); draw_A(); think(); draw_B(); A C think(); draw_C(); © 2000 Franz Kurfess Process Synchronization 62 Example Semaphores no semaphores A B think(); draw_A(); think(); draw_B(); C C think(); draw_C(); © 2000 Franz Kurfess Process Synchronization 63 Example Semaphores no semaphores A B think(); draw_A(); think(); draw_B(); B C think(); draw_C(); © 2000 Franz Kurfess Process Synchronization 64 Example Semaphores Semaphore b = 0, c = 0; Process A Process B Process C think(); draw_A(); b.signal(); b.wait(); think(); draw_B(); c.signal(); c.wait(); think(); draw_C(); © 2000 Franz Kurfess Process Synchronization 65 Example Semaphores Semaphore A think(); draw_A(); b.signal(); b = 0, c = 0; B b.wait(); think(); draw_B(); c.signal(); C c.wait(); think(); draw_C(); © 2000 Franz Kurfess Process Synchronization 66 Example Semaphores Semaphore A think(); draw_A(); b.signal(); b = -1, c = -1; B b.wait(); think(); draw_B(); c.signal(); C c.wait(); think(); draw_C(); © 2000 Franz Kurfess Process Synchronization 67 Example Semaphores Semaphore A think(); draw_A(); b.signal(); b = 0, c = -1; A B b.wait(); think(); draw_B(); c.signal(); C c.wait(); think(); draw_C(); © 2000 Franz Kurfess Process Synchronization 68 Example Semaphores Semaphore A think(); draw_A(); b.signal(); b = 0, c = 0; B B b.wait(); think(); draw_B(); c.signal(); C c.wait(); think(); draw_C(); © 2000 Franz Kurfess Process Synchronization 69 Example Semaphores Semaphore A think(); draw_A(); b.signal(); b = 0, c = 0; C B b.wait(); think(); draw_B(); c.signal(); C c.wait(); think(); draw_C(); © 2000 Franz Kurfess Process Synchronization 70 Monitors a high level synchronization construct programmer - defined operators access to internal data structures only via special procedures provides a software solution to synchronization problems [Son 97] © 2000 Franz Kurfess [4] "Modern Operating Systems" 2 Process Synchronization 71 Properties of Monitors ensures that only one process at a time can be active within the monitor programming language construct monitor procedures treated differently by the compiler compiler and OS are responsible for mutual exclusion, not the programmer less prone to errors than semaphores somewhat © 2000 Franz Kurfess limited in its simple form Process Synchronization 72 Monitor Diagram shared data ... entry queue operations initialization code © 2000 Franz Kurfess [Silberschatz & Galvin, 1998] Process Synchronization 73 Monitor Syntax - 1 type monitor - name = monitor variable declarations procedure entry P1 (...); begin ... end; procedure entry P2 (...); begin ... end; . . procedure entry Pn (...); begin ... end; [Son 97] © 2000 Franz Kurfess [Silberschatz & Galvin, 1998] 5 Process Synchronization 74 Monitor Syntax - 2 begin initialization code; end. { The representation of a monitor type cannot be used directly by various processes } { This supports local variable usage } [Son 97] © 2000 Franz Kurfess [Silberschatz & Galvin, 1998] 6 Process Synchronization 75 A Problem with Monitors Problem: need a way for processes to block themselves when they cannot proceed Solution: condition variables [Son 97] © 2000 Franz Kurfess [4] "Modern Operating Systems" 7 Process Synchronization 76 Condition Variables variable that can be used with two operations: x.wait suspends the process until it is invoked by another process, and x.signal releases exactly one process from the affiliated waiting queue [Son 97] © 2000 Franz Kurfess [4] "Modern Operating Systems" 8 Process Synchronization 77 Monitor Diagram shared data x y z condition variable queues ... entry queue operations initialization code © 2000 Franz Kurfess [Silberschatz & Galvin, 1998] Process Synchronization 78 Monitor Drawbacks only usable in a few programming languages solves mutual exclusion problem only for CPUs that all have access to common memory; not designed for distributed systems [Son 97] © 2000 Franz Kurfess [4] "Modern Operating Systems" 23 Process Synchronization 79 Synchronization Patterns bounded buffer readers-writers dining philosophers © 2000 Franz Kurfess Process Synchronization 80 Bounded Buffer also known as the “consumer-producer” problem two processes (one producer, one consumer) share a common, fixed-size buffer producer places information into the buffer consumer takes it out © 2000 Franz Kurfess Process Synchronization 81 Diagram Producer: 16 46 27 67 Consumer: 16 © 2000 Franz Kurfess Process Synchronization 82 Problem Producer-Consumer the producer wants to place a new item into the buffer, but the buffer is already full consumer wants to consume an item, but the buffer is empty Solution: producer/consumer goes to sleep, wakes up when the consumer has emptied one or more items, or when the producer has produced items vice-versa © 2000 Franz Kurfess (if buffer is empty, consumer goes to sleep) Process Synchronization 83 Implications Race conditions may occur wakeup call might be lost producer will eventually fill buffer and then go to sleep consumer will also sleep both will sleep forever © 2000 Franz Kurfess Process Synchronization 84 Solution Techniques Semaphores Event Counters Monitors Message-Passing © 2000 Franz Kurfess Process Synchronization 86 Semaphore Solution Producer Process repeat ... -- produce an item in nextp ... wait(empty); wait(mutex); ... -- add nextp to buffer ... signal(mutex); signal(full); until false; © 2000 Franz Kurfess [Silberschatz & Galvin, 1998] Process Synchronization 87 Semaphore Solution Consumer Process repeat wait(full); wait(mutex); ... -- remove an item from buffer to nextc ... signal(mutex); signal(empty); ... -- consume the item in nextc ... until false; © 2000 Franz Kurfess [Silberschatz & Galvin, 1998] Process Synchronization 88 Semaphore Solution Producer Process Consumer Process -- produce an item in nextp wait(empty); wait(mutex); -- add nextp to buffer signal(mutex); signal(full); producer done! © 2000 Franz Kurfess wait(full); wait(mutex); -- remove an item from buffer to nextc signal(mutex); signal(empty); -- consume the item in nextc consumer done! [Son 97] Process Synchronization 89 Readers-Writers concurrent processes share a file, record, or other resources some may read only (readers), some may write (writers) two concurrent reads have no adverse effects problems if concurrent reads and writes multiple writes © 2000 Franz Kurfess Process Synchronization 90 Readers-Writers Diagram P1 {read} P2 {read} P1 {read} P2 {write} File File No problem Problem! © 2000 Franz Kurfess [Son 97] Process Synchronization 91 Nature of Problem race conditions may occur if the resource is modified by two processes simultaneously Solution: mutual exclusion techniques may result in starvation, deadlock 97]Kurfess © 2000[Son Franz [Silberschatz & Galvin, 1998] 4 Process Synchronization 92 Solution via Semaphores two semaphores are used mutex, readers have priority over writers writers mutual rc - counter must wait until readers are done exclusion is accomplished 97]Kurfess © 2000[Son Franz [4] "Modern Operating Systems" 7 Process Synchronization 93 Another Solution via Semaphores Reader Process: wait(mutex); readcount := readcount + 1; Writer Process: if readcount = 1 wait(wrt); then wait(wrt); ... signal(mutex); -- writing is performed ... ... -- reading is performed signal(wrt); ... wait(mutex); readcount := readcount - 1; if readcount = 0 then signal(wrt); signal(mutex); © 2000 Franz Kurfess [Silberschatz & Galvin, 1998] Process Synchronization 94 Dining Philosophers five philosophers sit at a round table - thinking and eating each philosopher has one chopstick five a chopsticks total philosopher needs two chopsticks to eat philosophers no must share chopsticks to eat interaction occurs while thinking © 2000 Franz Kurfess Process Synchronization 95 Diagram P1 P2 P5 P3 P4 [Son 97] © 2000 Franz Kurfess [Silberschatz & Galvin, 1998] 3 Process Synchronization 96 Nature of Problem Problem: starvation a philosopher may never get the two chopsticks necessary to eat deadlocks two neighboring philosophers may try to eat at same time Solution: utilize semaphores to prevent deadlocks and/or starvation [Son 97] © 2000 Franz Kurfess [Silberschatz & Galvin, 1998] 4 Process Synchronization 97 Faulty Solution var chopstick: array [0..4] of semaphore; repeat wait(chopstick[i]); wait(chopstick[i + 1 mod 5]); ... -- eat ... signal(chopstick[i]); signal(chopstick[i + 1 mod 5]); ... -- think ... until false; © 2000 Franz Kurfess [Silberschatz & Galvin, 1998] Process Synchronization 98 Analysis of Previous Solution Each chopstick is represented by a semaphore Advantages guarantees that no two neighbors will attempt to eat at the same time Problems possibility of creating a deadlock if all philosophers try to eat at same time © 2000 Franz Kurfess Process Synchronization 99 Outline of a Correct Solution One semaphore per philosopher must solve deadlock and starvation problem deadlock solution: a philosopher is allowed to pick up chopsticks only if both are available this requires careful coordination (e.g. critical sections) does not automatically resolve starvation [Son 97] © 2000 Franz Kurfess [4] "Modern Operating Systems" 12 Process Synchronization 100 Important Concepts and Terms binary semaphore bounded buffer problem bounded waiting concurrency condition variable consumer exchange instruction integer semaphore critical section deadlock dining philosophers monitor mutex mutual exclusion © 2000 Franz Kurfess producer progress protected variable race condition readers remote procedure call rendezvous semaphore signal operation starvation synchronization test-and-set instruction wait operation writers Process Synchronization 101 Chapter Summary the synchronization of processes is one of the key problems in operating systems cooperation between processes sharing of resources synchronization applies to threads as well race conditions, critical sections, and mutual exclusion must be resolved hardware, OS, programming language, and application program solutions are available often trade-off between efficiency, safety, ease of use © 2000 Franz Kurfess Process Synchronization 102