CS703 - Advanced Operating Systems

Slides:



Advertisements
Similar presentations
Operating Systems Semaphores II
Advertisements

Synchronization NOTE to instructors: it is helpful to walk through an example such as readers/writers locks for illustrating the use of condition variables.
Ch 7 B.
Chapter 6: Process Synchronization
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Chapter 6: Process Synchronization.
CH7 discussion-review Mahmoud Alhabbash. Q1 What is a Race Condition? How could we prevent that? – Race condition is the situation where several processes.
1 Semaphores and Monitors CIS450 Winter 2003 Professor Jinhua Guo.
1 Condition Synchronization. 2 Synchronization Now that you have seen locks, is that all there is? No, but what is the “right” way to build a parallel.
1 Semaphores and Monitors: High-level Synchronization Constructs.
COSC 3407: Operating Systems Lecture 8: Semaphores, Monitors and Condition Variables.
Concurrency in Shared Memory Systems Synchronization and Mutual Exclusion.
CS162 Operating Systems and Systems Programming Lecture 8 Readers-Writers Language Support for Synchronization September 26, 2005 Prof. John Kubiatowicz.
Monitors CSCI 444/544 Operating Systems Fall 2008.
Semaphores CSCI 444/544 Operating Systems Fall 2008.
U NIVERSITY OF M ASSACHUSETTS, A MHERST Department of Computer Science Emery Berger University of Massachusetts, Amherst Operating Systems CMPSCI 377 Lecture.
Monitor Solutions to Classical Problems. 2 Announcements CS 415 Projects graded. –Mean 80.7, High 90 out of 90 CS 414 Homework due Monday.
Semaphores Questions answered in this lecture: Why are semaphores necessary? How are semaphores used for mutual exclusion? How are semaphores used for.
Semaphores and Bounded Buffer Andy Wang Operating Systems COP 4610 / CGS 5765.
U NIVERSITY OF M ASSACHUSETTS, A MHERST Department of Computer Science Emery Berger University of Massachusetts, Amherst Operating Systems CMPSCI 377 Lecture.
6.3 Peterson’s Solution The two processes share two variables: Int turn; Boolean flag[2] The variable turn indicates whose turn it is to enter the critical.
Semaphores and Bounded Buffer. Semaphores  Semaphore is a type of generalized lock –Defined by Dijkstra in the last 60s –Main synchronization primitives.
Processes and Threads-V Concurrency and Synchronization.
4061 Session 21 (4/3). Today Thread Synchronization –Condition Variables –Monitors –Read-Write Locks.
CS162 Operating Systems and Systems Programming Lecture 5 Semaphores, Conditional Variables February 2, 2011 Ion Stoica
11/21/20151 Operating Systems Design (CS 423) Elsa L Gunter 2112 SC, UIUC Based on slides by Roy Campbell, Sam.
CSE 451: Operating Systems Winter 2012 Semaphores and Monitors Mark Zbikowski Gary Kimura.
CS162 Operating Systems and Systems Programming Lecture 7 Readers-Writers Language Support for Synchronization February 13, 2008 Prof. Anthony D. Joseph.
1 Condition Variables CS 241 Prof. Brighten Godfrey March 16, 2012 University of Illinois.
Problems with Semaphores Used for 2 independent purposes –Mutual exclusion –Condition synchronization Hard to get right –Small mistake easily leads to.
COSC 3407: Operating Systems Lecture 9: Readers-Writers and Language Support for Synchronization.
Concurrency in Shared Memory Systems Synchronization and Mutual Exclusion.
CS162 Operating Systems and Systems Programming Lecture 8 Readers-Writers Language Support for Synchronization Friday 11, 2010 Ion Stoica
1 Previous Lecture Overview  semaphores provide the first high-level synchronization abstraction that is possible to implement efficiently in OS. This.
Dining Philosophers & Monitors Questions answered in this lecture: How to synchronize dining philosophers? What are monitors and condition variables? What.
3/17/2016cse synchronization-p2 © Perkins, DW Johnson and University of Washington1 Synchronization Part 2 CSE 410, Spring 2008 Computer.
CS162 Section 2. True/False A thread needs to own a semaphore, meaning the thread has called semaphore.P(), before it can call semaphore.V() False: Any.
CPS110: Reader-writer locks
CS703 – Advanced Operating Systems
Background on the need for Synchronization
Process Synchronization
1 July 2015 Charles Reiss CS162: Operating Systems and Systems Programming Lecture 7: Synchronization: Lock Implementation,
CS703 - Advanced Operating Systems
Monitors, Condition Variables, and Readers-Writers
CS510 Operating System Foundations
CSCI 511 Operating Systems Chapter 5 (Part C) Monitor
CS162 Operating Systems and Systems Programming Lecture 7 Mutual Exclusion, Semaphores, Monitors, and Condition Variables September 21, 2009 Prof. John.
Anthony D. Joseph and Ion Stoica
Process Synchronization
Producer-Consumer Problem
Synchronization Hank Levy 1.
CS703 - Advanced Operating Systems
Anthony D. Joseph and John Canny
CSE 451: Operating Systems Winter Module 8 Semaphores and Monitors
Implementing Mutual Exclusion
CSE 451: Operating Systems Autumn Lecture 8 Semaphores and Monitors
February 6, 2013 Ion Stoica CS162 Operating Systems and Systems Programming Lecture 5 Semaphores, Conditional Variables.
Implementing Mutual Exclusion
CSE 451: Operating Systems Autumn Lecture 7 Semaphores and Monitors
September 12, 2012 Ion Stoica CS162 Operating Systems and Systems Programming Lecture 5 Semaphores, Conditional Variables.
Chapter 6: Synchronization Tools
CSE 451: Operating Systems Winter Module 7 Semaphores and Monitors
Synchronization Hank Levy 1.
CSE 153 Design of Operating Systems Winter 19
Chapter 7: Synchronization Examples
CSE 153 Design of Operating Systems Winter 2019
CSE 451: Operating Systems Winter Module 7 Semaphores and Monitors
Don Porter Portions courtesy Emmett Witchel
CS162 Operating Systems and Systems Programming Lecture 8 Locks, Semaphores, Monitors, and Quick Intro to Scheduling September 21st 2016 Prof. Anthony.
September 19, 2018 Prof. Ion Stoica
Review The Critical Section problem Peterson’s Algorithm
Presentation transcript:

CS703 - Advanced Operating Systems By Mr. Farhan Zaidi

Lecture No. 11

Overview of today’s lecture Producer consumer problem with a bounded buffer Solving producer consumer problem using locks and semaphores Semaphores used for two purposes Condition variables and monitors—introduction Condition variables—definition Hoare and Mesa style monitors Recap of lecture

Producer-consumer with a bounded buffer Problem definition Producer puts things into a shared buffer, consumer takes them out. Need synchronization for coordinating producer and consumer. Multimedia processing:Producer creates MPEG video frames, consumer renders the frames Event-driven graphical user interface: Producer detects mouse clicks, mouse movements, and keyboard hits and inserts corresponding events in buffer. Consumer retrieves events from buffer and paints the display. Don't want producer and consumer to have to operate in lockstep, so put a fixed-size buffer between them; need to synchronize access to this buffer. Producer needs to wait if buffer is full; consumer needs to wait if buffer is empty. Solution uses semaphores for both mutex and scheduling.

Correctness constraints for solution 1) Consumer must wait for producer to fill buffers, if none full (scheduling constraint) 2) Producer must wait for consumer to empty buffers, if all full 3) Only one thread can manipulate buffer queue at a time (mutual exclusion) Use a separate semaphore for each constraint; Note semaphores being used in multiple ways. Semaphore fullBuffers; // if 0, no item in buffer Semaphore emptyBuffers; // if 0, nowhere to put more item Semaphore mutex; // mutual exclusion

Semaphore solution Semaphore fullBuffers = 0 // initially, no item! Semaphore emptyBuffers = numBuffers; // initially, number of empty slots // semaphore used to count how many // resources there are! Semaphore mutex = 1; // no one using the buffer Producer() { emptyBuffers.P(); mutex.P(); // make sure no one else is accessing the buffer put 1 item in buffer mutex.V(); // ok for others to use buffer fullBuffers.V(); } Consumer() { fullBuffers.P(); take 1 item out; mutex.V(); // next person's turn emptyBuffers.V();

Questions Why does producer does P & V operations on different semaphores than the consumer? Is order of P's important? Is order of V's important? What if we have 2 producers or 2 consumers? Do we need to change anything?

Two uses of semaphores Mutual exclusion When semaphores are used for mutual exclusion, the semaphore has an initial value of 1, and P() is called before the critical section, and V() is called after the critical section. semaphore->P(); // critical section goes here semaphore->V(); Scheduling constraints Semaphores can also be used to express generalized scheduling constraints -- in other words, semaphores provide a way for a thread to wait for something. Usually, in this case, the initial value of the semaphore is 0, but not always! For example, you can implement Thread’s join (reaping) using semaphores: Initial value of semaphore = 0 ThreadJoin calls P ThreadFinish calls V

Monitor Definition Monitor: a lock and zero or more condition variables for managing concurrent access to shared data Note: Tanenbaum and Silberschatz both describe monitors as a programming language construct, where the monitor lock is acquired automatically on calling any procedure in a C++ class, for example. No widely-used language actually does this, however! So in many real- life operating systems, such as Windows, Linux, or Solaris, monitors are used with explicit calls to locks and condition variables.

Condition variables A simple example: AddToQueue() { lock.Acquire(); // lock before using shared data put item on queue; // ok to access shared data lock.Release(); // unlock after done with shared // data } RemoveFromQueue() { if something on queue // ok to access shared data remove it; lock.Release(); // unlock after done with shared data return item;

Condition variables (2) How do we change RemoveFromQueue to wait until something is on the queue? Logically, want to go to sleep inside of critical section, but if we hold lock when going to sleep, other threads won't be able to get in to add things to the queue, to wake up the sleeping thread. Key idea with condition variables: make it possible to go to sleep inside critical section, by atomically releasing lock at same time we go to sleep Condition variable: a queue of threads waiting for something inside a critical section.

Condition variables(3) Condition variables support three operations: Wait() -- release lock, go to sleep, re-acquire lock Note: Releasing lock and going to sleep is atomic Signal() -- wake up a waiter, if any Broadcast() -- wake up all waiters Rule: must hold lock when doing condition variable operations.

A synchronized queue, using condition variables: AddToQueue() { lock.Acquire(); put item on queue; condition.signal(); lock.Release(); } RemoveFromQueue() { while nothing on queue condition.wait(&lock);// release lock; go to sleep; re-acquire lock remove item from queue; return item;

Mesa vs. Hoare monitors Need to be careful about the precise definition of signal and wait. Mesa-style: (most real operating systems) Signaller keeps lock and processor. Waiter simply put on ready queue, with no special priority. (in other words, waiter may have to wait for lock) Hoare-style: (most textbooks) Signaller gives up lock, CPU to waiter; waiter runs immediately Waiter gives lock and processor back to signaller when it exits critical section or if it waits again.

Readers/Writers Motivation Shared database (for example, bank balances, or airline seats) Two classes of users: Readers -- never modify database Writers -- read and modify database Using a single lock on the database would be overly restrictive. Want: many readers at same time only one writer at same time