ch 7 b

15
Ch 7 B

Upload: hua

Post on 06-Jan-2016

37 views

Category:

Documents


0 download

DESCRIPTION

Ch 7 B. Q 7.1. What is the meaning of the term busy waiting? a process is waiting for a condition to be satisfied in a tight loop without relinquishing the processor. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Ch 7 B

Ch 7 B

Page 2: Ch 7 B

Q 7.1• What is the meaning of the term busy waiting?– a process is waiting for a condition to be satisfied in a tight

loop without relinquishing the processor.– Alternatively, a process could wait by relinquishing the

processor, and block on a condition (e.g., I/O, semaphore) and wait to be awakened at some appropriate time in the future.

• Can busy waiting be avoided altogether? Explain your answer?.– Busy waiting can be avoided but increase the overhead– putting a process to sleep and having to wake it up when

the appropriate program state is reached.

Page 3: Ch 7 B

Semaphore– The Semaphore class provides the following operations:

• Semaphore(char* debugName, int initialValue) • void wait(S) • void signal()

– void wait()• Decrement the semaphore's count, blocking the caller if the count

is zero.

– void signal()• Increment the semaphore's count, releasing one thread if any are

blocked waiting on the count.

Page 4: Ch 7 B

The typical way to use semaphore• When programming, to define a semaphore, just simply:

– Semaphore sema(“choose_a_name”, 1);

• Then, use wait() and signal() to implement Mutual Exclusion

void example(){

// do somethingsema.wait();// do something here in critical sectionsema.signal();//…return;

}

Page 5: Ch 7 B

Question 7.7• Show that, if the wait() and signal() operations

are not executed atomically, then mutual exclusion may be violated.

Suppose the value of semaphore S = 1 and processes P1 and P2 execute wait(S) concurrently.a.T0: P1 determines that value of S =1b.T1: P2 determines that value of S =1c.T2: P1 decrements S by 1 and enters critical sectiond.T3: P3 decrements S by 1 and enters critical section

Answer

Page 6: Ch 7 B

Question• Consider this solution to the readers-writers problem

WriterReaderdo {wait (wrt) ;// writing is performedsignal (wrt) ;} while (true)

do {wait (mutex) ;readcount ++ ;if (readcount == 1) wait(wrt) ;signal (mutex)// reading is performedwait (mutex) ;readcount - - ;if (readcount == 0) signal(wrt) ;signal (mutex) ;} while (true)

What is the purpose of the semaphore “wrt”?To guarantee mutual exclusion to the critical section

What is the purpose of the semaphore “mutex”?To guarantee mutual exclusion when updating the shared variable readcount

Suppose a writer process is inside its critical section, while another writer and n readers are waiting outside their critical sections. Which semaphores are they waiting on, respectively?

the writer is waiting on wrt , the 1st reader is waiting on wrt and the other n-1 readers are waiting on mutex

Page 7: Ch 7 B

QuestionPlease correct all errors in the following solution for the Bounded-Buffer problem. The buffer has size N, and is initially empty?.

ProducerConsumer

do{…// Produce an item in nextp…wait(mutex) wait(empty)…// Add nextp to buffer….signal (mutex);signal (full); }while(true);

do{wait (mutex); wait (full);…// remove an item from buffer to nextc…signal (mutex);signal (empty);…// consume the item in nextc…} while(true);

Initilization

semaphore mutex, empty, full;mutex=1;empty=0; full=N;

//Order should be switched

//Order should be switched

//Should be empty=N

//Should be full=0

Page 8: Ch 7 B

Operating System Concepts

Monitors• High-level synchronization construct that allows the safe sharing of

an abstract data type among concurrent processes.

monitor monitor-name{

shared variable declarationsprocedure body P1 (…) {

. . .}procedure body P2 (…) {

. . .} procedure body Pn (…) {

. . .} {

initialization code}

}

Page 9: Ch 7 B

Operating System Concepts

Monitors

• To allow a process to wait within the monitor, a condition variable must be declared, as

condition x, y;• Condition variable can only be used with the

operations wait and signal.– The operation

x.wait();means that the process invoking this operation is suspended until another process invokes

x.signal();– The x.signal operation resumes exactly one

suspended process. If no process is suspended, then the signal operation has no effect.

Page 10: Ch 7 B

Monitor with condition variables

Page 11: Ch 7 B

Question• The signal() operation is used with semaphores and

monitors. Explain the key difference in its runtime behavior in the two cases. (Hint: consider how this affects the wait() operation in another process) ?Monitor When the signal() operation is used in monitors, if a signal is performed and if there are no waiting processes, the signal is simply ignored and the system does not remember the fact that the signal took place. If a subsequent wait operation is performed, then the corresponding thread simply blocks.

SemaphoreIn semaphores, on the other hand, every signal results in a corresponding increment of the semaphore value even if there are no process waiting. A future wait() operation could immediately succeed because of the earlier increment

Page 12: Ch 7 B

Question• If several processes are suspended on

condition x and and x.singnal() operation is executed by some process , how we determine which suspended process should be resumed next

• FCFS• Conditional wait construct•X.wait(c) , where c is a priority number for each process

Page 13: Ch 7 B

Monitor to allocate single resourcemonitor ResourceAllocation{ boolean busy;

condition x;void acquire(int time) {

if(busy)x.wait(time);

busy =true;}

void release() {busy = false;x.signal();

}Void init(){busy = false;}

}

Page 14: Ch 7 B

Question 7.14

• Consider a system consisting of processes P1, P2, ..., Pn, each of which has a unique priority number. Write a monitor that allocates three identical line printers to these processes, using the priority numbers for deciding the order of allocation

Page 15: Ch 7 B

7.14 Answer type resource = monitor

var P: array[3] of boolean; X: condition; procedure acquire (id: integer, printer-id: integer); begin if P[0] and P[1] and P[2] then X.wait(id) if not P[0] then printer-id := 0; else if not P[1] then printer-id := 1; else printer-id := 2; P[printer-id]:=true; end

procedure release (printer-id: integer) begin P[printer-id]:=false; X.signal; end

begin P[0] := P[1] := P[2] := false; end