1 / 26

Semaphores

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.

holleb
Download Presentation

Semaphores

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Semaphores The producer-consumer problem using semaphores

  2. 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 Mutex queue Full queue Empty queue

  3. Producer/Consumer Producer down(&empty); down(&mutex); insert_item(item); up(&mutex); up(&full); N = 6 Semaphore mutex = 1 Semaphore full = 0 Semaphore empty = 5 down (&empty) producer1 consumer1 producer2 consumer2 Run queue Mutex queue Full queue Empty queue

  4. Producer/Consumer Producer down(&empty); down(&mutex); insert_item(item); up(&mutex); up(&full); N = 6 Semaphore mutex = 0 Semaphore full = 0 Semaphore empty = 5 down (&mutex) producer1 consumer1 producer2 consumer2 Run queue Mutex queue Full queue Empty queue

  5. Producer/Consumer Producer down(&empty); down(&mutex); insert_item(item); up(&mutex); up(&full); N = 6 Semaphore mutex = 0 Semaphore full = 0 Semaphore empty = 5 insert_item(item) producer1 consumer1 producer2 consumer2 Run queue Mutex queue X Full queue Empty queue

  6. Producer/Consumer N = 6 Semaphore mutex = 0 Semaphore full = 0 Semaphore empty = 5 … producer1 consumer1 producer2 consumer2 Run queue Quantum ends Mutex queue X Full queue Empty queue

  7. Producer/Consumer Consumer down(&full); down(&mutex); consume_item(); up(&mutex); up(&empty); N = 6 Semaphore mutex = 0 Semaphore full = 0 Semaphore empty = 5 down (&full) producer2 consumer2 producer1 Run queue Mutex queue X Full queue consumer1 Empty queue

  8. Producer/Consumer N = 6 Semaphore mutex = 0 Semaphore full = 0 Semaphore empty = 5 … producer2 consumer2 producer1 Run queue Mutex queue X Full queue consumer1 Empty queue

  9. Producer/Consumer Producer down(&empty); down(&mutex); insert_item(item); up(&mutex); up(&full); N = 6 Semaphore mutex = 0 Semaphore full = 0 Semaphore empty = 4 down (&empty) producer2 consumer2 producer1 Run queue Mutex queue X Full queue consumer1 Empty queue

  10. Producer/Consumer Producer down(&empty); down(&mutex); insert_item(item); up(&mutex); up(&full); N = 6 Semaphore mutex = 0 Semaphore full = 0 Semaphore empty = 4 down (&mutex) consumer2 producer1 Run queue Mutex queue producer2 X Full queue consumer1 Empty queue

  11. Producer/Consumer N = 6 Semaphore mutex = 0 Semaphore full = 0 Semaphore empty = 4 … consumer2 producer1 Run queue Mutex queue producer2 X Full queue consumer1 Empty queue

  12. Producer/Consumer Consumer down(&full); down(&mutex); consume_item(); up(&mutex); up(&empty); N = 6 Semaphore mutex = 0 Semaphore full = 0 Semaphore empty = 4 down (&full) producer1 Run queue Mutex queue producer2 X Full queue consumer1 consumer2 Empty queue

  13. Producer/Consumer N = 6 Semaphore mutex = 0 Semaphore full = 0 Semaphore empty = 4 … producer1 Run queue Mutex queue producer2 X Full queue consumer1 consumer2 Empty queue

  14. Producer/Consumer Producer down(&empty); down(&mutex); insert_item(item); up(&mutex); up(&full); N = 6 Semaphore mutex = 1 Semaphore full = 0 Semaphore empty = 4 up (&mutex) producer2 producer1 Run queue Mutex queue X Full queue consumer1 consumer2 Empty queue

  15. Producer/Consumer Producer down(&empty); down(&mutex); insert_item(item); up(&mutex); up(&full); N = 6 Semaphore mutex = 1 Semaphore full = 1 Semaphore empty = 4 up (&full) producer2 consumer1 producer1 Run queue Mutex queue X Full queue consumer2 Empty queue

  16. Producer/Consumer N = 6 Semaphore mutex = 1 Semaphore full = 1 Semaphore empty = 4 … producer2 consumer1 producer1 Run queue Quantum ends Mutex queue X Full queue consumer2 Empty queue

  17. Producer/Consumer N = 6 Semaphore mutex = 0 Semaphore full = 1 Semaphore empty = 4 down (&mutex) producer2 consumer1 producer1 Run queue Mutex queue X Full queue consumer2 Empty queue

  18. Producer/Consumer N = 6 Semaphore mutex = 0 Semaphore full = 1 Semaphore empty = 4 insert_item (item) producer2 consumer1 producer1 Run queue Mutex queue X Full queue consumer2 X Empty queue

  19. Producer/Consumer N = 6 Semaphore mutex = 1 Semaphore full = 1 Semaphore empty = 4 up (&mutex) producer2 consumer1 producer1 Run queue Mutex queue X Full queue consumer2 X Empty queue

  20. Producer/Consumer N = 6 Semaphore mutex = 1 Semaphore full = 2 Semaphore empty = 4 up (&full) producer2 consumer1 consumer2 producer1 Run queue Mutex queue X Full queue X Empty queue

  21. Producer/Consumer N = 6 Semaphore mutex = 1 Semaphore full = 2 Semaphore empty = 4 … producer2 consumer1 consumer2 producer1 Run queue Quantum ends Mutex queue X Full queue X Empty queue

  22. Producer/Consumer N = 6 Semaphore mutex = 1 Semaphore full = 1 Semaphore empty = 4 down (&full) producer2 consumer1 consumer2 producer1 Run queue Mutex queue X Full queue X Empty queue

  23. Producer/Consumer N = 6 Semaphore mutex = 0 Semaphore full = 1 Semaphore empty = 4 down (&mutex) producer2 consumer1 consumer2 producer1 Run queue Mutex queue X Full queue X Empty queue

  24. Producer/Consumer N = 6 Semaphore mutex = 0 Semaphore full = 1 Semaphore empty = 4 consume_item() producer2 consumer1 consumer2 producer1 Run queue Mutex queue X Full queue Empty queue

  25. Producer/Consumer N = 6 Semaphore mutex = 1 Semaphore full = 1 Semaphore empty = 4 up(&mutex) producer2 consumer1 consumer2 producer1 Run queue Mutex queue X Full queue Empty queue

  26. Producer/Consumer N = 6 Semaphore mutex = 1 Semaphore full = 1 Semaphore empty = 5 up(&empty) producer2 consumer1 consumer2 producer1 Run queue Mutex queue X Full queue Empty queue

More Related