shared memory model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-shared-memory-new.pdf · 14...

68
Shared Memory Model Alessio Vecchio [email protected] Dip. di Ingegneria dell’Informazione Università di Pisa Based on original slides by Silberschatz, Galvin, and Gagne Operating System Concepts, IX edition

Upload: others

Post on 08-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

Shared Memory Model

Alessio [email protected]

Dip. di Ingegneria dell’InformazioneUniversità di Pisa

Based on original slides by Silberschatz, Galvin, and GagneOperating System Concepts, IX edition

Page 2: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

2

Overview

■ The Critical-Section Problem■ Software Solutions■ Synchronization Hardware■ Semaphores■ Monitors■ Synchronization Examples

Page 3: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

3

Overview

■ The Critical-Section Problem■ Software Solutions■ Synchronization Hardware■ Semaphores■ Monitors■ Synchronization Examples

Page 4: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

4

Objectives

■ To introduce the critical-section problem, whose solutions can be used to ensure the consistency of shared data

■ To present both software and hardware solutions of the critical-section problem

Page 5: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

5

Producer-Consumer Problem

■ The Producer process produces data that must processed by the Consumer process

■ The inter-process communication occurs through a shared buffer (shared memory)

■ Bounded Buffer Size● The Producer process cannot insert a new item if the buffer is full● The Consumer process cannot extract an item if the buffer is

empty

Page 6: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

6

Producer-Consumer Problem

■ Shared data

#define BUFFER_SIZE 10typedef struct {

. . .} item;item buffer[BUFFER_SIZE];int in = 0;int out = 0;int counter = 0;

Page 7: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

7

Producer-Consumer Problem■ Producer process

item nextProduced;

while (1) {while (counter == BUFFER_SIZE); /* do nothing */buffer[in] = nextProduced;in = (in + 1) % BUFFER_SIZE;counter++;

}

Page 8: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

8

Producer-Consumer Problem■ Consumer process

item nextConsumed;

while (1) {while (counter == 0); /* do nothing */nextConsumed = buffer[out];out = (out + 1) % BUFFER_SIZE;counter--;

}

Page 9: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

9

Producer-Consumer Problem

■ The statements

counter++;counter--;

must be performed atomically.

■ Atomic operation means an operation that completes in its entirety without interruption.

Page 10: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

10

Producer-Consumer Problem

■ The statement “counter++” may be implemented in machine language as:

register1 = counterregister1 = register1 – 1counter = register1

■ The statement “counter—” may be implemented as:

register2 = counterregister2 = register2 – 1counter = register2

Page 11: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

11

Producer-Consumer Problem

■ If both the producer and consumer attempt to update the buffer concurrently, the assembly language statements may get interleaved.

■ Interleaving depends upon how the producer and consumer processes are scheduled.

Page 12: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

12

Race Condition

■ Assume counter is initially 5. One interleaving of statements is:

producer: register1 = counter (register1 = 5)producer: register1 = register1 + 1 (register1 = 6)

consumer: register2 = counter (register2 = 5)consumer: register2 = register2 – 1 (register2 = 4)

producer: counter = register1 (counter = 6)consumer: counter = register2 (counter = 4)

■ The value of count may be either 4 or 6, where the correct result should be 5.

Page 13: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

13

Race Condition

■ Race condition● The situation where several processes access and manipulate

shared data concurrently.● The final value of the shared data depends upon how

instructions are interleaved.

■ Show example about balance and num.Ops.

■ To prevent race conditions, concurrent processes must be synchronized.

Page 14: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

14

Critical Section Problem

■ Consider system of n processes {p0, p1, … pn-1}■ Each process has critical section segment of code

● Process may be changing common variables, updating table, writing file, etc

● When one process in critical section, no other may be in its critical section

■ Critical section problem is to design protocol to solve this■ Each process must ask permission to enter critical section in

entry section, may follow critical section with exit section, then remainder section

Page 15: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

15

Solution to Critical-Section Problem

■ 1 - Mutual Exclusion ● If process Pi is executing in its critical section, then no other processes

can be executing in their critical sections.■ 2 - Progress

● If no process is executing in its critical section and there exist some processes that wish to enter their critical section, then the selection of the processes that will enter the critical section next cannot be postponed indefinitely.

■ 3 - Bounded Waiting.● A bound must exist on the number of times that other processes are

allowed to enter their critical sections after a process has made a request to enter its critical section and before that request is granted.

■ Assume that each process executes at a nonzero speed■ No assumption concerning relative speed of the n processes.

Page 16: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

16

General Process Structure

■ General structure of process Pi

do {entry sectioncritical sectionexit sectionreminder section

} while (TRUE)

Page 17: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

17

Possible Solutions

■ Software approaches■ Hardware solutions

● Interrupt disabling● Special machine instructions

■ Operating System Support● Semaphores

■ Programming language Support● Monitor● …

Page 18: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

18

Overview

■ The Critical-Section Problem■ Software Solutions■ Synchronization Hardware■ Semaphores■ Monitors■ Synchronization Examples

Page 19: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

19

A Software Solution

Boolean lock=FALSE;Process Pi {

do {while (lock); // do nothinglock=TRUE;critical sectionlock=FALSE;remainder section

} while (TRUE);}

Does it work?

Page 20: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

20

Peterson’s Solution

■ Two process solution■ Assume that the LOAD and STORE instructions are atomic■ The two processes share two variables:

● int turn;● Boolean flag[2];

■ The variable turn indicates whose turn it is to enter the critical section.

■ The flag array is used to indicate if a process is ready to enter the critical section● flag[i] = true implies that process Pi is ready!

Page 21: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

21

Algorithm for Process Pi

do {flag[i] = TRUE;turn = j;while (flag[j] && turn == j);critical sectionflag[i] = FALSE;remainder section

} while (TRUE);}

Page 22: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

22

Solution to Critical-section Problem Using Locks

do {acquire lockcritical sectionrelease lockremainder section

} while (TRUE);

Page 23: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

23

Overview

■ The Critical-Section Problem■ Software Solutions■ Synchronization Hardware■ Semaphores■ Monitors■ Synchronization Examples

Page 24: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

24

Synchronization Hardware

■ Many systems provide hardware support for implementing the critical section code.

■ All solutions below based on idea of locking● Protecting critical regions via locks

■ Uniprocessors – could disable interrupts● Currently running code would execute without preemption● Generally too inefficient on multiprocessor systems

4 Operating systems using this not broadly scalable■ Modern machines provide special atomic hardware instructions

4 Atomic = non-interruptible● Either test memory word and set value● Or swap contents of two memory words

Page 25: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

25

Interrupt Disabling

do {disable interrupt;critical sectionenable interrupt;remainder section

} while (1);

Page 26: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

26

Previous Solution

do {while (lock); // do nothinglock=TRUE;critical sectionlock=FALSE;remainder section

} while (1);

The solution does not guaranteed the mutual exclusion because the test and set on lock are not atomic

Page 27: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

27

Test-And-Set Instruction

■ Definition:

boolean TestAndSet (boolean *target) {boolean rv = *target;*target = TRUE;return rv;

}

Page 28: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

28

Solution using Test-And-Set

boolean lock=FALSE;

do {while (TestAndSet (&lock )); // do nothingcritical sectionlock = FALSE;remainder section

} while (TRUE);

Page 29: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

29

Swap Instruction

void Swap (boolean *a, boolean *b) {boolean temp = *a;*a = *b;*b = temp:

}

Page 30: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

30

Solution using Swap

Shared boolean variable lock initialized to FALSEEach process has a local boolean variable key

do {key = TRUE;while ( key == TRUE) Swap (&lock, &key );critical sectionlock = FALSE;remainder section

} while (TRUE);

This solution guarantees mutual exclusion but not bounded waiting

Page 31: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

31

Bounded-waiting Mutual Exclusion with TestAndSet()

do {waiting[i] = TRUE;key = TRUE;while (waiting[i] && key) key = TestAndSet(&lock);waiting[i] = FALSE;// critical sectionj = (i + 1) % n;while ((j != i) && !waiting[j]) j = (j + 1) % n;if (j == i) lock = FALSE;else waiting[j] = FALSE;// remainder section

} while (TRUE);

Page 32: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

32

Overview

■ The Critical-Section Problem■ Software Solutions■ Synchronization Hardware■ Semaphores■ Monitors■ Synchronization Examples

Page 33: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

33

Semaphore

■ Synchronization tool that does not require busy waiting■ Semaphore S – integer variable■ Can only be accessed via two indivisible (atomic) operations

● wait() and signal()● Originally called P() and V()

Page 34: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

34

Semaphore

wait (S) {while (S <= 0); // busy waitS--;

}

signal (S) {S++;

}wait() and signal() must be atomic

Page 35: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

35

Semaphore as General Synchronization Tool

■ Counting semaphore● integer value can range over an unrestricted domain

■ Binary semaphore● integer value can range only between 0 and 1; can be simpler to

implement● Also known as mutex locks

■ Can implement a counting semaphore S as a binary semaphore

Page 36: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

36

Semaphore as Mutex Tool

■ Shared data:semaphore mutex=1;

■ Process Pi:

do { wait (mutex); // Critical Section signal (mutex); // Remainder section} while (TRUE);

Page 37: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

37

Semaphore Implementation

■ Must guarantee that no two processes can execute wait() and signal() on the same semaphore at the same time

■ Could have busy waiting (spinlock)● Busy waiting wastes CPU cycles● But avoids context switches● May be useful when the critical section is short and/or rarely

occupied■ However applications may spend lots of time in critical sections and

therefore, generally, this is not a good solution.

Page 38: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

38

Semaphore Implementation

■ Define a semaphore as a recordtypedef struct {

int value;struct process *L;

} semaphore;

■ Assume two simple operations:● block() suspends the process that invokes it.● wakeup(P) resumes the execution of a blocked process P.

Page 39: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

39

Implementationwait (semaphore *S) {

S->value--;if (S->value < 0) {

add this process to S->list;block();

}}

signal (semaphore *S) {S->value++;if (S->value <= 0) {

remove a process P from S->list;wakeup(P);

}}

Page 40: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

40

Semaphore as a Synchronization Tool■ Execute B in Pj only after A executed in Pi

■ Use semaphore flag initialized to 0■ Code:

Pi Pj! !

A wait(flag)signal(flag) B

Page 41: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

41

Deadlock and Starvation■ Deadlocktwo or more processes are waiting indefinitely for an event that can be caused by only one of the waiting processes.Let S and Q be two semaphores initialized to 1

P0 P1wait(S); wait(Q);wait(Q); wait(S);! !

signal(S); signal(Q);signal(Q); signal(S);

■ Starvation – indefinite blocking. A process may never be removed from the semaphore queue in which it is suspended.

Page 42: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

42

Classical Problems of Synchronization

■ Bounded-Buffer Problem■ Readers and Writers Problem■ Dining-Philosophers Problem

Page 43: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

43

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 44: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

44

Bounded-Buffer Problem

Producer Process

do {…<produce an item in

nextp>…wait(empty);wait(mutex);…<add nextp to buffer>…signal(mutex);signal(full);

} while (1);

Consumer Process

do {wait(full)wait(mutex);…<remove item from buffer to

nextc>…signal(mutex);signal(empty);…<consume item in nextc>…

} while (1);

Page 45: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

45

Readers-Writers Problem

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

■ Problem● Allow multiple readers to read at the same time. ● Only one single writer can access the shared data at the same time

■ Variants● No new reader must wait when a writer is waiting for data access● No new reader can start reading when a writer is waiting for data

access

Page 46: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

46

Readers-Writers Problem

■ Shared Data● Data set● Integer readcount initialized to 0● Semaphore mutex initialized to 1

4Mutual exclusion on readcount● Semaphore wrt initialized to 1

4Mutual exclusion on the data set by writers

Page 47: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

47

Readers-Writers Problem

■ The structure of a writer process

do {wait (wrt) ;// writing is performedsignal (wrt) ;

} while (TRUE);

Page 48: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

48

Readers-Writers Problem

■ The structure of a reader process

do {wait (mutex) ;readcount ++ ;if (readcount == 1) wait (wrt) ;signal (mutex) ;// reading is performedwait (mutex) ;readcount - - ;if (readcount == 0) signal (wrt) ;signal (mutex) ;

} while (TRUE);

Page 49: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

49

Dining-Philosophers Problem

■ Shared data● Bowl of rice (data set)● Semaphore chopstick [5] initialized to 1

Page 50: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

50

Dining-Philosophers Problem

■ The structure of Philosopher i:

do { wait (chopstick[i]); wait (chopStick[ (i + 1) % 5] ); // eat signal (chopstick[i]); signal (chopstick[ (i + 1) % 5] ); // think} while (TRUE);

Page 51: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

51

Dining-Philosophers Problem

■ Deadlock● A deadlock occurs if all philosophers start eating simultaneously

■ Possible solutions to avoid deadlocks● Only 4 philosophers can sit around the table● A philosopher can take his/her chopsticks only if they both are

free● An odd philosopher takes the chopstick on its left first, and then

the one on its right; an even philosopher takes the opposite approach.

■ Starvation● Any solution must avoid that a philosopher may starve

Page 52: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

52

Problems with Semaphores

■ Incorrect use of semaphore operations:

● wait (mutex) … wait (mutex)

● signal (mutex) …. wait (mutex)

● Omitting of wait (mutex) or signal (mutex) (or both)

Page 53: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

53

Overview

■ The Critical-Section Problem■ Software Solutions■ Synchronization Hardware■ Semaphores■ Monitors■ Synchronization Examples

Page 54: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

54

Monitor

■ A high-level abstraction that provides a convenient and effective mechanism for process synchronization

Page 55: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

55

Monitor■ A high-level abstraction that provides a convenient and effective

mechanism for process synchronization■ Only one process may be active within the monitor at a time

monitor monitor-name { // shared variable declarations procedure P1 (…) { …. } … procedure Pn (…) {……}

Initialization code ( ….) { … }}

Page 56: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

56

Basic Monitor

Page 57: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

57

Monitor with Condition Variables

Page 58: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

58

Condition Variables

■ condition x, y;

■ Two operations on a condition variable:● x.wait() – a process that invokes the operation is (always)

suspended.● x.signal() – resumes one of processes (if any) that

invoked x.wait().

■ Variants (P executes x.signal() and Q was blocked on x)● Signal and wait: P waits for Q leaving the monitor – or blocking on

another condition variable – before proceedings on● Signal and proceed: Q waits for P leaving the monitor – or blocking on

another condition variable – before proceedings on● Signal and Leave: P executes signal and leaves the monitor

(Concurrent Pascal)

Page 59: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

59

Solution to Dining Philosophers

■ Based on monitors■ The solution assumes that

● A philosopher can take his/her chopsticks only when are both free

■ The proposed solution is deadlock-free

Page 60: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

60

Solution to Dining Philosophersmonitor DP {

enum { THINKING; HUNGRY, EATING) state [5] ;condition self [5];

void pickup (int i) {state[i] = HUNGRY;test(i);if (state[i] != EATING) self [i].wait();

}

void putdown (int i) {state[i] = THINKING;

// test left and right neighborstest((i + 4) % 5);test((i + 1) % 5);

}

Page 61: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

61

Solution to Dining Philosophers

void test (int i) {if ((state[(i + 4) % 5] != EATING) &&

(state[i] == HUNGRY) &&(state[(i + 1) % 5] != EATING) ) {

state[i] = EATING ;self[i].signal() ;

}}

initialization_code() {for (int i = 0; i < 5; i++)state[i] = THINKING;

}}

Page 62: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

62

Solution to Dining Philosophers

■ Each philosopher p invokes the operations pickup() and putdown()in the following sequence:

while (1) {Think;DP.pickup (p);Eat;DP.putdown (p);

}

Page 63: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

63

Overview

■ The Critical-Section Problem■ Software Solutions■ Synchronization Hardware■ Semaphores■ Monitors■ Synchronization Examples

Page 64: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

64

Synchronization Examples

■ Solaris■ Windows XP■ Linux■ Pthreads

Page 65: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

65

Solaris Synchronization

■ Implements a variety of mechanisms to support multitasking, multithreading (including real-time threads), and multiprocessing

■ Adaptive mutexes for efficiency when protecting data from short code segments

■ Uses semaphores, condition variables and readers-writers lockswhen longer sections of code need access to data

Page 66: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

66

Windows XP Synchronization

■ Uses interrupt masks to protect access to global resources from kernel threads on uniprocessor systems

■ Uses spinlocks on multiprocessor systems■ For out-of-kernel synch provides dispatcher objects

● may act as either mutexes and semaphores■ Dispatcher objects may also provide events

● An event acts much like a condition variable

Page 67: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

67

Linux Synchronization

■ Linux:● Prior Version 2.6, non-preemptive kernel

4A task executed in system mode cannot be interrupted, even by a higher-priority thread

● Version 2.6 and later, fully preemptive■ Linux provides:

4semaphores4spin locks

■ Linux kernel● Multi-processor

4Enable/disable spinlocks (active only for short times)● Single-processor

4Disable/Enable preemption

Page 68: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each

68

Pthreads Synchronization

■ Pthreads API is OS-independent■ It provides:

● mutex locks● condition variables

■ Non-portable extensions include:● read-write locks● spin locks