Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Lecture 8: Concurrency: Mutual Exclusion and Synchronization(cont.) Advanced Operating System Fall 2009.

Similar presentations


Presentation on theme: "1 Lecture 8: Concurrency: Mutual Exclusion and Synchronization(cont.) Advanced Operating System Fall 2009."— Presentation transcript:

1 1 Lecture 8: Concurrency: Mutual Exclusion and Synchronization(cont.) Advanced Operating System Fall 2009

2 2 Three Environments 1. There is no central program to coordinate the processes. The processes communicate with each other through global variable. 2. Special hardware instructions 3. There is a central program to coordinate the processes.

3 3 Hardware Support Disable interrupt CS Enable interrupt Won’t work if we have multiprocessors

4 4 Special Machine Instructions Modern machines provide special atomic hardware instructions  Atomic = non-interruptable Either test memory word and set value Or swap contents of two memory words

5 5 Exchange(int register, int memory) Exchange the contents of a register with that of memory. Shared Variable: lock, initially 0 local variable: key Process P i … Prefix i Key i =1 While(Key i  0) do {exchange(Key i,lock)} CS i Lock=0; … suffix i

6 6 Three Environments 1. There is no central program to coordinate the processes. The processes communicate with each other through global variable. 2. Special hardware instructions 3. There is a central program to coordinate the processes.

7 7 Semaphores A variable that has an integer value upon which 3 operations are defined. Three operations: 1. A semaphore may be initialized to a nonnegative value 2. The wait operation decrements the semaphore value. If the value becomes negative, then the process executing the wait is blocked 3. The signal operation increments the semaphore value. If the value is not positive, then a process blocked by a wait operation is unblocked. Other than these 3 operations, there is no way to inspect or manipulate semaphores.

8 8 Wait(s) and Signal(s) Wait(s) – is also called P(s) { s=s-1; if (s<0) {place this process in a waiting queue} } Signal(s) – is also called V(s) { s=s+1; if(s  0) {remove a process from the waiting queue} }

9 9 Semaphore as General Synchronization Tool Counting semaphore – integer value can range over an unrestricted domain Binary semaphore – integer value can range only between 0 and 1; can be simpler to implement Also known as mutex locks Wait B(s) s is a binary semaphore { if s=1 then s=0 else block this process } Signal B(s) { if there is a blocked process then unblock a process else s=1 } Can implement a counting semaphore S as a binary semaphore

10 10 Note The wait and signal primitives are assumed to be atomic; they cannot be interrupted and each routine can be treated as an indivisible step.

11 11 Mutual Exclusion provided by Semaphores Semaphore S; // initialized to 1 P i prefix i wait (S); CS i signal (S); suffix i Signal B(s) { if there is a blocked process then unblock a process else s=1 } Wait B(s) s is a binary semaphore { if s=1 then s=0 else block this process }

12 12 Message Passing (not covered) Direct Addressing Specific identifier of source and destination processes Send(destination, message) Receive(source, message) Indirect Addressing Messages are not sent directly from sender to receiver but rather are sent to a shared data structure consisting of queues that can temporarily hold messages. Such queues are generally referred to as mailboxes. Thus, for 2 processes to communicate, one process sends a message to the appropriate mailbox and the other process picks up the message from the mailbox. Mailbox P1 Pn … Q1 Qn … Sending processes Receiving processes

13 13 Message Passing (cont.) (not covered) When a send primitive is executed in a process, there are 2 possibilities: Either the sending process is blocked until the message is received Or it is not When a receive primitive is executed in a process, there are 2 possibilities: If a message has previously been sent, the message is received and execution continues If there is no waiting message, then either a) The process is blocked until a message arrives, or b) The process continues to execute, abandoning the attempt to receive. Blocking send, blocking receive Nonblocking send, blocking receive Nonblocking send, nonblocking receive

14 14 Mutual Exclusion (not covered) Create_mailbox(mutex) Send(mutex, null) P i Prefix i Receive(mutex,msg); CS i Send(mutex,msg); Suffix i Main process Mailbox name is mutex

15 15 Two classical examples Producer and Consumer Problem Readers/Writers Problem

16 16 Two classical examples Producer and Consumer Problem Readers/Writers Problem

17 17 Producer and Consumer Problem Producer can only put something in when there is an empty buffer Consumer can only take something out when there is a full buffer Producer and consumer are concurrent processes … 0 N-1 N buffers producer consumer

18 18 Producer and Consumer Problem(cont.) Global Variable 1. B[0..N-1] – an array of size N (Buffer) 2. P – a semaphore, initialized to N 3. C – a semaphore, initialized to 0 Local Variable 1. In – a ptr(integer) used by the producer, in=0 initially 2. Out – a ptr(integer) used by the consumer, out=0 initially Producer Process producer: produce(w) wait(p) B[in]=w in=(in+1)mod N signal(c) goto producer Consumer Process consumer: wait(c) w=B[out] out=(out+1)mod N signal(p) consume(w) goto consumer W is a local buffer used by the producer to produce W is a local buffer used by the consumer to store the item to be consumed

19 19 Two classical examples Producer and Consumer Problem Readers/Writers Problem

20 20 Readers/Writers Problem Suppose a data object is to be shared among several concurrent processes. Some of these processes want only to read the data object, while others want to update (both read and write) Readers – Processes that read only Writers – processes that read and write If a reader process is using the data object, then other reader processes are allowed to use it at the same time. If a writer process is using the data object, then no other process (reader or writer) is allowed to use it simultaneously.

21 21 Solve Readers/Writers Problem using wait and signal primitives(cont.) Global Variable: Wrt is a binary semaphore, initialized to 1; Wrt is used by both readers and writers For Reader Processes: Mutex is a binary semaphore, initialized to 1;Readcount is an integer variable, initialized to 0 Mutex and readcount used by readers only Reader Processes Wait(mutex) Readcount=readcount+1 If readcount=1 then wait(wrt) Signal(mutex); … Reading is performed … Wait(mutex) Readcount=readcount-1 If readcount=0 then signal(wrt) Signal(mutex) Writer Processes Wait(wrt) … Writing is performed … Signal(wrt)

22 22 End of lecture 6 Thank you!


Download ppt "1 Lecture 8: Concurrency: Mutual Exclusion and Synchronization(cont.) Advanced Operating System Fall 2009."

Similar presentations


Ads by Google