systems programming
play

Systems programming Thread management (Cont.) Synchronization using - PowerPoint PPT Presentation

Systems programming Thread management (Cont.) Synchronization using Semaphores Most of the slides in this lecture are either from or adapted from the slides provided by Dr. Ahmad Barghash Semaphores Introduced in 1965 by E. Dijkstra It


  1. Systems programming Thread management (Cont.) Synchronization using Semaphores Most of the slides in this lecture are either from or adapted from the slides provided by Dr. Ahmad Barghash

  2. Semaphores • Introduced in 1965 by E. Dijkstra • It is an abstract data type (a special integer variable) used to access shared data/resources. • Semaphores are special integer variables that can be initialized to any value ≥ 0 and can only be manipulated through two atomic operations : P( ) and V( ) • Also called wait() and signal()

  3. The P( ) operation Wait() ◼ If semaphore value is zero,  Wait until value become positive ◼ Once value of semaphore is greater than zero,  Decrement it

  4. The V( ) operation Signal() ◼ Increment the value of the semaphore

  5. Semaphores in Pthreads Library sem_wait() () and sem_post() ◼ sem_t *mysem; sem_wait(mysem);  Implements the P() operation ◼ sem_t *mysem; sem_post(mysem);  Implements the V() operation

  6. An analogy ◼ Paula and Victor work in a restaurant: ◼ Paula handles customer arrivals:  Prevents people from entering the restaurant when all tables are busy. ◼ Victor handles departures  Notifies people waiting for a table when one becomes available

  7. An analogy (II) ◼ The semaphore represents the number of available tables  Initialized with the total number of tables in restaurant

  8. An analogy (III) Restaurant Paula V ictor

  9. An analogy (IV) ◼ When people come to the restaurant, they wait for Paula to direct them:  If a table is available, she let them in and decrements the table count

  10. An analogy (V) Restaurant Paula X X X V ictor X

  11. An analogy (VI) ◼ When people leave, they tell Victor:  Victor increments the semaphore and checks the waiting area:  If there is anyone in there, he lets one group in and decrements the semaphore ◼ Paula and Victor have worked long enough together and don't interfere with each other

  12. CLASSICAL PROBLEMS: : Applications for Semaphores ◼ Bounded Buffer ◼ Readers and Writes ◼ Dining Philosophers ◼ Sleeping barber

  13. Bounded buffer (I) ◼ Producer: produce one “item” each iteration. ◼ Consumer: consume one “item” each iteration. ◼ Restriction: a buffer holds N items! ◼ One or more producer processes put their output in a bounded buffer  Must wait when buffer is full ◼ One or more consumer processes take items from the buffer  Must wait when buffer is empty

  14. Bounded buffer (II) Consumer Producer Consumer Producer Consumer

  15. The rules ◼ Three rules  Producers cannot store items in the buffer when the buffer is full.  Consumers cannot take items from the buffer when the buffer is empty.  Producers and consumers must access the buffer one at a time

  16. Two analogies The supermarket Our garbage Supermarket is the buffer Our garbage can is the buffer We are the consumers We are the producers Suppliers are the producers Garbage truck is the consumer

  17. Bounded Buffer – Solution Pseudocode 1 Shared Data Semaphore mutex = 1; Semaphore empty = Buffer_Size; The “empty” semaphore is about the available places in the buffer. Semaphore full = 0; The “full” semaphore is about the available items in the buffer. int buffer[Buffer_Size]; producer() { consumer() { 2 3 struct x item; struct x item; do { do { wait (full); produce(&item); wait (mutex); wait (empty); take(item); wait (mutex); signal (mutex); put(item); signal (empty); signal (mutex); consume(item); signal (full); } while(true); } // consumer } while(true); } // producer Critical Section!

  18. Order matters (Note about the pseudocode in the previous slide) ◼ The order of the two wait( ) operations is very important  Neither the producer or the consumer should request exclusive access to the buffer before being sure they can perform the operation they have to perform. ◼ The order of the two signal( ) operations does not matter

  19. The readers-writers problem (I) ◼ We have a file (or a database) and two types of processes:  Readers that need to access the file  Writers that need to update it. ◼ A real problem

  20. The readers-writers problem (II) ◼ Readers must be prevented from accessing the file while a writer updates it. ◼ Writers must be prevented from accessing the file while any other process accesses it  They require mutual exclusion

  21. An analogy ◼ Sharing a classroom between teachers and students  Teachers use it to lecture ◼ They cannot share the room  Students use it for quiet study ◼ They can share the room with other students ◼ Classroom is assumed to be in use if the light is turned on

  22. Rules for teachers ◼ Do not enter a classroom if its light is turned on ◼ Otherwise  Turn the light on when you come in  Turn the light off when you leave

  23. Rules for students ◼ If the light is on and you see students but no teacher  Enter the room ◼ If the light is off, you are the first student to enter the room  Turn the light on and enter the room ◼ If you are the last student to leave the room  Turn the light off after leaving

  24. The readers-writers problem (III) Shared variables and semaphores ◼ • int readers_count = 0; • semaphore mutex = 1; • semaphore access = 1;

  25. The readers-writers problem (IV) write_to_file() { P(&access); . . . V(&access); } // write_to_file

  26. The readers-writers problem (VI) read_the_file(){ sem_P(&mutex); readers_count++; if(readers_count == 1) sem_P(&access); sem_V(&mutex); . . . sem_P(&mutex); readers_count‐‐; if(readers_count == 0) sem_V(&access); sem_V(&mutex); } // read_the_file

  27. Starvation ◼ Solution favors the readers over the writers  A continuous stream of incoming readers could block writers forever ◼ Result would be writers' starvation . A suggested solution is to schedule threads in a round- robin manner pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM); pthread_attr_setschedpolicy(&attr, SCHED_RR);

  28. The sleeping barber (I) ◼ Proposed by Andrew Tanenbaum in his textbook “ Modern Operating Systems” . ◼ A barber shop has several chairs for waiting customers and one barber who sleeps when there are no customers. ◼ Customers don't wait if the shop is full and there are no free chairs to sit upon.  Must keep track of the number of customers in the shop

  29. Global declarations // number of chairs #define NCHAIRS 4 semaphore mutex = 1; semaphore ready_barber = 0; semaphore waiting_customers = 0; // tracks value of waiting_customers int nwaiting = 0;

  30. The barber function The customer function ◼ customer() { ◼ barber() { P(&mutex); for(;;) { if (nwaiting < NCHAIRS) { sem_P(&waiting_customers); nwaiting++; sem_P(&mutex); sem_V(&waiting_customers); nwaiting‐‐; V(&mutex); sem_V(&ready_barber); sem_P(&ready_barber); sem_V(&mutex); get_haircut(); cut_hair(); } // if } // for sem_V(&mutex); } // barber } // customer

  31. Pt Pthread synchronization ◼ Pthreads offer three synchronization primitives  POSIX semaphores  Mutexes For Reference Only!  Condition variables (Not Covered in this course)

  32. Homework! 1. Write a C code using the Pthread library to implement the readers- writers problem. 2. Write a C code using the Pthread library to implement the sleeping barber problem.

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend