Operating Systems, 112 Synchronization, Part 2 Semaphores.

Slides:



Advertisements
Similar presentations
Operating Systems Semaphores II
Advertisements

Chapter 5 Concurrency: Mutual Exclusion and Synchronization Operating Systems: Internals and Design Principles, 6/E William Stallings Patricia Roy Manatee.
1 Chapter 5 Concurrency: Mutual Exclusion and Synchronization Principals of Concurrency Mutual Exclusion: Hardware Support Semaphores Readers/Writers Problem.
Ch 7 B.
Ch. 7 Process Synchronization (1/2) I Background F Producer - Consumer process :  Compiler, Assembler, Loader, · · · · · · F Bounded buffer.
Chapter 6 Process Synchronization Bernard Chen Spring 2007.
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.
Process Synchronization. Module 6: Process Synchronization Background The Critical-Section Problem Peterson’s Solution Synchronization Hardware Semaphores.
1 Semaphores and Monitors CIS450 Winter 2003 Professor Jinhua Guo.
Operating Systems Synchronization, Part 2 Semaphores.
CY2003 Computer Systems Lecture 05 Semaphores - Theory.
Classic Synchronization Problems
Informationsteknologi Wednesday, September 26, 2007 Computer Systems/Operating Systems - Class 91 Today’s class Mutual exclusion and synchronization 
Synchronization: semaphores and some more stuff 1 Operating Systems, 2011, Danny Hendler & Amnon Meisels.
Interprocess Communication
Silberschatz, Galvin and Gagne  Operating System Concepts Chapter 7: Process Synchronization Background The Critical-Section Problem Synchronization.
5.6 Semaphores Semaphores –Software construct that can be used to enforce mutual exclusion –Contains a protected variable Can be accessed only via wait.
Review: Producer-Consumer using Semaphores #define N 100// number of slots in the buffer Semaphore mutex = 1;// controls access to critical region Semaphore.
Chapter 6: Process Synchronization. Outline Background Critical-Section Problem Peterson’s Solution Synchronization Hardware Semaphores Classic Problems.
5.6.2 Thread Synchronization with Semaphores Semaphores can be used to notify other threads that events have occurred –Producer-consumer relationship Producer.
Process Synchronization
Semaphores CSCI 444/544 Operating Systems Fall 2008.
1 Chapter 6: Concurrency: Mutual Exclusion and Synchronization Operating System Spring 2007 Chapter 6 of textbook.
1 Outline Processes Threads Inter-process communication (IPC) Classical IPC problems Scheduling.
Process Synchronization Topics: 1.Background 2.The critical-section problem 3.Semaphores 4.Critical Regions 5.Monitors Topics: 1.Background 2.The critical-section.
Instructor: Umar KalimNUST Institute of Information Technology Operating Systems Process Synchronization.
Operating Systems CSE 411 CPU Management Oct Lecture 13 Instructor: Bhuvan Urgaonkar.
Semaphores. Readings r Silbershatz: Chapter 6 Mutual Exclusion in Critical Sections.
Chapter 6: Process Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts – 7 th Edition, Feb 8, 2005 Background Concurrent.
CY2003 Computer Systems Lecture 06 Interprocess Communication Monitors.
1 CMSC421: Principles of Operating Systems Nilanjan Banerjee Principles of Operating Systems Acknowledgments: Some of the slides are adapted from Prof.
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.
CSC321 Concurrent Programming: §5 Monitors 1 Section 5 Monitors.
Concurrency: Mutual Exclusion and Synchronization Chapter 5.
Silberschatz, Galvin and Gagne  Operating System Concepts Chapter 7: Process Synchronization Background The Critical-Section Problem Synchronization.
Chap 6 Synchronization. Background Concurrent access to shared data may result in data inconsistency Maintaining data consistency requires mechanisms.
Silberschatz, Galvin and Gagne ©2013 Operating System Concepts Essentials – 9 th Edition Chapter 5: Process Synchronization.
Synchronizing Threads with Semaphores
Chapter 6: Process Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts Module 6: Process Synchronization Background The.
Synchronization: semaphores and some more stuff 1 Operating Systems, 2014, Meni Adler, Danny Hendler & Amnon Meisels.
Process Synchronization. Objectives To introduce the critical-section problem, whose solutions can be used to ensure the consistency of shared data To.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 6: Process Synchronization.
Synchronization: semaphores and some more stuff Operating Systems, 2013, Meni Adler, Michael Elhadad, Amnon Meisels& Jihad El-Sana.
Silberschatz, Galvin and Gagne ©2013 Operating System Concepts – 9 th Edition Chapter 5: Process Synchronization.
Mutual Exclusion -- Addendum. Mutual Exclusion in Critical Sections.
Chapter 6 Synchronization Dr. Yingwu Zhu. The Problem with Concurrent Execution Concurrent processes (& threads) often access shared data and resources.
6.1 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 6: Synchronization Background The Critical-Section Problem Peterson’s.
Synchronization: semaphores and some more stuff
Semaphores Synchronization tool (provided by the OS) that does not require busy waiting. Logically, a semaphore S is an integer variable that, apart from.
Process Synchronization
Process Synchronization: Semaphores
Synchronization, Part 2 Semaphores
Background on the need for Synchronization
Chapter 5: Process Synchronization
Lecture 13: Producer-Consumer and Semaphores
Synchronization, Part 2 Semaphores
Synchronization, Part 2 Semaphores
Semaphore Originally called P() and V() wait (S) { while S <= 0
Process Synchronization
Process Synchronization
Synchronization Hank Levy 1.
Critical section problem
CSE 451: Operating Systems Autumn Lecture 8 Semaphores and Monitors
Lecture 13: Producer-Consumer and Semaphores
Synchronization Hank Levy 1.
Chapter 6: Synchronization Tools
Synchronization, Part 2 Semaphores
Presentation transcript:

Operating Systems, 112 Synchronization, Part 2 Semaphores

2 NOTE: starvation freedom Semaphore’s interface doesn’t enforce the implementation of starvation freedom. up(S) up(S) [the `v’ operation] If (there are blocked processes) wake-up one of them Else S++ down(S) down(S) [the ‘p’ operation] If (S ≤ 0) the process is blocked. It will resume execution only after it is woken-up Else S-- Init(i) S = i

Negative values semaphores 3 NOTE: If S is negative, there are |S| blocked processes up(S) up(S) [the `v’ operation] S++ If (there are blocked processes) wake-up one of themdown(S) S-- If (S<0) the process is blocked. It will resume execution only after it is woken-up type semaphore = record value: integer; L: list of process; end; -3 L

Counting Semaphores (Barz) 4 down(S) down(S2); down(S1); S.value--; if (S.value>0) then up(S2); up(S1); up(S): down(S1); S.value++; if (S.value == 1) then up(S2); up(S1); S.value=init_value binary-semaphore: S1=1, S2=min(1, init_value), Create a counting semaphore, S, by using binary semaphores ?? Variables ?

Question 1 Consider the following code snippets run by two processes, P and Q: Add the minimal number of semaphores, initialize them and place them in the code snippets, so the result of the calculation will be correct (5 2 =25). Process P loopP: if (n==0) goto endP; n=n-1; goto loopP; endP: print(sqr) Process Q loopQ: sqr = sqr + 2*n +1; goto loopQ; Shared memory n=5; sqr=0; 5

Question 1 Note that we can break 25 in more than one way: 25=11+9+5=[(5*2+1)+(4*2+1)+(2*2+1)] 25= =[(4*2+1)+(3*2+1)+(2*2+1)+(2*1+1)+(0+1)] Process P loopP: if (n==0) goto endP; down(semA); n=n-1; up(semB); goto loopP; endP: down(semA); print(sqr) Process Q loopQ: down(semB); sqr = sqr + 2*n +1; up(semA); goto loopQ; Shared memory n=5; sqr=0; semA=1; semB=0; 6

7 Question 2 (2007 Moed A) 7 The following constraint graph is a DAG that defines a partial order over code lines. Each vertex is associated with a single line of code in a possible program. A directed edge e(u,v) is used to represent the precedence constraint: code line u must be completed prior to the beginning of code line v. For example, code line S1 should be completed before S2, S5 or S8 are executed, while S6 can only be executed after both S2 and S5 were completed.

Question 2a 88 The following code is executed by two processes, A and B. _______________________________________ Process A Process B S1 S2 S5 S3 S8 S6 S9 S4 S7

9 Question 2a two counting semaphores Use two counting semaphores with properly initialized values so that in every execution of A and B the execution order of code lines will be consistent with the constraint graph defined above. updown That is, add up and down operations within A and B’s code lines so that no precedence constraint is violated. You may assume that in every execution both A and B run their code only once. Note: Partial scoring will be given to solutions using more than two semaphores. 9

10 Question 2a Semaphores: semA=0, semB=0 Process A S1 SemB.up S5 SemB.up S8 S9 SemA.down S7 SemB.up Process B SemB.down S2 S3 SemB.down S6 SemA.up SemB.down S4 10

11 Question 2b Give a concise but accurate explanation why a single semaphore is insufficient for maintaining consistency of the above constraint graph and the two processes. 11

12 Question 2b A single semaphore is insufficient because there are constraints which require that A waits until B completes one of its lines and vice versa. In such a state, having A signaling B and immediately waiting for it on the same semaphore will result in either a deadlock or a breaking of one of its constraints. 12

Question 3 – Producer Consumer Problem 13 #defineN100/* Buffer size */ semaphore semaphoremutex = 1;/* access control to critical section */ semaphore semaphoreempty = N;/* counts empty buffer slots */ semaphore semaphorefull = 0;/* full slots */ producer void producer(void) { intitem; while(TRUE) { produce_item(&item);/* generate something... */ down down(&empty);/* decrement count of empty */ down down(&mutex);/* enter critical section */ enter_item(item);/* insert into buffer */ up up(&mutex);/* leave critical section */ up up(&full);/* increment count of full slots */}

consumer down down up up void consumer(void){ intitem; while(TRUE){ down(&full);/* decrement count of full */ down(&mutex);/* enter critical section */ remove_item(&item);/* take item from buffer */ up(&mutex);/* leave critical section */ up(&empty);/* update count of empty */ consume_item(item);/* do something... */ } } Question 3 – Producer Consumer Problem 14

Question 3 1.The red lines of the following code were swapped. How will this affect the algorithm? producer void producer(void) { intitem; while(TRUE) { produce_item(&item);/* generate something... */ down down(&empty);/* decrement count of empty */ down down(&mutex);/* enter critical section */ up(&mutex); up(&mutex);/* leave critical section */ enter_item(item); enter_item(item);/* insert into buffer */ up up(&full);/* increment count of full slots */ } 15 No mutual exclusion!

Question 3 2. What will happen now? producer void producer(void) { intitem; while(TRUE) { produce_item(&item);/* generate something... */ down down(&empty);/* decrement count of empty */ down down(&mutex);/* enter critical section */ enter_item(item);/* insert into buffer */ up(&full); up(&full);/* increment count of full slots */ up(&mutex); up(&mutex);/* leave critical section */ } 16 No problems…

Question 3 3. And now? consumer down(&mutex); down(&full); up up void consumer(void){ intitem; while(TRUE){ down(&mutex);/* enter critical section */ down(&full);/* decrement count of full */ remove_item(&item);/* take item from buffer */ up(&mutex);/* leave critical section */ up(&empty);/* update count of empty */ consume_item(item);/* do something... */ } } 17 Deadlock!

Question 4 (Moed B 2010) unfair semaphore up down An unfair semaphore is a semaphore which does not guarantee that the wakeup order of processes is similar to their falling asleep order. It does, however, provide the following simple guarantee: if there are sleeping processes on the semaphore while an up operation is invoked, then one of these processes will be woken up (not necessarily the first amongst the waiting processes to do a down).

Question 4 three processes Now you are required to implement a starvation free mutual exclusion algorithm for three processes using 3 unfair counting semaphores: R, S and T, initialized to 1. You are not allowed to use any other variable but these semaphores. Briefly explain why your code satisfies both mutual exclusion and starvation freedom. Add your code and complete the entry and exit section of each process. Briefly explain why your code satisfies both mutual exclusion and starvation freedom.

Question 4 P1’s code: entry: Critical_section() exit: P2’s code: entry: Critical_section() exit: P3’s code: entry: Critical_section() exit: unfair counting semaphores: R, S and T initialized to 1

Question 4 P1’s code: entry: Critical_section() exit: P2’s code: entry: Critical_section() exit: P3’s code: entry: Critical_section() exit: unfair counting semaphores: R, S and T initialized to 1 down (S) down (R) down (T) down (S) down (T) up(R)up(S)up(T)up(R)up(T) up (S)

Question 4 Mutual exclusion: Any process wishing to enter its critical section must successfully complete two ‘down’ operations on two distinct semaphores. Since any process competes over one different “successful down” with each of the other processes, only a single process may successfully enter the critical section at any given moment.

Question 4 Starvation freedom: We first note that there is no starvation problem when using an unfair semaphore with 2 processes (convince yourselves!). Since entrance to the critical section requires passing semaphores which are only shared in pairs no starvation problems will occur.

Question 4, supplement Will this solution work? P1’s code: entry: Critical_section() exit: P2’s code: entry: Critical_section() exit: P3’s code: entry: Critical_section() exit: unfair counting semaphores: R, S and T initialized to 1 down (S) down (R) down (T) down (S) up(R)up(S)up(T)up(R) up(S) up (T) Deadlock!

Question 5 (Midterm 2009) בסעיף זה עליכם לממש event counter תוך שימוש בסמאפורים בינאריים וברגיסטרים ( משתנים התומכים בקריאות ובכתיבות בלבד ). כפי שלמדתם, event counter E מכיל ערך שלם ומאותחל ל - 0. הוא תומך בשלוש פעולות אטומיות : פעולת Advance(E) מקדמת את ערכו של E ב -1 מערך v-1 לערך v ( כאשר v-1 הוא ערכו של E לפני הפעולה ) ומעירה את כל התהליכים אשר ישנו על E בהמתנה לערך v. פעולת Await(E,v) גורמת לתהליך הקורא לה לישון עד אשר ערכו של E מגיע ל -v. אם ערכו של E גדול או שווה ל -v בעת הקריאה לפעולת Await, אזי התהליך ממשיך בריצתו. פעולת Read(E) מחזירה את ערכו הנוכחי של E. ממשו event counter תוך שימוש בסמאפורים בינאריים ( ניתן להניח כי הם הוגנים ). הניחו כי ישנם N תהליכים המשתמשים ב -E וכי המזהים שלהם הינם 0, 1,…,N-1. כל תהליך יכול להשתמש במשתנה MyID השומר את המזהה שלו. 25

Question 5 int waitval[N] (all are initialized to 0) int v = 0 semaphore wait[N] (all are initialized to 0) semaphore mutex (initialized to 1) Advance(E) down(mutex); E.v++; for (i = 0; i < N; i++) if (waitval[i] == E.v) up(wait[i]); up(mutex); Await(E,v) boolean wait = false; down(mutex) if (v > E.v) { wait = true; waitval[MyId] = v; } up(mutex); if (wait) down(wait[MyId]); Read(E) return E.v; 26 Shared variables

Question 5b Counting semaphore mutex=1 Counting semaphore b=0 register v=0, register waiting=0 procedure down( ) { mutex.down( ) if (v == 1){ v=0 mutex.up( )} else { waiting=waiting+1 mutex.up( ) b.down( ) }} procedure up( ){ mutex.down( ) if (waiting > 0){ waiting=waiting-1 b.up( )} else if (v == 0) v=1 mutex.up( ) } למדתם כי אין זה פשוט לממש סמאפור כללי (counting semaphore) מסמאפורים בינאריים. מסתבר כי גם הכוון ההפוך אינו פשוט. להלן קטע קוד המכיל מימוש של סמאפור בינארי מסמאפורים כלליים (counting semaphores) ומרגיסטרים. 27

Question 5b ניתן להניח כי הסמאפורים הכלליים בהם משתמש הקוד שלמעלה הוגנים. עליכם להסביר מדוע קטע הקוד שלמעלה אינו מממש סמאפור בינארי בצורה נכונה. א-הסבירו במדויק מהי הסמאנטיקה של סמאפור בינארי. 1. בעל הערכים 0 או 1 בלבד 2. פעולת down: או שחוסם אם ערך הסמפור הוא 0 או שמשנה את ערך הסמפור ל פעולת up: או שמעיר תהליך שממתין ( אם קיים אחד ), או שמשנה את ערך הסמאפור ל

Question 5b תארו במדויק תסריט בו מספר תהליכים מבצעים פעולות על המימוש לעיל ובו המימוש אינו מקיים סמאנטיקה זו. Process p1 does down and stops prior to b.down Process p2 does down and stops prior to b.down Process p3 does up and finishes the operation (b == 1) Process p4 does up and finishes the operation (b == 2) Process p5 does down and finishes the operation (b == 1) Process p6 does down and finishes the operation (b == 0) התסריט אינו אפשרי כאשר משתמשים בסמפור בינארי מכיוון שלא יכול להיות מצב שבו שני תהליכים יעשו DOWN ושניהם יצליחו. 29