semaphores

26
Semaphores The producer-consumer problem using semaphores

Upload: holleb

Post on 06-Jan-2016

18 views

Category:

Documents


0 download

DESCRIPTION

Semaphores. The producer-consumer problem using semaphores. Producer/Consumer. Producer down(&empty); down(&mutex); insert_item(item); up(&mutex); up(&full);. N = 6 Semaphore mutex = 1 Semaphore full = 0 Semaphore empty = N. producer1. consumer1. producer2. consumer2. Run queue. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Semaphores

Semaphores

The producer-consumer problem using semaphores

Page 2: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 0Semaphore empty = N

producer1 consumer1 consumer2producer2Run queue

Mutex queue

Full queue

Empty queue

Producerdown(&empty);down(&mutex);insert_item(item);up(&mutex);up(&full);

Page 3: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 0Semaphore empty = 5

producer1 consumer1 producer2 consumer2Run queue

Mutex queue

Full queue

Empty queue

down (&empty)

Producerdown(&empty);down(&mutex);insert_item(item);up(&mutex);up(&full);

Page 4: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 0Semaphore empty = 5

producer1 consumer1 producer2 consumer2Run queue

Mutex queue

Full queue

Empty queue

down (&mutex)

Producerdown(&empty);down(&mutex);insert_item(item);up(&mutex);up(&full);

Page 5: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 0Semaphore empty = 5

producer1 consumer1 producer2 consumer2Run queue

Mutex queue

Full queue

Empty queue

insert_item(item)

X

Producerdown(&empty);down(&mutex);insert_item(item);up(&mutex);up(&full);

Page 6: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 0Semaphore empty = 5

producer1 consumer1 producer2 consumer2Run queue

Mutex queue

Full queue

Empty queue

X

Quantum ends

Page 7: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 0Semaphore empty = 5

producer1

consumer1

producer2 consumer2Run queue

Mutex queue

Full queue

Empty queue

down (&full)

X

Consumerdown(&full);down(&mutex);consume_item();up(&mutex);up(&empty);

Page 8: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 0Semaphore empty = 5

producer1

consumer1

producer2 consumer2Run queue

Mutex queue

Full queue

Empty queue

X

Page 9: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 0Semaphore empty = 4

producer1

consumer1

producer2 consumer2Run queue

Mutex queue

Full queue

Empty queue

down (&empty)

X

Producerdown(&empty);down(&mutex);insert_item(item);up(&mutex);up(&full);

Page 10: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 0Semaphore empty = 4

producer1

consumer1

producer2

consumer2Run queue

Mutex queue

Full queue

Empty queue

down (&mutex)

X

Producerdown(&empty);down(&mutex);insert_item(item);up(&mutex);up(&full);

Page 11: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 0Semaphore empty = 4

producer1

consumer1

producer2

consumer2Run queue

Mutex queue

Full queue

Empty queue

X

Page 12: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 0Semaphore empty = 4

producer1

consumer1

producer2

consumer2

Run queue

Mutex queue

Full queue

Empty queue

down (&full)

X

Consumerdown(&full);down(&mutex);consume_item();up(&mutex);up(&empty);

Page 13: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 0Semaphore empty = 4

producer1

consumer1

producer2

consumer2

Run queue

Mutex queue

Full queue

Empty queue

X

Page 14: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 0Semaphore empty = 4

producer1

consumer1

producer2

consumer2

Run queue

Mutex queue

Full queue

Empty queue

up (&mutex)

X

Producerdown(&empty);down(&mutex);insert_item(item);up(&mutex);up(&full);

Page 15: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 1Semaphore empty = 4

producer1 consumer1producer2Run queue

Mutex queue

Full queue

Empty queue

up (&full)

X

Producerdown(&empty);down(&mutex);insert_item(item);up(&mutex);up(&full);

consumer2

Page 16: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 1Semaphore empty = 4

producer1 consumer1producer2Run queue

Mutex queue

Full queue

Empty queue

X

Quantum ends

consumer2

Page 17: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 1Semaphore empty = 4

producer1 consumer1producer2Run queue

Mutex queue

Full queue

Empty queue

down (&mutex)

Xconsumer2

Page 18: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 1Semaphore empty = 4

producer1 consumer1producer2Run queue

Mutex queue

Full queue

Empty queue

insert_item (item)

X

Xconsumer2

Page 19: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 1Semaphore empty = 4

producer1 consumer1producer2Run queue

Mutex queue

Full queue

Empty queue

up (&mutex)

X

Xconsumer2

Page 20: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 2Semaphore empty = 4

producer1 consumer1producer2 consumer2Run queue

Mutex queue

Full queue

Empty queue

up (&full)

X

X

Page 21: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 2Semaphore empty = 4

producer1 consumer1producer2 consumer2Run queue

Mutex queue

Full queue

Empty queue

X

X

Quantum ends

Page 22: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 1Semaphore empty = 4

producer1 consumer1producer2 consumer2Run queue

Mutex queue

Full queue

Empty queue

down (&full)

X

X

Page 23: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 1Semaphore empty = 4

producer1 consumer1producer2 consumer2Run queue

Mutex queue

Full queue

Empty queue

down (&mutex)

X

X

Page 24: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 1Semaphore empty = 4

producer1 consumer1producer2 consumer2Run queue

Mutex queue

Full queue

Empty queue

consume_item()

X

Page 25: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 1Semaphore empty = 4

producer1 consumer1producer2 consumer2Run queue

Mutex queue

Full queue

Empty queue

up(&mutex)

X

Page 26: Semaphores

Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 1Semaphore empty = 5

producer1 consumer1producer2 consumer2Run queue

Mutex queue

Full queue

Empty queue

up(&empty)

X