전통적 동기화 문제

Woosung Kim·2022년 1월 14일
0

전통적 동기화 문제의 예시

  1. Producer - Consumer Problem (생산자 - 소비자 문제)
    • 유한버퍼 문제(Bounded Buffer Problem)
  2. Readers - Writers Problem
    • 공유 데이터베이스 접근
  3. Dining Philosopher Problem
    • 식사하는 철학자 문제

🐾 Producer - Consumer Problem

유한 버퍼 (Bounded Buffer)

  • 생산자는 생산한 데이터를 소비자에게 직통으로 보내지 않고 생산자와 소비자 사이에 놓인 버퍼(buffer)에 저장한다.
    - Why?
    • 생산자와 소비자의 작업 속도에 차이가 있기 때문에
  • 생산자는 버퍼가 가득 차면 데이터를 더 저장할 수 없다.
  • 소비자는 버퍼가 비면 데이터를 뺄 수 없다.

문제점과 해결책

  • 임계 구역에 대한 동시 접근으로 잘못된 결과가 나올 수 있다.
  • Solution : 세마포어를 통한 상호 배타

Busy-Wait

  • busy waiting(=spinning) : 프로세스 동기화 상황에서 프로세스가 자원에 대한 접근 권한을 얻기 위해, 될 때까지 접근 조건을 반복적으로 확인하는 일을 뜻한다.
  • 생산자 : 버퍼가 가득 차면 기다려야 한다.
  • 소비자 : 버퍼가 비면 기다려야 한다.

세마포어를 통한 Busy-Wait 회피

  • Empty : 생산자와 버퍼와의 관계를 제어할 수 있는 세마포
  • Full : 소비자와 버퍼의 관계를 제어하는 세마포

출처: https://copycode.tistory.com/67 [ITstory]

🐾 Readers - Writers Problem

  • 데이터를 읽기만 하는 Readers와 데이터를 수정하여 동기화 문제를 야기할 수 있는 Writers에 대해 동일하게 한 번에 한 개의 프로세스만 접근할 수 있도록 상호배타 조건을 넣으면 비효율적이다.
  • Reader는 데이터 수정을 하지 않으므로 여러 Reader들이 임계 구역에 동시에 접근하여도 데이터 일관성(Data Consistency)이 유지된다.
  • reader가 있을 때 writer의 접근 : 허용 X
  • writer가 있을 때 reader의 접근 : 허용 X
  • reader가 있을 때 reader의 접근 : 허용 O

🐾 Dining Philosopher Problem

철학자 문제의 Dead Lock 성립 조건

  • 상호 배제 -> 젓가락은 한 번에 한 철학자만 사용할 수 있다.
  • 점유와 대기 -> 왼쪽 젓가락을 점유하면서 오른쪽 젓가락을 대기한다.

  • 비선점 -> 이미 누군가가 집어 든 젓가락을 강제로 뺏을 수 없다.

  • 환형 대기 -> 모든 철학자들이 오른쪽에 앉은 철학자가 젓가락을 놓기를 기다린다.

문제

모든 사람이 왼쪽의 젓가락을 잡으면 교착상태 발생 -> 무한히 대기하다가 기아상태 발생

해결 방법

  • 최대 4명의 철학자만 테이블에 동시에 앉을 수 있도록 한다.
  • 한 철학자가 젓가락 두 개를 한번에 집을 수 있을 때만 집는다.
  • 비대칭 해결안을 사용. 홀수 번호의 철학자는 왼쪽을 먼저 집고 오른쪽을 집는다. 짝수 번호는 오른쪽을 먼저 집고 왼쪽을 집는다.

✏️ 기아 상태(Starvation)

  • 정의
    여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때, 특정 프로세스가 영원히 자원 할당이 되지 않는 경우
  • 해결 방법
    프로세스의 우선 순위 변경
    요청을 순서대로 처리하는 요청 큐 사용

✏️ 교착상태 (Dead Lock)

  • 정의
    둘 이상의 프로세스나 스레드가 자원을 점유한 상태에서 서로 다른 프로세스나 스레드가 점유하고 있는 자원을 요구하며 무한정 기다리는 현상
  • 발생 조건
    - 상호 배제(Mutual Exclusion): 한번에 하나의 프로세스나 스레드만이 자원에 접근할 수 있음
    - 비선점(No Preemption): 다른 프로세스나 스레드의 자원을 뺏을 수 없음
    - 점유와 대기(Hold and Wait): 자원을 가진 상태에서 다른 자원을 기다림
    - 순환 대기(Circular Wait): 순환 형태로 자원을 대기
profile
개발하는 강아지

0개의 댓글