Presentation is loading. Please wait.

Presentation is loading. Please wait.

© 2004, D. J. Foreman 1 Basic Synchronization Semaphores.

Similar presentations


Presentation on theme: "© 2004, D. J. Foreman 1 Basic Synchronization Semaphores."— Presentation transcript:

1 © 2004, D. J. Foreman 1 Basic Synchronization Semaphores

2 © 2004, D. J. Foreman 2 One Problem (of many) T1T2 count++ //compiles as:count-- //compiles as: register1 = countregister2 = count register1 = register1 + 1 register2 = register2 - 1 count = register1count = register2  What if an interrupt occurs and t2 gets control?  This is a “Critical Section”  Incorrect values of "count" can result due to time-slicing  How do we prevent such errors  Note: "count" is global

3 © 2004, D. J. Foreman 3 Conditions/Requirements  n processes competing for shared data  Each process has a code segment, called a critical section, (CS) which uses the shared data  Must guarantee: ■ only 1 thread may be in its critical section at a time ■ Only a thread inside a CS may determine if a thread may enter ■ Bounded waiting (no starvation)

4 © 2004, D. J. Foreman 4 Solution Proposals 1. Turn interrupts off (not MP safe) 2. Flag in kernel to disallow context switch (works for kernel routines too) (MP safe) 3. Semaphores (MP safe) ■ Implemented as h/w inst ■ 80x86 has XCHG (not MP safe) Swaps RAM & register in 1 inst cycle not 1 bus cycle 4. Busy wait or “spin lock”..\..\552pages\slides\addenda\Classical Solutions to Mutual Exclusion.pptx

5 © 2004, D. J. Foreman 5 Clever S/W-Only Solution Shared memory int flag [0..1]; int turn Process 0 code flag[0] := T; turn := 1; while (flag [1] and turn =1) do no-op; critical section flag[0] := F;

6 © 2004, D. J. Foreman 6 Semaphores  Sometimes called an “indivisible test and set.” In 80x86 - XCHG, swaps 1 RAM location and a register in one instruction cycle (but not one bus cycle – so not useful in multi-processor environments – unless enhanced.) Flag – global – initially 0 WAITMOVAX,1 XCHGFLAG,AX CMPAX,1 JEWAIT ---- critical section MOVFLAG,0

7 © 2004, D. J. Foreman 7 Spin Locks  While (flag); // loops until flag=0  Wastes CPU time  Makes user seem “bad”

8 © 2004, D. J. Foreman 8 Another Critical Section Problem Loadr1,bal Loadr2,amount Addr1,r2 Storer1,bal Loadr1,bal Loadr2,amount Subr1,r2 Storer1,bal p1, p2 are in a race bal=bal + amount bal=bal - amount interrupt context-switch

9 © 2004, D. J. Foreman 9 Locking a Critical Section While(lock) wait; lock=true Loadr1,bal Loadr2,amount Addr1,r2 Storer1,bal lock=false While(lock) wait; lock=true; Loadr1,bal Loadr2,amount Subr1,r2 Storer1,bal lock=false bal=bal + amountbal=bal - amount

10 © 2004, D. J. Foreman 10 Wait & Signal  Classical definitions ■ Wait – Originally was P(s) DO WHILE (s<=0) // make me wait wait;// The wait is interruptible s=s-1; ■ Signal - Originally was V(s) s=s+1; // tell others I'm done  Remember: these must appear as ATOMIC operations to the application  "s" is global

11 © 2004, D. J. Foreman 11 Strategies 1. User-only mode software 2. Disabling interrupts 3. H/W & O/S support

12 © 2004, D. J. Foreman 12 Acceptable Solutions 1. One process at a time in CritSec 2. Entry decision made by entrants 3. No indefinite wait allowed 4. Limit to predecessors

13 © 2004, D. J. Foreman 13 Additional Problems  Semaphores only protect the CritSec  Signaling adds need for more semaphores  Classical problems: ■ Bounded Buffer also known as Producer-Consumer ■ Readers & Writers Readers have precedence Writers have precedence


Download ppt "© 2004, D. J. Foreman 1 Basic Synchronization Semaphores."

Similar presentations


Ads by Google