시프 22-Races2

강준호·2024년 6월 2일

시스템프로그래밍

목록 보기
14/18

레이스와 동기화 2

세마포어 (Semaphores)

세마포어란?

  • 세마포어는 숫자와 연관되어 있습니다.
  • 세마포어에 대한 두 가지 주요 연산:
    • P와 V (기타 용어: up과 down, wait과 post)
    • P는 뮤텍스 잠금에 해당하고, V는 뮤텍스 잠금 해제에 해당합니다.
  • 여기서는 P와 V를 사용합니다.

세마포어 연산

  • P(s): 첫 번째 논리적 제어 흐름이 시도하면 즉시 성공합니다.
    • 추가적인 흐름은 P(s)에서 블록됩니다. 왜냐하면 s가 0이기 때문입니다.
  • V(s): s가 1이 되어 블록된 하나의 흐름을 해제합니다.

뮤텍스로서의 세마포어

  • 값이 1로 초기화된 세마포어는 뮤텍스처럼 동작합니다.

조건 변수 (Condition Variables)

조건 변수란?

  • 조건 변수는 특정 조건이 충족될 때까지 논리적 제어 흐름이 블록될 수 있게 합니다.
  • 뮤텍스와 함께 사용되어 효율적인 블로킹을 제공합니다.

조건 변수를 사용한 블로킹

  • 뮤텍스를 잠근 상태에서 조건 변수를 기다립니다:
    1. 루프에서 조건 변수를 기다립니다.
    2. 깨어났을 때 조건을 검사합니다.
    3. 조건이 충족되면 루프를 종료합니다.
  • 조건을 충족할 수 있는 다른 흐름은:
    • 모든 대기 흐름에 브로드캐스트합니다.
    • 하나의 대기 흐름에 신호를 보냅니다.

뮤텍스 상호작용

  • 대기 흐름은 조건을 기다리기 위해 뮤텍스를 소유해야 합니다.
  • 뮤텍스는 조건 검사에 사용된 데이터를 보호해야 합니다.
  • 대기 중 뮤텍스가 잠금 해제되고, 깨어나면 다시 잠깁니다.
  • 이는 대기 중 보호된 데이터가 변경될 수 있음을 의미합니다.

깨어나서 확인하기 (Wake and Check)

  • 깨어나서 확인하는 절차는:
    • 조건이 충족되었는지 확실하지 않은 경우에도 안전하게 신호를 보낼 수 있게 합니다.
    • 새로운 흐름이 조건을 거짓으로 만들기 전에 조건을 신호할 수 있게 합니다.
    • 기타 이유 (예: 비동기 알림)로 인해 흐름이 깨어날 수 있게 합니다.

교착 상태 (Deadlock)

교착 상태란?

  • 교착 상태는 두 개 이상의 동시 실행 흐름이 서로를 기다리며 진행할 수 없는 상태입니다.
  • 예시: 흐름 A가 m0을 잠근 후 m1을 잠그기 전에 흐름 B에 의해 중단되면 교착 상태가 발생합니다.

교착 상태 발생 조건

  • 교착 상태가 발생하려면 다음 조건이 모두 충족되어야 합니다:
    • 하나 이상의 자원이 상호 배타적입니다.
    • 흐름이 다른 잠금이 가능해질 때까지 잠금을 유지합니다.
    • 잠금을 선점할 수 없습니다: 흐름이 잠금을 소유하면 자발적으로 해제할 때까지 유지합니다.
    • 순환적 잠금 체인이 존재하여 각 흐름이 다음 흐름에 필요한 잠금을 소유합니다.

교착 상태 회피

  • 교착 상태는 동기화에 의해 발생합니다.
  • 여러 가지 교착 상태 회피 기술이 있습니다.
  • 여러 잠금에 대한 상호 배타성에 의해 발생한 교착 상태에 대한 간단한 해결책:
    • 시스템의 모든 뮤텍스는 순서가 정해져 있습니다.
    • 모든 흐름은 뮤텍스를 순서대로 잠급니다.
    • 모든 흐름은 뮤텍스를 역순으로 잠금 해제합니다.

진행 그래프에서의 교착 상태

  • 진행 그래프에서 교착 상태는 오목한 영역으로 나타납니다.

요약

  • 레이스는 프로그램의 올바름이 동시 실행 흐름의 작업 순서에 의존하는 상황입니다.
  • 데이터 레이스는 데이터 수정과 관련된 레이스입니다.
  • 동기화는 프로그램 내 이벤트의 의도적인 순서화입니다.
  • 임계 구역은 한 번에 하나의 동시 실행 흐름만 접근할 수 있는 코드 영역입니다.
  • 진행 그래프는 동시 실행 흐름을 시각화합니다.
  • 동기화 원시 기능:
    • 원자적 연산
    • 뮤텍스
    • 세마포어
    • 조건 변수
  • 교착 상태는 동기화로 인해 발생하는 프로그램 오류입니다.

0개의 댓글