[OS] 프로세스 동기화 (Process Synchronization))

2021. 6. 13. 19:26IT

SMALL

0. 프로세스 동기화

  • 협력하는 프로세스 사이에서 실행 순서 규칙을 정하여 공유 자원의 일관성을 보장하는 것
  • 경쟁 조건(Race condition)이 발생하지 않게, 프로세스들이 공유 자원을 사용할 때 특별한 규칙을 만드는 것


1. 경쟁 조건(Race condition)

  • 여러 프로세스(스레드)가 공유 자원에 동시에 접근할 때, 공유 자원에 대한 접근 순서에 따라 실행 결과가 달라질 수 있는 상황
  • 경쟁 상태를 방지하기 위해 병행 프로세스를 동기화해야 하며, 임계 영역(Critical section)을 이용한 상호배제를 통해 해결할 수 있음

2. 임계 영역(Critical section)

  • 여러 프로세스가 자원을 공유하는 상황에서 하나의 프로세스만 접근할 수 있도록 제한해 둔 코드 영역

 

2-1 임계 영역 문제 해결 조건

  1. 상호배제 (Mutual exclution)
    1. 하나의 프로세스가 임계 영역에 들어가 있다면, 다른 프로세스는 들어갈 수 없어야 함
  2. 진행 (Progress) 
    1. 임계 영역에 들어간 프로세스가 없는 상태에서 들어가려 하는 프로세스가 여러 개라면 어느 것이 들어갈 것인지 결정해야 함
  3. 한정 대기(Bounded waiting)
    1. 다른 프로세스의 기아를 방지하기 위해, 한번 임계구역에 들어간 프로세스는 다음번 임계구역에 들어갈 때 제한을 두어야 함

 

3.  교착 상태(Deadlock)

  • 둘 이상의 프로세스들이 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때 무한 대기 상태에 빠지는 상황

3.0 교착 상태 대표 예제

0. 식사하는 철학자 문제 


process - 철학자 / 자원 - 젓가락

- 원형 테이블에 철학자(process)들이 앉아 있고 철학자의 수만큼 젓가락(자원)이 철학자 사이에 하나씩 놓여 있음

- 철학자들이 식사를 하기 위해서는 양쪽에 하나씩 놓여 있는 젓가락을 둘 다 들어서 사용해야 함.


  1. 철학자는 왼쪽 젓가락을 들 수 있다면 집는다. 
    1. 다른 철학자가 이미 해당 젓가락을 쓰고 있다면 다 쓸 때까지 대기
  2. 오른쪽 젓가락을 들 수 있다면, 들고 맛있게 식사 
    1. 다른 철학자가 이미 해당 젓가락을 쓰고 있다면 다 쓸 때까지 대기
  3. 식사가 끝났으면 오른쪽부터 내려놓고, 왼쪽을 내려놓는다.   
  4. 대기하다가 배고프면 다시 1번으로 돌아간다.


만약 모든 철학자가 배가 고파서 왼쪽 젓가락을 든다면, 모두 무한 대기 상태의 교착 상태에 빠지게 될 것임

식사하는 철학자 문제는 교착상태의 4가지 조건을 모두 만족함

식사하는 철학자 예제 

 

4. 교착상태 4가지 필요 조건

  • 상호배제(Mutual Exclusion)
    • 한 자원에 대한 여러 프로세스는 동시 접근이 불가함
    • (예) 젓가락은 한번에 한 철학자만 사용할 수 있음
  • 보유 및 대기(Hold and Wait)
    • 자원을 가지고 있는 상태에서 다른 프로세스가 사용하고 있는 자원의 반납을 기다리는 것
    • (예) 집어든 젓가락은 계속 들은 채로 사용중인 반대쪽 젓가락을 기다림
  • 비선점 (No Preemption) 
    • 다른 프로세스의 자원을 강제로 뺏어올 수 없음
    • (예) 다른 철학자의 젓가락을 강제로 빼앗을 수 없음
  • 환형 대기(Circular Wait)
    • 각 프로세스가 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있는 것
    • (예) 모든 철학자들이 자신의 오른쪽에 앉은 철학자가 젓가락을 놓기를 기다림

 

5. 교착상태 해결 방법

  • 예방 (Prevention)
    • 교착상태 발생 조건은 위 네가지 경우를 모두 만족시켜야 함 
      • 교착상태를 해결하기 위해서는 네 가지 조건 중 하나만 해결을 하면 됨
  • 회피 (Avoidance)
    • 교착상태의 발생 조건을 없애기보다 발생하지 않도록 알고리즘을 적용하는 방법
      • 예) 자원할당 그래프 알고리즘, 은행원 알고리즘
  • 회복 (Recovery)
    • 교착상태가 발생하는 것을 아예 막지 않고, 만약 교착 상태가 발생하면 발생 이후에 문제를 해결하는 방법
  • 무시 (Ignore)
    • 교착상태를 해결할 때에도 문맥 교환에 의한 오버 헤드로 성능 저하가 생김
      • 교착상태에 의한 성능 저하 < 해결 시 성능 저하 -> 그냥 무시하는 게 더 효과적임

 

 

LIST