cs5460 operating systems lecture 8 critical sections
play

CS5460: Operating Systems Lecture 8: Critical Sections (Chapter 6) - PowerPoint PPT Presentation

CS5460: Operating Systems Lecture 8: Critical Sections (Chapter 6) CS 5460: Operating Systems Synchronization When two (or more) processes (or threads) may have conflicting accesses to A memory location A hardware device A


  1. CS5460: Operating Systems Lecture 8: Critical Sections (Chapter 6) CS 5460: Operating Systems

  2. Synchronization  When two (or more) processes (or threads) may have conflicting accesses to … – A memory location – A hardware device – A file or other OS-level resource  … synchronization is required  What makes two accesses conflict?  Critical section is the most basic solution – What are some others? CS 5460: Operating Systems

  3. Critical Section Review  Critical section: a section of code that only a single process / thread may be executing at a time  Requirements: – Cannot allow multiple processes in critical section at the same time (mutual exclusion) – Ensure progress (lack of deadlock) – Ensure fairness (lack of livelock) Entry code (preamble) Need to ensure only one thread is Critical Section code; ever in this region of code at a time Exit code (postscript) CS 5460: Operating Systems

  4. Implementing Critical Sections  Critical sections build on lower-level atomic operations – Loads – Stores – Disabling interrupts – Etc.  Critical section implementation is a bit tricky on modern processors CS 5460: Operating Systems

  5. Lock Example  Spinlock from multicore Linux 3.2 for ARM – Spinlocks busy wait instead of blocking – This is the most basic sync primitive used inside an OS  Remember: Out-of-order memory models break algorithms like Peterson – We’re going to need help from the hardware  ARM offers a powerful synchronization primitive Issue a “ load exclusive ” to read a value from RAM and 1. put the location into exclusive mode Issue a matching “ store exclusive ” 2. » Successful if no other processor updated the location between the read and the write » Fails if someone updated the location, and the store does not happen  Often called “load-link / store-conditional” CS 5460: Operating Systems

  6.  Spinlock data structure: typedef struct { volatile unsigned int lock; } arch_spinlock_t;  lock == 1 if the lock is held  lock == 0 if the lock is free  Why use a whole integer to store 1 bit? CS 5460: Operating Systems

  7. void arch_spin_lock (arch_spinlock_t *lock) { tmp = *lock unsigned long tmp; __asm__ __volatile__( flag = (tmp == 0) "1: ldrex %0, [%1]\n" " teq %0, #0\n" If (!flag) sleep “ wfene\n” If (flag) strex (lock, 1) " strexeq %0, %2, [%1]\n" If (flag), did strex " teqeq %0, #0\n" return 0? " bne 1b" : "=&r" (tmp) If strex failed, : "r" (&lock->lock), "r" (1) start over : "cc"); smp_mb(); } CS 5460: Operating Systems

  8. void arch_spin_unlock (arch_spinlock_t *lock) { smp_mb(); __asm__ __volatile__( " str %1, [%0]\n" : : "r" (&lock->lock), "r" (0) : "cc"); }  These functions are in: linux/arch/arm/include/asm/ spinlock.h CS 5460: Operating Systems

  9. How to Prove Correctness? 1. Mutual exclusion a. One process in critical section, another process tries to enter à à Show that second process will block in entry code b. Two (or more) processes are in the entry code à à Show that at most one will enter critical section 2. Progress (== absence of deadlock) a. No process in critical section, P1 arrives à à P1 enters b. Two (or more) processes are in the entry code à à Show that at least one will enter critical section 3. Bounded waiting (== fairness) a. One process in critical section, another process is waiting to enter à à show that if first process exits the critical section and attempts to re-enter, show that waiting process will be get in CS 5460: Operating Systems

  10. Proving Mutual Exclusion flag[2] ß ß {0,0}; One in CS and another wants turn ß ß 0;  in à à show second will wait What happens here? Entry code: – Assume P0 in CS, P1 tries to enter flag[me] ß ß 1; – What happens? turn ß ß them; while (flag[them] && turn != me); Multiple in entry à à at most one  reaches critical section Critical section: – Assume P0 and P1 try to enter P0 here Milk ß ß Milk + 1; – Can both succeed? Exit code: flag[me] ß ß 0; CS 5460: Operating Systems

  11. Proving Mutual Exclusion flag[2] ß ß {0,0}; One in CS and another wants turn ß ß 0;  in à à show second will block P0 and P1 here … Entry code: – Assume P0 in CS, P1 tries to enter flag[me] ß ß 1; – What happens? turn ß ß them; while (flag[them] && turn != me); Multiple in entry à à at most one  reaches critical section Critical section: Can both – Assume P0 and P1 try to enter Milk ß ß Milk + 1; get here? – Can both succeed? Exit code: flag[me] ß ß 0; CS 5460: Operating Systems

  12. Proving Progress flag[2] ß ß {0,0}; No process in critical section à à turn ß ß 0;  show arriver will always enter P0 tries to enter … Entry code: – Nobody in CS and P0 arrives flag[me] ß ß 1; – What happens? turn ß ß them; while (flag[them] && turn != me); Multiple in entry à à at least one  will enter Critical section: – Assume P0 and P1 try to enter Will it? Milk ß ß Milk + 1; – Will at least one succeed? Exit code: flag[me] ß ß 0; CS 5460: Operating Systems

  13. Proving Progress flag[2] ß ß {0,0}; No process in critical section à à turn ß ß 0;  show arriver will always enter P0 and P1 here … Entry code: – Nobody in CS and P0 arrives flag[me] ß ß 1; – What happens? turn ß ß them; while (flag[them] && turn != me); Multiple in entry à à at least one  will enter Critical section: Will one – Assume P0 and P1 try to enter Milk ß ß Milk + 1; get here? – Will at least one succeed? Exit code: flag[me] ß ß 0; CS 5460: Operating Systems

  14. Proving Bounded Wait flag[2] ß ß {0,0}; turn ß ß 0; One in CS, another waiting à à P1 here …  Entry code: if 1 st exits and tries to re-enter, flag[me] ß ß 1; 2 nd will succeed first turn ß ß them; while (flag[them] && – Assume P0 in CS and P1 waiting turn != me); – P0 exits CS and tries to re-enter – Does P1 get in before P2? Critical section: P0 starts Milk ß ß Milk + 1; here … Exit code: flag[me] ß ß 0; CS 5460: Operating Systems

  15. Proving Correctness  Mutual exclusion – One in CS à à another that tries Entry code: to enter fails while (Note) {}; – Two or more try to enter à à Note ß ß 1; at most one can succeed  Progress Critical section: – Nobody waiting and one arrives BuyMilk(); à it will succeed à – Two or more try to enter à à Exit code: at least one will succeed Note ß ß 0;  Bounded wait – One inside and one waiting, 1 st exits à à 2 nd will enter before 1 st Which of these requirements does this solution fail? Milk V.1 CS 5460: Operating Systems

  16. Implementing Critical Sections  Mutual exclusion flag[2] = {0,0}; – One in CS à à another that tries to enter fails Entry code: – Two or more try to enter à à while (flag[them]) {}; at most one can succeed flag[me] ß ß 1;  Progress – Nobody waiting and one arrives Critical section: à it will succeed à BuyMilk(); – Two or more try to enter à à at least one will succeed Exit code:  Bounded wait flag[me] ß ß 0; – One inside and one waiting, 1 st exits à à 2 nd will enter before 1 st Which of these requirements does this solution fail? Milk V.2 CS 5460: Operating Systems

  17. Implementing Critical Sections  Mutual exclusion flag[2] = {0,0}; – One in CS à à another that tries to enter fails Entry code: – Two or more try to enter à à flag[me] ß ß 1; at most one can succeed while (flag[them]) {};  Progress – Nobody waiting and one arrives Critical section: à it will succeed à BuyMilk(); – Two or more try to enter à à at least one will succeed Exit code:  Bounded wait flag[me] ß ß 0; – One inside and one waiting, 1 st exits à à 2 nd will enter before 1 st Which of these requirements does this solution fail? Milk V.3 CS 5460: Operating Systems

  18. Implementing Critical Sections  Mutual exclusion turn ß ß 0; – One in CS à à another that tries to enter fails Entry code: – Two or more try to enter à à at most one can succeed while (turn != me) {};  Progress Critical section: – Nobody waiting and one arrives BuyMilk(); à it will succeed à – Two or more try to enter à à at least one will succeed Exit code: turn ß ß them;  Bounded wait – One inside and one waiting, 1 st exits à à 2 nd will enter before 1 st Which of these requirements does this solution fail? Milk V.4 CS 5460: Operating Systems

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend