Top Banner
1 ME Solutions: Today • Memory-sharing All previous primitives/mechanisms are memory- sharing Semaphores as mutex and as synchronization primitive Monitors Message-passing solutions • Barriers Classical ME / concurrency problems Access problems(Readers/Writers Problem) Synchronization problems (Dining Philosophers Problem) Scheduling(Sleeping Barber Problem)
29

1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

Dec 14, 2015

Download

Documents

Dillon Rawding
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

1

ME Solutions: Today

• Memory-sharing– All previous primitives/mechanisms are memory-sharing

– Semaphores as mutex and as synchronization primitive

– Monitors

• Message-passing solutions• Barriers• Classical ME / concurrency problems

– Access problems (Readers/Writers Problem)

– Synchronization problems (Dining Philosophers Problem)

– Scheduling (Sleeping Barber Problem)

Page 2: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

2

Semaphores?

• Do SW mechanisms exist for synchronization than HW TSL?• Semaphores (S): Integer Variables [System Calls]

– Accessible only through 2 standard atomic operations (i.e., operation must execute indivisibly) of:

• wait()• signal()

Wait(S) { ; sleep while S 0 ; // no-op S--; } Signal(S) { ; wakeup S++; }

S can be an integer resource counter;If S is binary, it is called a “mutex”

wait(1) progress & decrementwait(0) blocksignal(0) increment and unblock

Page 3: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

3

Binary Semaphores with TSL: Mutexes

Page 4: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

4

ME using Semaphores

do {

wait (mutex); mutex initialized to 1

// critical section

signal (mutex);

// non critical section

} while (TRUE);

Page 5: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

5

Ordering (Sync.) with Semaphores

• Consider 2 concurrent processes P1/P2 with statements S1/S2

• Would like S2 to be executed only after S1 completed

• Let P1 and P2 share a common semaphore “sync” set to 0

– [in P1] S1; Statement S1 executes in Process P1

signal(sync);

– [in P2] wait(sync);

S2; Statement S2 executes in Process P2

[sync = 0 P2 executes S2 only after P1 has invoked signal(sync); which is only after S1 has been executed]

Page 6: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

6

Semaphores

The producer-consumer problem using semaphores

mutual exclusion synchronization |

CS |

CS |

Page 7: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

7

Semaphore Constructs in Java

• Implemented by java.util.concurrent.Semaphore class• The class uses special language constructs that use the wait() and signal()

system calls

• public Semaphore available = new Semaphore(100);• • available.acquire(); //available-- ; uses wait() syscall;• available.release(); //available++; uses signal() syscall;

…and other available methods, as acquire(int n); release (int n);acquireUninterrupted() etc.

• So are higher level sync abstractions useful?

Page 8: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

8

Semaphore Problems?• Semaphore effective SW level synchronization• System calls (simple!)• But, timing errors are still possible through misuse of

Wait/Signal – process interchanges order of wait() and signal() ops on the

semaphore• wait(mutex) CS signal(mutex) signal(mutex) … CS …

wait(mutex)• several processes may end up executing their CS concurrently

– Suppose a user replaces signal(mutex) with wait(mutex)• wait(mutex) … CS … wait(mutex)• deadlock!!!

– Suppose the process omits wait(mutex) or signal(mutex) or both

• ME violated or deadlock

Page 9: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

9

Monitors: Language Constructs not System Calls

// shared variable declarations

Page 10: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

10

Monitors

Outline of producer-consumer problem with monitors- only one monitor procedure active at one time- buffer has N slots

Page 11: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

11

Monitors in Java

Solution to producer-consumer problem in Java

Page 12: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

12

Monitors in Java

Solution to producer-consumer problem in Java

Page 13: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

13

Problems?

• TSL: lowest level (HW),• Semaphores: low-level (kernel), depend too

much on programmer’s skills• Monitors: need language support (C/Pascal?)• All: memory sharing solutions, work only on

the same machine but not if the processes sit in different machines (LAN etc.)

• Let’s look at message passing solutions (send/receive)

Page 14: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

14

Producer-Consumer with Message Passing

Ques: what happens if the producer (or the consumer) is muchfaster at processing messages than the consumer (or producer)?

Page 15: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

15

Barriers (primitives) for Synchronization

Use of a barrier (~ AND operation)a) processes approaching a barrierb) all processes blocked at barrier, waiting for Cc) last process (C) arrives, all are let through

Page 16: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

16

Synchronization Implementations

• Solaris– adaptive mutex, semaphores, RW locks, threads blocked by locks etc

• Windows XP– interrupt masking, busy-waiting spin locks (for short code

segments), mutex, semaphores, monitors, msg. passing

• Linux– pre v2.6 (non-preemptible); post v2.6 preemptible: interrupts

– semaphores, spin-locks (for short CS’s in kernel only)

Page 17: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

17

Classical ME/Concurrency Problems

• Access problems (Readers/Writers Problem)

• Synch. problems (Dining Philosophers Problem)

• Scheduling (Sleeping Barber Problem)

Page 18: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

18

Readers-Writers Problem

• A data set is shared among a number of concurrent processes– Readers – only read the database; they do not perform any updates– Writers – can both read and write.

• Problem – allow multiple readers to queue to read at the same time. Only one single writer can access the shared data at a time.

• Shared Data– Database– Integer readcount initialized to 0 (# of processes currently reading object)– Semaphore mutex initialized to 1; controls the access to readcount– Semaphore db initialized to 1; controls access to database;

Page 19: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

19

Writer/Reader Processes: Structure

while (true) {

wait (db) ;

…writing performed…

signal (db) ;

}

while (true) { wait (mutex) ; //ME for readcount

readcount ++ ; if (readcount == 1) wait (db) ; signal (mutex);

…reading performed…

wait (mutex) ; readcount - - ; if (readcount == 0) signal

(db) ; signal (mutex) ;

}initialize: db = 1, mutex = 1, readcount = 0

1 reader queued on “db”; N-1 readers queued on “mutex”

Page 20: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

20

The Readers and Writers Problem

Page 21: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

21

Dining Philosophers

• Philosophers eat/think• Eating needs 2 chopsticks (forks)• Pick one instrument at a time

• Solutions (with semaphores?)…

Page 22: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

22

Dining Philosophers – Obvious Solution

wait

signal

Deadlocks? – all pick the left fork at the same time add a check if the fork is available Livelock!

wait

signal

Page 23: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

23

Dining-Philosophers Problem

• Philosopher i:

while (true) {

…think…

wait ( chopstick[i] );wait ( chopstick[ (i + 1) % N] )

signal (…) ? random backoff?

…eat…

signal (chopstick[i] ); signal (chopstick[ (i + 1) % N] );}

Needs:• No deadlock• No starvation for anyone• Maximum parallelism• Deterministic!

Page 24: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

24

Dining Philosophers – No deadlocks -Max Parallelism Solution

Page 25: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

25

Continuation…

Deadlock free + max. parallelism (2 eat) !!!!

// acquire forks

Page 26: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

26

Bounded-Buffer Problem

• N buffers, each can hold one item

• Semaphore mutex initialized to the value 1

• Semaphore full initialized to the value 0

• Semaphore empty initialized to the value N.

Page 27: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

27

Producer/Consumer Process

while (true) {

…produce an item…

wait (empty);wait (mutex);

…add the item to the buffer…

signal (mutex);signal (full);

}

while (true) {

wait (full);

wait (mutex);

…remove an item from buffer…

signal (mutex);

signal (empty);

…consume the removed item…

}

initialize: mutex = 1, full = 0, empty = N

Page 28: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

28

The Sleeping Barber Problem

• 1 Barber• 1 Barber Chair• N Customer Chairs

Page 29: 1 ME Solutions: Today Memory-sharing –All previous primitives/mechanisms are memory-sharing –Semaphores as mutex and as synchronization primitive –Monitors.

29

The Sleeping Barber Problem