1 / 77

Lecture #5

Lecture #5. Concurrency: Mutual Exclusion and Synchronization (상호배제와 동기화). 프로그램 실행 ( Program Execution). 프로그램은 프로세스의 집합으로 이루어진다 프로그램 실행( Program Execution) 순차 실행 (Sequential Execution) 병행 실행( Concurrent Execution) 병렬 실행( Parallel Execution) 병행성(동시성: Concurrency) > 병렬성( Parallelism).

ash
Download Presentation

Lecture #5

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lecture #5 Concurrency: Mutual Exclusion and Synchronization (상호배제와 동기화) 신라대학교 컴퓨터공학과 - 운영체제

  2. 프로그램 실행 (Program Execution) • 프로그램은 프로세스의 집합으로 이루어진다 • 프로그램 실행(Program Execution) • 순차 실행(Sequential Execution) • 병행 실행(Concurrent Execution) • 병렬 실행(Parallel Execution) • 병행성(동시성:Concurrency) > 병렬성(Parallelism) 신라대학교 컴퓨터공학과 - 운영체제

  3. 병렬 실행(Concurrent Execution)의 문제점 • 병행 프로세스들(Concurrent processes (or threads))는 일반적으로 데이터와 자원을 공유한다 • 만약 공유 데이터에 대한 접근을 적절하게 제어하지 않으면 일부 프로세스는 잘못된 데이터를 접근하게 된다 • 병행 프로세스의 실행 결과는 병행 프로세스 간의 실행이 섞이는 순서에 의하여 결정되어 진다 신라대학교 컴퓨터공학과 - 운영체제

  4. 공유 데이터 접근의 예 • 3 variables: A, B, C which are shared by thread T1 and thread T2 • T1 computes C = A+B • T2 transfers amount X from A to B • T2 must do: A = A -X and B = B+X (so that A+B is unchanged) • But if T1 computes A+B after T2 has done A = A-X but before B = B+X then T1 will not obtain the correct result for C = A + B • The resource sharing requires the synchronization between threads 신라대학교 컴퓨터공학과 - 운영체제

  5. 생산자 프로세스 (Producer Process) 소비자 프로세스 (Consumer Process) in out 병행 실행의 예(1) • 생산자 & 소비자 프로세스 1 n n-1 2 3 … 4 신라대학교 컴퓨터공학과 - 운영체제

  6. 병행 실행의 예(2) • 소비자 프로세스 코드 repeat while count == 0 do no-op; nextc = buffer[out]; out = (out + 1) mod n; count = count - 1; . . . nextc에서 한 항목을 소비 . . . until FALSE; • 생산자 프로세스 코드 repeat . . . nextp에서 한 항목을 생산 . . . while count == n do no-op; buffer[in] = nextp; in = (in + 1) mod n; count = count + 1; until FALSE; 신라대학교 컴퓨터공학과 - 운영체제

  7. 병행 실행의 예(3) • 생산자 프로세스 코드 count = count + 1;  register1 = count register1 = register1 + 1 count = register1 • 소비자 프로세스 코드 count = count - 1;  register2 = count register2 = register2 - 1 count = register2 신라대학교 컴퓨터공학과 - 운영체제

  8. 병행 실행의 예(4) • 생산자 프로세스와 소비자 프로세스가 병행 실행되는 경우 : T0: 생산자  register1 = count {register1 = 5} T1: 생산자  register1 = register1+1 {register1 = 6} T2: 소비자  register2 = count {register2 = 5} T3: 소비자  register2 = register2-1 {register2 = 4} T4: 소비자  count = register2 {count = 4} T5: 생산자  count = register1 {count = 6} • 문제점: 두 개의 프로세스가 동시에 count 변수에 접근 • 해결책: count 변수에 접근하는 순서를 제어, 즉 한번에 하나의 프로세스만이 count 변수에 접근하도록 제어 • 프로세스 동기화(Process Synchronization)가 필요 신라대학교 컴퓨터공학과 - 운영체제

  9. 병렬 실행에서의 자원 공유 • 병행 실행에서의 자원 공유에 따른 문제점 • 상호 배제(Mutual Exclusion) • 병행 프로세스들이 공유 자원을 동시에 접근함으로써 전혀 예기치 못하는 결과가 발생할 수 있다 • 한 시점에 공유 자원을 접근하는 실행 단위(프로세스 또는 쓰레드)는 단지 하나만 존재하여야 한다 • 실행 동기화 (Execution Synchronization) • 하나의 프로그램은 구성하는 병행 프로세스들은 상호간에 일련의 실행 순서에 맞추어 실행되어야 한다 • 예: 생산자-소비자 모델에서 생산자가 버퍼에 데이터를 저장하여야 소비자가 데이터 처리가 가능해진다 신라대학교 컴퓨터공학과 - 운영체제

  10. 임계구역(critical section) 문제(1) • 임계구역(Critical Section: CS) • 하나의 프로세스가 공유 데이터를 접근하는 코드를 실행할 때에 그 프로세스가 임계구역에 있다라고 정의 • 상호 배제(Mutual Exclusion) • The execution of critical sections must be mutually exclusive • 다중 프로세서 환경에서도 임계구역에서 실행하고 있는 프로세스는 오직 하나만 있어야 한다 • 상호 배제에 대한 접근법 • 병행 실행되는 각 프로세스는 임계구역에 들어가기 위해서는 임계구역 실행에 대한 허용(permission)을 얻어야 한다 신라대학교 컴퓨터공학과 - 운영체제

  11. 임계구역(critical section) 문제(2) • 임계 구역(critical section) 문제 • 프로세스 동기화 프로토콜을 설계 • 병행 프로세스의 실행 결과가 실행 순서에 상관없이 일정하도록 프로세스 상호간에 협조하는 프로토콜을 설계 신라대학교 컴퓨터공학과 - 운영체제

  12. 임계 구역 문제의 기본 가정(1) • 병행 프로세스의 전형적인 구조 • 진입 구역(entry section) • 임계 구역에 진입하기 위해 허용을 요구하는 코드 영역 • 출구 구역(exit section) • 임계 구역 다음에 나오는 영역으로 임계 구역을 벗어나기 위한 코드 영역 • 잔류 구역(remainder section) • 프로그램의 나머지 코드 영역 신라대학교 컴퓨터공학과 - 운영체제

  13. 병행 프로세스의 전형적인 구조(계속) 임계 구역 문제의 기본 가정(2) Repeat entry section critical section exit section remainder section until FALSE 신라대학교 컴퓨터공학과 - 운영체제

  14. 각 프로세스는 0이 아닌 속도로 실행된다 n개의 프로세스의 상대적인 실행 속도에 대한 가정은 없다 n 개의 프로세스의 실행순서에 대한 가정은 없다 많은 CPU가 존재할 수 있다 동일한 메모리 영역을 동시에 접근할 수 없도록 제어하는 메모리 하드웨어가 있다 임계 구역 문제에 대한 해결책을 찾는 것은 진입 구역과 출구 구역의 코드를 정의하는 것이다 임계 구역 문제의 기본 가정(3) 신라대학교 컴퓨터공학과 - 운영체제

  15. 임계 구역 문제의 해결책에 대한 세 가지 요구조건(1) • 상호배제(Mutual Exclusion) • 항상 최대한 하나의 프로세스만이 임계구역에서 실행할 수 있다 • 한 프로세스가 임계구역에 있으면 다른 프로세스는 임계구역에 진입할 수 없다 • 진행(Progress) • 임계구역에 있는 프로세스가 없고 다른 프로세스들이 임계 구역 진입을 요구할 때에 단지 잔류 구역에서 실행되고 있지 않은 프로세스 만이 임계 구역에 진입할 수 있다 • 임계 구역 진입 프로세스 선택은 무기한 연기될 수 없다 • Deadlock Avoidance 신라대학교 컴퓨터공학과 - 운영체제

  16. 임계 구역 문제의 해결책에 대한 세 가지 요구조건(2) • 한계 대기(Bounded Waiting) • 하나의 프로세스가 임계 구역 진입을 요청한 후에 진입이 허용될 때까지 다른 프로세스가 임계 구역을 진입하는 회수(시간)에 한계를 두어야 한다 • 그렇지 않으면 진입 요청한 프로세스는 기아상태(starvation)가 될 수 있다 신라대학교 컴퓨터공학과 - 운영체제

  17. 임계 구역 문제 해결책의 분류 • 소프트웨어 해결책(Software solutions) • software algorithms who’s correctness does not rely on any other assumptions • 하드웨어 해결책(Hardware solutions) • rely on some special machine instructions • 운영체제 해결책(Operation System solutions) • OS provide some functions and data structures to the programmer 신라대학교 컴퓨터공학과 - 운영체제

  18. 소프트웨어 해결책 • 2개의 프로세스를 위한 해결책 • Algorithm 1 and 2 are incorrect • Algorithm 3 is correct (Peterson’s algorithm) • n 개의 프로세스를 위한 해결책 • the bakery algorithm • Notation • 2 processes: P0 and P1 • When presenting processes, Pi, Pj always denote the other processes (i != j) 신라대학교 컴퓨터공학과 - 운영체제

  19. The shared variable turn is initialized (to 0 or 1) before executing any Pi Pi’s critical section is executed iff turn = i Pi is busy waiting if Pj is in CS: mutual exclusion is satisfied Progress requirement is not satisfied Algorithm 1 Process Pi: repeat while(turn!=i){}; CS turn:=j; RS until FALSE • Ex: P0 has a large RS and P1 has a small RS. If turn=0, P0 enter its CS and then its long RS (turn=1). P1 enter its CS and then its RS (turn=0) and tries again to enter its CS: request refused! He has to wait that P0 leaves its RS. 신라대학교 컴퓨터공학과 - 운영체제

  20. Keep one BOOL variable for each process: flag[0] and flag[1] Pi signals that it is ready to enter it’s CS by: flag[i]:=true Mutual Exclusion is satisfied but not the progress requirement If we have the sequence: T0: flag[0]:=true T1: flag[1]:=true Both process will wait forever to enter their CS: we have a deadlock Algorithm 2 Process Pi: repeat flag[i]:=true; while(flag[j]){}; CS flag[i]:=false; RS until FALSE 신라대학교 컴퓨터공학과 - 운영체제

  21. Initialization: flag[0]:=flag[1]:=false turn := 0 or 1 Willingness to enter CS is specified by flag[i]:=true If both processes attempt to enter their CS simultaneously, only one turn value will last Exit section: specifies that Pi is unwilling to enter CS Algorithm 3 (Peterson’s algorithm) Process Pi: repeat flag[i]:=true; turn:=j; do {} while (flag[j]and turn=j); CS flag[i]:=false; RS until FALSE 신라대학교 컴퓨터공학과 - 운영체제

  22. Algorithm 3: proof of correctness(1) • Mutual exclusion is preserved since: • P0 and P1 are both in CS only if flag[0] = flag[1] = true and only if turn = i for each Pi (impossible) • The progress and bounded waiting requirements are satisfied: • Pi cannot enter CS only if stuck in while() with condition flag[ j] = true and turn = j. • If Pj is not ready to enter CS then flag[ j] = false and Pi can then enter its CS 신라대학교 컴퓨터공학과 - 운영체제

  23. Algorithm 3: proof of correctness(2) • If Pj has set flag[ j]=true and is in its while(), then either turn=i or turn=j • If turn=i, then Pi enters CS. If turn=j then Pj enters CS but will then reset flag[ j]=false on exit: allowing Pi to enter CS • but if Pj has time to reset flag[ j]=true, it must also set turn=i • since Pi does not change value of turn while stuck in while(), Pi will enter CS after at most one CS entry by Pj (bounded waiting) 신라대학교 컴퓨터공학과 - 운영체제

  24. n-process solution: The bakery algorithm (1) • Before entering their CS, each Pi receives a number. Holder of smallest number enter CS (like in bakeries, ice-cream stores...) • When Pi and Pj receives the same number: • if I < j then Pi is served first, else Pj is served first • Pi resets its number to 0 in the exit section • Notation: • (a, b) < (c, d) if a < c or if a = c and b < d • max(a0,…,ak) is a number b such that b >= ai for i=0,..k 신라대학교 컴퓨터공학과 - 운영체제

  25. The bakery algorithm (2) • Shared data: • choosing: array[0..n-1] of boolean; • initialized to false • number: array[0..n-1] of integer; • initialized to 0 • Correctness relies on the following fact: • If Pi is in CS and Pk has already chosen its number[k]!= 0, then (number[i], i) < (number[k], k) 신라대학교 컴퓨터공학과 - 운영체제

  26. The bakery algorithm (3) Process Pi: repeat choosing[i]:=true; number[i]:=max(number[0]..number[n-1])+1; choosing[i]:=false; for j:=0 to n-1 do { while (choosing[j]) {}; while (number[j]!=0 and (number[j],j)<(number[i],i)){}; } CS number[i]:=0; RS until FALSE 신라대학교 컴퓨터공학과 - 운영체제

  27. 소프트웨어 해결책의 단점 • 임계 구역에 진입하기를 원하는 프로세스는 busy waiting한다 • 필요 없이 CPU 시간을 낭비한다 • 임계 구역이 긴 경우에는 임계 구역 진입을 기다리는 프로세스를 대기 상태로 전환하는 것( blocking)이 효과적이다 신라대학교 컴퓨터공학과 - 운영체제

  28. On a uniprocessor: mutual exclusion is preserved but efficiency of execution is degraded while in CS, we cannot interleave execution with other processes that are in RS On a multiprocessor: mutual exclusion is not preserved Generally not an acceptable solution 하드웨어 해결책: interrupt disabling Process Pi: repeat disable interrupts critical section enable interrupts remainder section until FALSE 신라대학교 컴퓨터공학과 - 운영체제

  29. 하드웨어 해결책: special machine instructions • 일반적으로 하나의 메모리 영역에 대한접근은 배타적이다 • 하나의 메모리에 대해 동시에 여러 개의 접근이 이루어질 수 없다 • 명령어 확장: 같은 메모리 영역에 2 가지의 동작을 원자적으로 (atomically)실행하는 명령어 제공 • 예 - reading and writing a memory location • test-and-set, xchg(swap) instructions • The execution of such an instruction is mutually exclusive (even with multiple CPUs) • 상호배제 문제를 해결하기 위해 이용 신라대학교 컴퓨터공학과 - 운영체제

  30. A C++ description of test-and-set instruction: test-and-set instruction(1) bool testset(int& i) { if (i==0) { i=1; return true; } else { return false; } } 신라대학교 컴퓨터공학과 - 운영체제

  31. An algorithm that uses testset instruction for Mutual Exclusion: Shared variable b is initialized to 0 Only the first Piwho sets b enter CS test-and-set instruction(2) Process Pi: repeat repeat{} until testset(b); CS b:=0; RS until FALSE 신라대학교 컴퓨터공학과 - 운영체제

  32. test-and-set instruction (3) • Mutual exclusion is preserved • if Pi enter CS, the other Pj are busy waiting • Problem: still using busy waiting • When Pi exit CS, the selection of the Pj who will enter CS is arbitrary: no bounded waiting • Hence starvation is possible 신라대학교 컴퓨터공학과 - 운영체제

  33. Processors (ex: Pentium) often provide an atomic xchg(a,b) instruction that swaps the content of a and b. void xchg(int a, int b) { int temp; temp = a; a = b; b = temp; } xchg(a,b) suffers from the same drawbacks as test-and-set instruction xchg instruction 신라대학교 컴퓨터공학과 - 운영체제

  34. Shared variable b is initialized to 0 Each Pi has a local variable k The only Pi that can enter CS is the one who finds b=0 This Pi excludes all the other Pj by setting b to 1 Using xchg for mutual exclusion Process Pi: repeat k:=1 repeat xchg(k,b) until k=0; CS b:=0; RS until FALSE 신라대학교 컴퓨터공학과 - 운영체제

  35. 운영체제 해결책 • 운영체제는 프로세스 동기화를 위한 도구를 제공 • 세마포어(Semaphores) • 모니터(Monitors) • 메시지 전송(Message Passing) 신라대학교 컴퓨터공학과 - 운영체제

  36. 세마포어(Semaphores) (1) • 정의 definition • Busy waiting을 요구하지 않는 Synchronization tool (provided by the OS) • 운영체제가 제공하는 하나의 자원 • 세마포어 S는 다음의 2 atomic and mutually exclusive operations에 의해서만 접근할 수 있는 정수 • wait(S) • signal(S) • Busy waiting avoidance • when a process has to wait, it will be put in a blocked queue of processes waiting for the same event 신라대학교 컴퓨터공학과 - 운영체제

  37. A semaphore is a record (structure): wait 연산에서 프로세스가 세마포어 S을 기다려야 할 때에는 대기 상태로 전환되어 세마포어 큐에 들어간다 signal 연산은 세마포어 큐로부터 하나의 프로세스를 꺼내어 준비 큐에저장한다 세마포어(Semaphores) (2) type semaphore = record count: integer; queue: list of process end; var S: semaphore; 신라대학교 컴퓨터공학과 - 운영체제

  38. 세마포어 연산 (atomic) wait(S): S.count--; if (S.count<0) { block this process place this process in S.queue } signal(S): S.count++; if (S.count<=0) { remove a process P from S.queue place this process P on ready list } • S.count must be initialized to a nonnegative value (depending on application) 신라대학교 컴퓨터공학과 - 운영체제

  39. Semaphores: observations (1) • S.count >=0 일 때 • the number of processes that can execute wait(S) without being blocked = S.count • S.count<0 일 때 • the number of processes waiting on S = |S.count| • Atomicity and mutual exclusion • no 2 process can be in wait(S) and signal(S) (on the same S) at the same time (even with multiple CPUs) • The blocks of code defining wait(S) and signal(S) are critical sections 신라대학교 컴퓨터공학과 - 운영체제

  40. Semaphores: observations (2) • The critical sections defined by wait(S) and signal(S) are very short • typically 10 instructions • Solutions: • uniprocessor: disable interrupts during these operations (i.e: for a very short period) • This does not work on a multiprocessor machine • multiprocessor: use previous software or hardware schemes • The amount of busy waiting should be small. 신라대학교 컴퓨터공학과 - 운영체제

  41. Using semaphores for solving critical section problems • n 개의 프로세스에 적용 • S.count을 1로 초기화 • 단지 하나의 프로세스만 CS 진입이 허용된다 (mutual exclusion) • S.count을 k로 초기화하면 k 개의 프로세스가 CS에 진입할 수 있다 Process Pi: repeat wait(S); CS signal(S); RS until FALSE 신라대학교 컴퓨터공학과 - 운영체제

  42. We have 2 processes: P1 and P2 Statement S1 in P1 needs to be performed before statement S2 in P2 Then define a semaphore ‘synch’ Initialize ‘synch’ to 0 Proper synchronization is achieved by having in P1: S1; signal(synch); And having in P2: wait(synch); S2; Using semaphores to synchronize processes 신라대학교 컴퓨터공학과 - 운영체제

  43. 생산자/소비자 문제(producer/consumer problem) • A producer process produces information that is consumed by a consumer process • 예: a print program produces characters that are consumed by a printer • 생성된 정보를 사용할 때까지 저장할 buffer가 필요하다 • A common paradigm for cooperating processes 신라대학교 컴퓨터공학과 - 운영체제

  44. P/C Problem: unbounded buffer(1) • 1차원 배열로 구성된 무한 버퍼(unbounded buffer)을 가지는 경우 • in은 다음에 생성된 정보를 저장할 위치를 지정 • Out 은 다음에 소비될 저장하고 있는 위치를 지정 신라대학교 컴퓨터공학과 - 운영체제

  45. P/C Problem: unbounded buffer(2) • semaphore S : to perform mutual exclusion on the buffer • only 1 process at a time can access the buffer • semaphore N : to synchronize producer and consumer on the number N (= in - out) of items in the buffer • an item can be consumed only after it has been created 신라대학교 컴퓨터공학과 - 운영체제

  46. P/C Problem: unbounded buffer(3) • 생산자는 항상 자유롭게 생성된 정보를 버퍼에 추가할 수 있다 • 버퍼에 저장하기 전에 wait(S) • 버퍼에 저장한 후에 signal(S) • 생산자는 버퍼에 새로운 정보를 추가한 후에 새로운 정보가 생성되었음을 동기화 하기 위해 signal(N) 수행 • 소비자는 먼저 소비할 정보가 있는지를 검사하기 위해 wait(N)을 수행하고, 정보가 버퍼에 있으면 버퍼를 접근하기 위해 wait(S)/signal(S) 을 수행 신라대학교 컴퓨터공학과 - 운영체제

  47. P/C Problem: unbounded buffer(4)- Solution append(v): b[in]:=v; in++; Initialization: S.count:=1; N.count:=0; in:=out:=0; take(): w:=b[out]; out++; return w; 신라대학교 컴퓨터공학과 - 운영체제

  48. P/C Problem: unbounded buffer(5)- Solution • Producer: • repeat • produce v; • wait(S); • append(v); • signal(S); • signal(N); • until FALSE • Consumer: • repeat • wait(N); • wait(S); • w:=take(); • signal(S); • consume(w); • until FALSE critical sections 신라대학교 컴퓨터공학과 - 운영체제

  49. P/C Problem: unbounded buffer(6) • Remarks: • The consumer must perform wait(N) before wait(S), otherwise deadlock occurs if consumer enter CS while the buffer is empty 신라대학교 컴퓨터공학과 - 운영체제

  50. P/C Problem: finite circular buffer(1) • 저장된 정보의 수인 N이 최소한 1 이상일 때에 소비자가 버퍼 접근이 가능하다(ie. N != in – out) • 생산자는 버퍼의 빈 공간의 수 E가 1 이상일 때에 버퍼에 정보를 저장할 수 있다 신라대학교 컴퓨터공학과 - 운영체제

More Related