Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Course Syllabus 1. Introduction - History; Views; Concepts; Structure 2. Process Management - Processes; State + Resources; Threads; Unix implementation of Processes 3. Process Scheduling – Paradigms; Unix; Modeling 4. Process Synchronization - Synchronization primitives and their equivalence; Deadlocks 5. Memory Management - Virtual memory; Page replacement algorithms; Segmentation 6. File Systems - Implementation; Directory and space management; Unix file system; Distributed file systems (NFS) 7. Security – General policies and mechanisms; protection models; authentication 8. Distributed issues – Synchronization; Mutual exclusion Operating Systems, 2012, Danny Hendler & Roie Zivan 1 Mutual exclusion: motivation Race Conditions: Example: Spooler directory with slots; index variables; two processes attempt concurrent access. In points to the next empty slot, Out points to entry holding name of file to print next. 4 ... 5 abc.doc f.ps Out = 4 6 7 Process A ... paper.ps In=7 Operating Systems, 2012, Danny Hendler & Roie Zivan Process B 2 Code using reads/writes only Add-file-to-print-spool (char *name) 1. Local-in := In 2. StoreName(Spool-dir[local-in], name) 3. In := (local-in+1) mod DIR-LEN A scenario proving the above code wrong • Process A performs line 1 • Process A is preempted by Process B • Process B performs Add-file-to-print-spool to completion • Process A is re-scheduled, completes lines 2-3. Process B's file is never printed. Operating Systems, 2012, Danny Hendler & Roie Zivan 3 The mutual exclusion problem (Dijkstra, 1965) How can we avoid such race conditions? We need to devise a protocol that guarantees mutually exclusive access by processes to a shared resource (such as a file, printer, etc.) or, more generally, a critical section of code Operating Systems, 2012, Danny Hendler & Roie Zivan 4 The problem model Multiple processes Processes can apply read, write, or stronger operations to shared memory Completely asynchronous We assume processes do not fail-stop Operating Systems, 2012, Danny Hendler & Roie Zivan 5 Mutual exclusion: formal definition loop forever Remainder code Entry code Critical section (CS) Exit code end loop Remainder code Entry code CS Exit code Operating Systems, 2012, Danny Hendler & Roie Zivan 6 Mutex Requirements Mutual exclusion: No two processes are at the critical section (CS) at the same time Deadlock-freedom: If processes are trying to enter their critical section, then some process eventually enters the critical section Starvation-freedom: If a process is trying to enter its critical section, then this process must eventually enter its critical section Operating Systems, 2012, Danny Hendler & Roie Zivan 7 Mutual exclusion using critical regions Operating Systems, 2012, Danny Hendler & Roie Zivan 8 Brute force solution: disabling interrupts Disable interrupts Do your stuff Enable interrupts Problems User processes are not allowed to disable interrupts Disabling interrupts must be done for a very short period of time Does not solve the problem in a multi-processor system Operating Systems, 2012, Danny Hendler & Roie Zivan 9 2-process Mutual Exclusion with a lock variable initially: lock=0 Program for both processes 1. 2. 3. 4. await lock=0 lock:=1 CS lock:=0 No Does it satisfy deadlock-freedom? Yes Does it satisfy starvation-freedom? No Does the algorithm satisfy mutex? Operating Systems, 2012, Danny Hendler & Roie Zivan 10 Mutual Exclusion: strict alternation initially: turn=0 Program for process 0 Program for process 1 1. 2. 3. 1. 2. 3. await turn=0 CS turn:=1 await turn=1 CS turn:=0 Yes Does it satisfy deadlock-freedom? No Does it satisfy starvation-freedom? No Does the algorithm satisfy mutex? Operating Systems, 2012, Danny Hendler & Roie Zivan 11 Mutual Exclusion: flag array bool flags[2] initially {false, false} Program for process 0 Program for process 1 1. 2. 3. 4. 1. 2. 3. 4. flags[0]:=true await flags[1]=false CS flags[0]:=false flags[1]:=true await flags[0]=false CS flags[1]:=false Yes Does it satisfy deadlock-freedom? No Does it satisfy starvation-freedom? No Does the algorithm satisfy mutex? Operating Systems, 2012, Danny Hendler & Roie Zivan 12 Peterson’s 2-process algorithm (Peterson, 1981) initially: b[0]:=false, b[1]:=false, value of turn immaterial Program for process 0 Program for process 1 1. 2. 3. 4. 5. 1. 2. 3. 4. 5. b[0]:=true turn:=0 await (b[1]=false or turn=1) CS b[0]:=false b[1]:=true turn:=1 await (b[0]=false or turn=0) CS b[1]:=false Operating Systems, 2012, Danny Hendler & Roie Zivan 13 Schema for Peterson’s 2-process algorithm Indicate participation b[i]:=true Barrier turn:=i Is there contention? b[1-i]=true? no Critical Section no, maybe yes First to cross barrier? turn=1-i? yes Exit code b[i]:=false Operating Systems, 2012, Danny Hendler & Roie Zivan Synchronization Algorithms and Concurrent Programming , Gadi Taubenfeld © 2006 14 Peterson’s 2-process algorithm satisfies both mutual-exclusion and starvation-freedom Operating Systems, 2012, Danny Hendler & Roie Zivan 15 Observations Shared register: turn (2-valued) read & write by both processes Two boolean registers: b[0], b[1] process 0 can write b[0], process 1 can write b[1] both can read b[0] & b[1] Can the algorithm be modified to use only single-writer registers ? Operating Systems, 2012, Danny Hendler & Roie Zian 16 Kessels’ 2-process algorithm (1982) encode turn=0: as turn[0] = turn[1] turn=1: as turn[0] ≠ turn[1] initially: b[0]:=false, b[1]:=false, value of turn[i] immaterial Program for process 0 Program for process 1 1. 2. 3. 4. 1. 2. 3. 4. 5. 6. b[0]:=true local[0]:=turn[1] turn[0]:=local[0] await (b[1]=false or local[0] ≠ turn[1]) CS b[0]:=false 5. 6. b[1]:=true local[1]:=1 – turn[0] turn[1]:=local[1] await (b[0]=false or local[1] = turn[0]) CS b[1]:=false Operating Systems, 2012, Danny Hendler & Roie Zivan 17 Mutual exclusion for n processes: A tournament tree Level 2 0 Level 1 0 Level 0 1 0 Processes 0 1 1 2 2 3 4 3 5 6 7 A tree-node is identified by: [level, node#] Operating Systems, 2012, Danny Hendler & Roie Zivan Synchronization Algorithms and Concurrent Programming , Gadi Taubenfeld © 2006 18 N-process mutual exclusion: a tournament tree Variables Per node: b[level, 2node], b[level, 2node+1], turn[level,node] Per process (local): level, node, id. Program for process i 1. node:=i 2. For level = 0 to log n-1 do 3. id:=node mod 2 4. node:= node/2 5. b[level,2node+id]:=true 6. turn[level,node]:=id 7. await (b[level,2node+1-id]=false or turn[level,node]=1-id) 8. od 9. CS 10. for level=log n –1 downto 0 do 11. node:= i/2level 12. b[level,node]:=false 13. Operating od Systems, 2012, Danny Hendler & Roie Zivan 19 Fairness: First in First Out (FIFO) Mutual Exclusion Deadlock-freedom Starvation-freedom • FIFO: if process p is waiting and process q has not yet started the doorway, then q will not enter the CS before p remainder doorway waiting entry code critical section exit code Operating Systems, 2012, Danny Hendler & Roie Zivan Synchronization Algorithms and Concurrent Programming , Gadi Taubenfeld © 2006 20 Lamport’s Bakery Algorithm entry remainder 1 2 3 4 5 n 0 0 0 0 0 0 doorway 1 2 3 2 4 waiting 1 2 3 2 4 CS 1 2 2 exit 1 2 2 Operating Systems, 2012, Danny Hendler & Roie Zivan Synchronization Algorithms and Concurrent Programming , Gadi Taubenfeld © 2006 time 21 Implementation 1 code of process i , i {1 ,..., n} number[i] := 1 + max {number[j] | (1 j n)} for j := 1 to n (<> i) { await (number[j] = 0) (number[j] > number[i]) } critical section number[i] := 0 number 1 2 3 4 0 0 0 0 n 0 0 integer Does this implementation work? Answer: No, it can deadlock! Operating Systems, 2012, Danny Hendler & Roie Zivan Synchronization Algorithms and Concurrent Programming , Gadi Taubenfeld © 2006 22 Implementation 1: deadlock entry remainder 1 2 3 4 5 n 0 0 0 0 0 0 doorway 1 2 2 waiting 1 2 2 CS 1 deadlock exit 1 Operating Systems, 2012, Danny Hendler & Roie Zivan Synchronization Algorithms and Concurrent Programming , Gadi Taubenfeld © 2006 time 23 Implementation 2 code of process i , i {1 ,..., n} number[i] := 1 + max {number[j] | (1 j n)} for j := 1 to n (<> i) { await (number[j] = 0) (number[j],j) < number[i],i) // lexicographical order } critical section number[i] := 0 number 1 2 3 4 0 0 0 0 n 0 0 integer Does this implementation work? Answer: It does not satisfy mutual exclusion! Operating Systems, 2012, Danny Hendler & Roie Zivan Synchronization Algorithms and Concurrent Programming , Gadi Taubenfeld © 2006 24 Implementation 2: no mutual exclusion entry remainder 1 2 3 4 5 n 0 0 0 0 0 0 doorway 0 1 0 2 0 2 waiting 1 2 2 CS 1 2 2 exit 1 Operating Systems, 2012, Danny Hendler & Roie Zivan Synchronization Algorithms and Concurrent Programming , Gadi Taubenfeld © 2006 time 25 The Bakery Algorithm code of process i, i {1 ,..., n} 1: choosing[i] := true 2: number[i] := 1 + max {number[j] | (1 j n)} 3: choosing[i] := false 4: for j := 1 to n do 5: await choosing[j] = false 6: await (number[j] = 0) (number[j],j) (number[i],i) 7: od 8: critical section 9: number[i] := 0 choosing number 1 2 3 4 n false false false false false false 0 0 0 0 0 0 Operating Systems, 2012, Danny Hendler & Roie Zivan bits integer 26 Lamport’s bakery algorithm satisfies mutual-exclusion, starvation-freedom, and FIFO Operating Systems, 2012, Danny Hendler & Roie Zivan 27 The test-and-set instruction initially: v:=0 Test-and-set(w) do atomically prev:=w w:=1 return prev Program for process i 1. 2. 3. await test&set(v) = 0 Critical Section v:=0 Mutual exclusion? Yes Deadlock-freedom? Yes Starvation-freedom? No Operating Systems, 2012, Danny Hendler & Roie Zivan 28 Starvation-free mutex using test-and-set boolean lock initially 0, interested[n] initially false program for process i 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. interested[i]:=true await ( (test-and-set(lock) = 0) || (interested[i]=false) ) CS interested[i]:=false j:=(i+1) % n while (j != i && !interested[j]) j:=++j % n if (j=i) lock:=0 else interested[j]:=false Operating Systems, 2012, Danny Hendler & Roie Zivan 29