Lecture 10 - Synchronization - Part 2 PDF

Summary

This lecture covers synchronization in operating systems. It discusses the critical section problem and various hardware and software solutions, including memory barriers, mutex locks, semaphores, and atomic variables.

Full Transcript

Chapter 6: Synchronization Tools Operating System Concepts – 10 th Edition Silberschatz, Galvin and Gagne ©2018 Outline ▪ Background ▪ The Critical-Section Problem ▪ Peterson’s Solution...

Chapter 6: Synchronization Tools Operating System Concepts – 10 th Edition Silberschatz, Galvin and Gagne ©2018 Outline ▪ Background ▪ The Critical-Section Problem ▪ Peterson’s Solution ▪ Hardware Support for Synchronization ▪ Mutex Locks ▪ Semaphores ▪ Monitors ▪ Liveness ▪ Evaluation Operating System Concepts – 10 th Edition 6.2 Silberschatz, Galvin and Gagne ©2018 Objectives ▪ Describe the critical-section problem and illustrate a race condition ▪ Illustrate hardware solutions to the critical-section problem using memory barriers, compare-and-swap operations, and atomic variables ▪ Demonstrate how mutex locks, semaphores, monitors, and condition variables can be used to solve the critical section problem ▪ Evaluate tools that solve the critical-section problem in low-, Moderate-, and high-contention scenarios Operating System Concepts – 10 th Edition 6.3 Silberschatz, Galvin and Gagne ©2018 Memory Barrier ▪ Memory model are the memory guarantees a computer architecture makes to application programs. ▪ Memory models may be either: Strongly ordered – where a memory modification of one processor is immediately visible to all other processors. Weakly ordered – where a memory modification of one processor may not be immediately visible to all other processors. ▪ A memory barrier is an instruction that forces any change in memory to be propagated (made visible) to all other processors. Operating System Concepts – 10 th Edition 6.4 Silberschatz, Galvin and Gagne ©2018 Memory Barrier Instructions ▪ When a memory barrier instruction is performed, the system ensures that all loads and stores are completed before any subsequent load or store operations are performed. ▪ Therefore, even if instructions were reordered, the memory barrier ensures that the store operations are completed in memory and visible to other processors before future load or store operations are performed. Operating System Concepts – 10 th Edition 6.5 Silberschatz, Galvin and Gagne ©2018 Memory Barrier Example ▪ Returning to the example of slides 6.17 - 6.18 ▪ We could add a memory barrier to the following instructions to ensure Thread 1 outputs 100: ▪ Thread 1 now performs while (!flag) memory_barrier(); print x ▪ Thread 2 now performs x = 100; memory_barrier(); flag = true ▪ For Thread 1 we are guaranteed that that the value of flag is loaded before the value of x. ▪ For Thread 2 we ensure that the assignment to x occurs before the assignment flag. Operating System Concepts – 10 th Edition 6.6 Silberschatz, Galvin and Gagne ©2018 Synchronization Hardware ▪ Many systems provide hardware support for implementing the critical section code. ▪ Uniprocessors – could disable interrupts Currently running code would execute without preemption Generally too inefficient on multiprocessor systems  Operating systems using this not broadly scalable ▪ We will look at two forms of hardware support: 1. Hardware instructions 2. Atomic variables Operating System Concepts – 10 th Edition 6.7 Silberschatz, Galvin and Gagne ©2018 Hardware Instructions ▪ Special hardware instructions that allow us to either test-and-modify the content of a word, or to swap the contents of two words atomically (uninterruptedly.) Test-and-Set instruction Compare-and-Swap instruction Operating System Concepts – 10 th Edition 6.8 Silberschatz, Galvin and Gagne ©2018 The test_and_set Instruction ▪ Definition boolean test_and_set (boolean *target) { boolean rv = *target; *target = true; return rv: } ▪ Properties Executed atomically Returns the original value of passed parameter Set the new value of passed parameter to true Operating System Concepts – 10 th Edition 6.9 Silberschatz, Galvin and Gagne ©2018 Solution Using test_and_set() ▪ Shared boolean variable lock, initialized to false ▪ Solution: do { while (test_and_set(&lock)) ; lock = false; } while (true); ▪ Does it solve the critical-section problem? Operating System Concepts – 10 th Edition 6.10 Silberschatz, Galvin and Gagne ©2018 The compare_and_swap Instruction ▪ Definition int compare_and_swap(int *value, int expected, int new_value) { int temp = *value; if (*value == expected) *value = new_value; return temp; } ▪ Properties Executed atomically Returns the original value of passed parameter value Set the variable value the value of the passed parameter new_value but only if *value == expected is true. That is, the swap takes place only under this condition. Operating System Concepts – 10 th Edition 6.11 Silberschatz, Galvin and Gagne ©2018 Solution using compare_and_swap ▪ Shared integer lock initialized to 0; ▪ Solution: while (true){ while (compare_and_swap(&lock, 0, 1) != 0) ; lock = 0; } ▪ Does it solve the critical-section problem? Operating System Concepts – 10 th Edition 6.12 Silberschatz, Galvin and Gagne ©2018 Atomic Variables ▪ Typically, instructions such as compare-and-swap are used as building blocks for other synchronization tools. ▪ One tool is an atomic variable that provides atomic (uninterruptible) updates on basic data types such as integers and booleans. ▪ For example: Let sequence be an atomic variable Let increment() be operation on the atomic variable sequence The Command: increment(&sequence); ensures sequence is incremented without interruption: Operating System Concepts – 10 th Edition 6.13 Silberschatz, Galvin and Gagne ©2018 Atomic Variables ▪ The increment() function can be implemented as follows: void increment(atomic_int *v) { int temp; do { temp = *v; } while (temp != (compare_and_swap(v,temp,temp+1)); } Operating System Concepts – 10 th Edition 6.14 Silberschatz, Galvin and Gagne ©2018 Mutex Locks ▪ Previous solutions are complicated and generally inaccessible to application programmers ▪ OS designers build software tools to solve critical section problem ▪ Simplest is mutex lock Boolean variable indicating if lock is available or not ▪ Protect a critical section by First acquire() a lock Then release() the lock ▪ Calls to acquire() and release() must be atomic Usually implemented via hardware atomic instructions such as compare-and-swap. Operating System Concepts – 10 th Edition 6.15 Silberschatz, Galvin and Gagne ©2018 Solution to CS Problem Using Mutex Locks while (true) { acquire lock critical section release lock remainder section } Operating System Concepts – 10 th Edition 6.16 Silberschatz, Galvin and Gagne ©2018 Semaphore ▪ Synchronization tool that provides more sophisticated ways (than Mutex locks) for processes to synchronize their activities. ▪ Semaphore S – integer variable ▪ Can only be accessed via two indivisible (atomic) operations wait() and signal()  Originally called P() and V() ▪ Definition of the wait() operation wait(S) { while (S

Use Quizgecko on...
Browser
Browser