Mutual Exclusion – SW & HW By Oded Regev. Outline: Short review on the Bakery algorithm Short review on the Bakery algorithm Black & White Algorithm Black.

Slides:



Advertisements
Similar presentations
Module 6: Process Synchronization
Advertisements

Symmetric Multiprocessors: Synchronization and Sequential Consistency.
CS 603 Process Synchronization: The Colored Ticket Algorithm February 13, 2002.
Concurrency: Mutual Exclusion and Synchronization Chapter 5.
Program correctness The State-transition model A global state S  s 0 x s 1 x … x s m {s k = local state of process k} S0  S1  S2  … Each state transition.
Ch. 7 Process Synchronization (1/2) I Background F Producer - Consumer process :  Compiler, Assembler, Loader, · · · · · · F Bounded buffer.
Process Synchronization Continued 7.2 The Critical-Section Problem.
Mutual Exclusion By Shiran Mizrahi. Critical Section class Counter { private int value = 1; //counter starts at one public Counter(int c) { //constructor.
1 Chapter 2 Synchronization Algorithms and Concurrent Programming Gadi Taubenfeld © 2007 Synchronization Algorithms and Concurrent Programming Gadi Taubenfeld.
Chapter 6: Process Synchronization
Silberschatz, Galvin and Gagne ©2013 Operating System Concepts – 9 th Edition Chapter 5: Process Synchronization.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Chapter 6: Process Synchronization.
Multiprocessor Synchronization Algorithms ( ) Lecturer: Danny Hendler The Mutual Exclusion problem.
1 Operating Systems, 122 Practical Session 5, Synchronization 1.
Chair of Software Engineering Concurrent Object-Oriented Programming Prof. Dr. Bertrand Meyer Lecture 4: Mutual Exclusion.
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 Course Syllabus 1. Introduction - History; Views; Concepts; Structure 2. Process Management - Processes; State + Resources; Threads; Unix implementation.
1 Chapter 3 Synchronization Algorithms and Concurrent Programming Gadi Taubenfeld © 2014 Synchronization Algorithms and Concurrent Programming Synchronization.
Parallel Processing (CS526) Spring 2012(Week 6).  A parallel algorithm is a group of partitioned tasks that work with each other to solve a large problem.
CPSC 668Set 7: Mutual Exclusion with Read/Write Variables1 CPSC 668 Distributed Algorithms and Systems Fall 2009 Prof. Jennifer Welch.
The Critical-Section Problem
1 Course Syllabus 1. Introduction - History; Views; Concepts; Structure 2. Process Management - Processes; State + Resources; Threads; Unix implementation.
Shared Memory Coordination We will be looking at process coordination using shared memory and busy waiting. –So we don't send messages but read and write.
6: Process Synchronization 1 1 PROCESS SYNCHRONIZATION I This is about getting processes to coordinate with each other. How do processes work with resources.
Chapter 6: Process Synchronization. Outline Background Critical-Section Problem Peterson’s Solution Synchronization Hardware Semaphores Classic Problems.
OS Spring’04 Concurrency Operating Systems Spring 2004.
Bakery Algorithm - Proof
Chapter 6: Process Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts – 7 th Edition, Feb 8, 2005 Objectives Understand.
Process Synchronization
Concurrency in Distributed Systems: Mutual exclusion.
Race Conditions CS550 Operating Systems. Review So far, we have discussed Processes and Threads and talked about multithreading and MPI processes by example.
Instructor: Umar KalimNUST Institute of Information Technology Operating Systems Process Synchronization.
02/19/2007CSCI 315 Operating Systems Design1 Process Synchronization Notice: The slides for this lecture have been largely based on those accompanying.
Operating Systems CSE 411 CPU Management Oct Lecture 13 Instructor: Bhuvan Urgaonkar.
1 Lecture 9: Synchronization  concurrency examples and the need for synchronization  definition of mutual exclusion (MX)  programming solutions for.
The Critical Section Problem
28/10/1999POS-A1 The Synchronization Problem Synchronization problems occur because –multiple processes or threads want to share data; –the executions.
Process Synchronization Continued 7.2 Critical-Section Problem 7.3 Synchronization Hardware 7.4 Semaphores.
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.
1 Chapter 10 Distributed Algorithms. 2 Chapter Content This and the next two chapters present algorithms designed for loosely-connected distributed systems.
THIRD PART Algorithms for Concurrent Distributed Systems: The Mutual Exclusion problem.
Chap 6 Synchronization. Background Concurrent access to shared data may result in data inconsistency Maintaining data consistency requires mechanisms.
Mutual Exclusion Using Atomic Registers Lecturer: Netanel Dahan Instructor: Prof. Yehuda Afek B.Sc. Seminar on Distributed Computation Tel-Aviv University.
CY2003 Computer Systems Lecture 04 Interprocess Communication.
1 Chapter 2 Synchronization Algorithms and Concurrent Programming Gadi Taubenfeld © 2014 Synchronization Algorithms and Concurrent Programming Synchronization.
Program correctness The State-transition model A global states S  s 0 x s 1 x … x s m {s k = set of local states of process k} S0  S1  S2  Each state.
Operating Systems CSE 411 CPU Management Dec Lecture Instructor: Bhuvan Urgaonkar.
Chapter 11 Resource Allocation by Mikhail Nesterenko “Distributed Algorithms” by Nancy A. Lynch.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 6: Process Synchronization.
Hwajung Lee. Mutual Exclusion CS p0 p1 p2 p3 Some applications are:  Resource sharing  Avoiding concurrent update on shared data  Controlling the.
Homework-6 Questions : 2,10,15,22.
Chapter 6 Synchronization Dr. Yingwu Zhu. The Problem with Concurrent Execution Concurrent processes (& threads) often access shared data and resources.
OS Winter’03 Concurrency. OS Winter’03 Bakery algorithm of Lamport  Critical section algorithm for any n>1  Each time a process is requesting an entry.
Bakery Algorithm - Proof
CSCE 668 DISTRIBUTED ALGORITHMS AND SYSTEMS
Semaphores Synchronization tool (provided by the OS) that does not require busy waiting. Logically, a semaphore S is an integer variable that, apart from.
Scheduling and Resource Access Protocols: Basic Aspects
Designing Parallel Algorithms (Synchronization)
CSCE 668 DISTRIBUTED ALGORITHMS AND SYSTEMS
The Critical-Section Problem
Course Syllabus 1. Introduction - History; Views; Concepts; Structure
Lecture 2 Part 2 Process Synchronization
Course Syllabus 1. Introduction - History; Views; Concepts; Structure
Multiprocessor Synchronization Algorithms ( )
Course Syllabus 1. Introduction - History; Views; Concepts; Structure
ITEC452 Distributed Computing Lecture 7 Mutual Exclusion
Course Syllabus 1. Introduction - History; Views; Concepts; Structure
Course Syllabus 1. Introduction - History; Views; Concepts; Structure
Syllabus 1. Introduction - History; Views; Concepts; Structure
Presentation transcript:

Mutual Exclusion – SW & HW By Oded Regev

Outline: Short review on the Bakery algorithm Short review on the Bakery algorithm Black & White Algorithm Black & White Algorithm Bounded timestamp Bounded timestamp L-exclusion L-exclusion Mutex and semaphore in HW Mutex and semaphore in HW

Starvation-free Algorithms Bakery and Black & White algorithms are both acting as solutions to enable the program to be starvation free Bakery and Black & White algorithms are both acting as solutions to enable the program to be starvation free Starvation freedom: if a process is trying to enter its critical section, then this process must eventually enter its critical section Starvation freedom: if a process is trying to enter its critical section, then this process must eventually enter its critical section Lets review some attributes of SF Algorithms … Lets review some attributes of SF Algorithms …

Bounded-waiting: There exists a positive integer r for which the algorithm is r-bounded waiting. That is, if a given process is in its entry code, then there is a bound on the number of times any other process is able to enter its critical section before the given process does so. Bounded-waiting: There exists a positive integer r for which the algorithm is r-bounded waiting. That is, if a given process is in its entry code, then there is a bound on the number of times any other process is able to enter its critical section before the given process does so. Linear-waiting: actually 1-bounded-waiting, meaning no process can execute its critical section twice while some other process is kept waiting. Linear-waiting: actually 1-bounded-waiting, meaning no process can execute its critical section twice while some other process is kept waiting. FIFO: no beginning process can pass an already waiting process (sometimes called 0-Bounded-waiting). FIFO: no beginning process can pass an already waiting process (sometimes called 0-Bounded-waiting). r-Fairness: A waiting process will be able to enter its CS before all the other processes collectively are able to enter their CS r+1 times. r-Fairness: A waiting process will be able to enter its CS before all the other processes collectively are able to enter their CS r+1 times.

Bakery Algorithm The idea is similar to a line at the bakery The idea is similar to a line at the bakery A customer takes a number greater than numbers of other customers A customer takes a number greater than numbers of other customers Each of the threads gets a unique identifier Each of the threads gets a unique identifier

Bakery Algorithm Thread i number[i] = -1 number[i] = 1 + max {number[j] | (1 j n), 0} for j = 1 to n { await number[j] -1 await (number[j] 0) (number[j],j) (number[i],i) } critical section number[i] = 0

Bakery Attributes: Deadlock-freedom: If a thread is trying to enter its critical section, then some thread, not necessarily the same one, eventually enters its critical section. Deadlock-freedom: If a thread is trying to enter its critical section, then some thread, not necessarily the same one, eventually enters its critical section. Starvation-free (each process waiting to get into its CS part will eventually get there) Starvation-free (each process waiting to get into its CS part will eventually get there) FIFO FIFO

What are the problems with this algorithm?? Computing the Maximum Computing the Maximum The size of the register number[i] must be unbounded. The size of the register number[i] must be unbounded. Is it possible to fix this problem while using only one additional shared bit?? Is it possible to fix this problem while using only one additional shared bit??

The Black-White Bakery Algorithm Bounding the space of the Bakery Algorithm Bakery (FIFO, unbounded) The Black-White Bakery Algorithm FIFO Bounded space + one bit

The Black-White Bakery Algorithm Every process i gets a colored ticket - color(i) and number(i) in its entry section. The color is the same as the current value of the shared bit color. The number is greater than the maximum between the processes who share the same color as process i. Every process i gets a colored ticket - color(i) and number(i) in its entry section. The color is the same as the current value of the shared bit color. The number is greater than the maximum between the processes who share the same color as process i. The order between the colored tickets is defined as follows: The order between the colored tickets is defined as follows: If 2 tickets have different colors – the ticket with the color different from the shared bit color is smaller. If 2 tickets have different colors – the ticket with the color different from the shared bit color is smaller. If 2 tickets have the same color, the ticket with the smaller number is smaller. If 2 tickets have the same color, the ticket with the smaller number is smaller. If 2 tickets have the same color and number (how is it possible?) the process with the smaller identifier enters the CS first. If 2 tickets have the same color and number (how is it possible?) the process with the smaller identifier enters the CS first.

How does the shared color bit is written? The first thing process i does when it leaves its critical section is to set the color bit to a value which is different from the color of its ticket. The first thing process i does when it leaves its critical section is to set the color bit to a value which is different from the color of its ticket. 3 data structures are used: 3 data structures are used: A single shared bit named color A single shared bit named color A boolean array choosing[1 … n] A boolean array choosing[1 … n] An array with n-entries where each entry is a colored ticket. An array with n-entries where each entry is a colored ticket.

time The Black-White Bakery Algorithm doorway 12345n CS exit waiting entry remainder color bit

The Black-White Bakery Algorithm The Black-White Bakery Algorithm code of process i, i {1,..., n} choosing[i] = true mycolor[i] = color number[i] = 1 + max{number[j] | (1 j n) (mycolor[j] = mycolor[i])} choosing[i] = false for j = 0 to n do await choosing[j] = false if mycolor[j] = mycolor[i] then await (number[j] = 0) (number[j],j) (number[i],i) (mycolor[j] mycolor[i]) else await (number[j] = 0) (mycolor[i] color) (mycolor[j] = mycolor[i]) fi od critical section if mycolor[i] = black then color = white else color = black fi number[i] = 0

Algorithm correctness: Lemma 1: Assume that at time t, the value of the color bit is c(black|white). Then, any process which at time t is in its entry section and holds a ticket with a color different than c must enter its CS before any process with a ticket of color c can enter its CS. Lemma 2: Assume that at time t the value of the color bit has changed from c to the other value. Then, at time t, every process that is in its entry section has a ticket of color c.

Summary – Black & White mutual exclusion mutual exclusion deadlock-freedom deadlock-freedom FIFO FIFO Uses finite number of bounded size registers, the numbers taken by waiting processes can grow only up to n, where n is the number of processes. Uses finite number of bounded size registers, the numbers taken by waiting processes can grow only up to n, where n is the number of processes.

Bounded Timestamps Black & White is a private case solution to a much bigger problem. Black & White is a private case solution to a much bigger problem. The numbers in the Bakery (and in B&W) actually represented a timestamp. The numbers in the Bakery (and in B&W) actually represented a timestamp. the time is infinite of course, so how can we make sure that our time labeling will not over flow in time?? the time is infinite of course, so how can we make sure that our time labeling will not over flow in time?? How important is the overflow problem in the real world?

We will focus on a sequential timestamping system, in which we assume that a thread can scan and label in a single atomic step. Think of the set of timestamps as nodes of a directed graph (called a precedence graph). There is an edge from node a to node b if a is a later timestamp than b. Think of assigning a timestamp to a thread as placing that thread s token on a node. The precedence graph is irreflexive, antisymmetric, not necessarily transitive.

A thread performs a scan by locating the other threads tokens, and it performs a label by moving its own token to a node a such that there is an edge from a to every other thread s node.

The precedence graph for the unbounded counter used in the Bakery array appears in the last figure. Not surprisingly, the graph is infinite Let s view a solution for 2 threads only: Let s view a solution for 2 threads only:

The only cycle in the graph T2 has length three, and there are only two threads, so the order among the threads is never ambiguous. Let G be a precedence graph, and A and B subgraphs of G (possibly single nodes). We say that A dominates B in G if every node of A has edges directed to every node of B. Let graph multiplication be the following composition operator for graphs: G * H, for graphs G and H, is the following non- commutative operation:

Replace every node v of G by a copy of H (denoted Hv), and let Hv dominate Hu in G * H if v dominates u in G. Define the graph Tk inductively to be: 1. T1 is a single node. 2. T2 is the three-node graph defined above. 3. For k > 2, Tk = T2 * Tk-1.

How can we scale this to more than 2 threads? How can we scale this to more than 2 threads?

Summary - Bounded Timestamps The key to understanding the n-thread labeling algorithm is that the nodes covered by tokens can never form a cycle. As mentioned, two thread can never form a cycle on T2, because the shortest cycle in T2 requires three nodes. How does the label method work for three threads? When A calls the label method, if both of the other threads have tokens on the same T2 subgraph, then move to a node on the next highest T2 subgraph, the one whose nodes dominate that T2 subgraph.

L-exclusion problem: How to design an algorithm which guarantees that up to L processes and no more may simultaneously access some shared resource (their CS). How to design an algorithm which guarantees that up to L processes and no more may simultaneously access some shared resource (their CS). A solution is required to withstand the slow-down or even crash of up to L-1 processes (more explicitly, a single failure of a process at the head of the queue should not tie up all the resources). A solution is required to withstand the slow-down or even crash of up to L-1 processes (more explicitly, a single failure of a process at the head of the queue should not tie up all the resources). The bus ride story … The bus ride story … Teller in a bank story … Teller in a bank story …

Some definitions: L-exclusion: no more than l processes are at their CS at the same time. L-exclusion: no more than l processes are at their CS at the same time. L-deadlock-freedom: if strictly fewer than l processes fail, then if a process is trying to enter its CS, then some process, not necessarily the same one, eventually enters its CS. L-deadlock-freedom: if strictly fewer than l processes fail, then if a process is trying to enter its CS, then some process, not necessarily the same one, eventually enters its CS. L- starvation-freedom: if strictly fewer than l processes fail, then any correct process that is trying to enter its CS must eventually enter it. L- starvation-freedom: if strictly fewer than l processes fail, then any correct process that is trying to enter its CS must eventually enter it.

Explain why the FIFO property and the L- deadlock-freedom property cannot be mutually satisfied when L>1 ?? Explain why the FIFO property and the L- deadlock-freedom property cannot be mutually satisfied when L>1 ?? Lets see an example of a L-starvation-free algorithm … Lets see an example of a L-starvation-free algorithm …

Peterson L-starvation-free algorithm Initially b[1..n] all 0, turn[1 … n-L] all 1 for level = 1 to n-L do b[i] = level; turn[level] = i; repeat counter = 0; for k = 1 to n do if b[k] >= level then counter = counter + 1; until (counter <= n-level or turn[level] != i) od; Critical section; B[i] = 0;

Properties of the algorithm: Satisfied L-exclusion and L-starvation-freedom. Satisfied L-exclusion and L-starvation-freedom. L-exclusion: exactly one process waits at each level. Once L processes enter their CS any other active process must be waiting on the n-L levels. L-exclusion: exactly one process waits at each level. Once L processes enter their CS any other active process must be waiting on the n-L levels. L-deadlock-free: assume to the contrary … L-deadlock-free: assume to the contrary … The fact that the algorithm is L-deadlock-free and the fact that at any level a new process always releases (by setting turn[level] to its value) all the other processes at the level that came before it to climb up to the next level ensures L-starvation-freedom The fact that the algorithm is L-deadlock-free and the fact that at any level a new process always releases (by setting turn[level] to its value) all the other processes at the level that came before it to climb up to the next level ensures L-starvation-freedom

Mutex and semaphore in HW HW features can make any programming task easier and improve system efficiency. HW features can make any programming task easier and improve system efficiency. In general we can state that any solution to the CS problem requires that critical regions be protected by locks. In general we can state that any solution to the CS problem requires that critical regions be protected by locks. in this section we will explore some simple HW instructions that are avilable on many systems and show how they can be used effectively to solve the CS problem in this section we will explore some simple HW instructions that are avilable on many systems and show how they can be used effectively to solve the CS problem

The CS could be solved simply in a uniprocessor environment if we could prevent interrupts from occurring while a shared variable was being modified. This is the approach taken by nonpreemptive kernels. This approach is extremly inefficient in multi processor environment. The CS could be solved simply in a uniprocessor environment if we could prevent interrupts from occurring while a shared variable was being modified. This is the approach taken by nonpreemptive kernels. This approach is extremly inefficient in multi processor environment. We will explore 4 HW based atomic instructions: We will explore 4 HW based atomic instructions: TestAndSet() TestAndSet() Swap() Swap() Wait() Wait() Signal() Signal()

Boolean TestAndSet (boolean *target) { boolean rv = *target; boolean rv = *target; *target = TRUE; return rv; } Mutex implementation with TestAndSet() Do { while (TestAndSet(&lock) ) ; // do nothing // critical section lock = FALSE; //remainder section }while(TRUE) Is this implementation is good enough to fulfill our needs??

void Swap (boolean *a, boolean *b) { boolean temp = *a; *a = *b; *b = temp; } Mutex implementation with Swap() do { key = TRUE; while (key == TRUE) Swap(&lock, &key); // critical section lock = FALSE; //remainder section } while (TRUE)

Although the last 2 algorithm satisfy the mutual- exclusion requirement, they do not satisfy the bounded-waiting requirement. Although the last 2 algorithm satisfy the mutual- exclusion requirement, they do not satisfy the bounded-waiting requirement. The next algorithm will stasfied all the CS requirments: The next algorithm will stasfied all the CS requirments: The common data-structures are: The common data-structures are: Boolean waiting[n]; Boolean waiting[n]; Boolean lock; Boolean lock; Process i can enter its CS only if either (waiting[i] == false) or (key == false) Process i can enter its CS only if either (waiting[i] == false) or (key == false)

do { waiting[i] = TRUE; key = TRUE; while (waiting[i] && key) key = TestAndSet(&lock); waiting[i] = FALSE; //critical section j = (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)

Semaphores: A semaphore S is an integer variable that, apart from initialization, is accessed only through 2 standard atomic operations: wait() and signal(). A semaphore S is an integer variable that, apart from initialization, is accessed only through 2 standard atomic operations: wait() and signal(). wait(S) { while (S <= 0) ; //no-op S--;} Signal(s) { S++;}

Usage: Operating systems often distinguish between counting and binay semaphores. Operating systems often distinguish between counting and binay semaphores. The value of a counting semaphore can range over unrestricted domain. The value of a counting semaphore can range over unrestricted domain. The value of a binary semaphore can range only between 0 and 1. The value of a binary semaphore can range only between 0 and 1. Binary semaphore can be used to solve the critical section problem. Binary semaphore can be used to solve the critical section problem. Counting semaphore can be used to control access to a given resource consisting of a finite number of instances. Counting semaphore can be used to control access to a given resource consisting of a finite number of instances. We can also use semaphores to solve various synchronization problems. We can also use semaphores to solve various synchronization problems.

For example, consider 2 running processes P1 with a statement S1 and P2 with S2. suppose we require that S2 be executes only after S1 has completed. For example, consider 2 running processes P1 with a statement S1 and P2 with S2. suppose we require that S2 be executes only after S1 has completed. In P1 In P1S1;Signal(S) In P2 In P2Wait(S);S2; S is initialized to 0. S is initialized to 0.

Implementation The main disadvantage of the semaphore definition given here is that it requires busy waiting. The main disadvantage of the semaphore definition given here is that it requires busy waiting. Busy waiting wastes CPU cycles that some other process might be able to use productively. Busy waiting wastes CPU cycles that some other process might be able to use productively. This type of semaphore is also called a spinlock This type of semaphore is also called a spinlock We can modify the definition of the wait() and signal() operations as follows … We can modify the definition of the wait() and signal() operations as follows …

Instead of engaging in busy-waiting the process can block itself. Instead of engaging in busy-waiting the process can block itself. The block() operation places a process into a waiting queue associated with the semaphore, and the state of the process is switched to waiting state. The block() operation places a process into a waiting queue associated with the semaphore, and the state of the process is switched to waiting state. A process that is blocked, waiting on a semaphore S, should be restarted when some other process execute a signal() operation. A process that is blocked, waiting on a semaphore S, should be restarted when some other process execute a signal() operation. The process is restarted by wakeup() operation, which changes the state of at most one process from waiting to ready. The process is restarted by wakeup() operation, which changes the state of at most one process from waiting to ready.

To implement semaphores under this definition we define a semaphore as a C struct. To implement semaphores under this definition we define a semaphore as a C struct. typedef struct { int value; struct process *list; } semaphore; The wait() operation can now be defined as: The wait() operation can now be defined as: wait(semaphore *S) { S->value--; if (S->value value < 0) { add this process to S->list; block();}}

The signal() operation can now be defined as: The signal() operation can now be defined as: signal(semaphore *S) { S->value++; if (S->value value <= 0) { remove a process P from S->list wakeup(P);}} The block() operation suspends the process that invokes it. The wakeup(P) operation resumes the execution of a blocked process P. The block() operation suspends the process that invokes it. The wakeup(P) operation resumes the execution of a blocked process P. These 2 operations are provided by the operating system as a basic system calls. These 2 operations are provided by the operating system as a basic system calls.

Some notes: In the definition with the busy-waiting, the value of the semaphore is never negative. In the definition with the busy-waiting, the value of the semaphore is never negative. In the second definition, if the value is negative it represent the number of processes waiting on that semaphore. In the second definition, if the value is negative it represent the number of processes waiting on that semaphore. The critical aspect of semaphores is that they must be executed atomically. The critical aspect of semaphores is that they must be executed atomically. We must guarantee that no 2 processes can execute wait() and signal() on the same semaphore at the same time. We must guarantee that no 2 processes can execute wait() and signal() on the same semaphore at the same time. How can we do it in a single processor environment? How can we do it in a single processor environment? What about multiprocessor environment?? What about multiprocessor environment??

In conclusion: Short review on the Bakery algorithm Short review on the Bakery algorithm Black & White Algorithm Black & White Algorithm Bounded timestamp Bounded timestamp L-exclusion L-exclusion Mutex and semaphore in HW Mutex and semaphore in HW Thank You