1. 임계영역(Critical Section)
  • 다수의 프로세스가 접근 가능한 영역이면서 한 순간에 하나의 프로세스만 사용할 수 있는 영역
  • 어떤 프로세스가 임계영역에 들어가면 다른 프로세스는 임계영역으로의 진입이 금지되어야 한다
  • 프로세스/스레드 동기화를 함으로써 임계구역 문제를 해결하고 프로세스 실행 순서를 제어할 수 있다

  • 임계영역 문제 해결책

  • 상호배제(Mutual Exclusion): 한 프로세스가 임계영역에서 작업시 다른 프로세스는 접근 불가능
  • 진행(Progress): 임계영역에서 작업하는 프로세스가 없을 때 여러 프로세스가 임계영역에 진입하고자 한다면 알고리즘에 따라 프로세스 선정, 프로세스 선택을 무한정 미룰 수 없다
  • 제한된 대기(Bounded Waiting): 한 프로세스가 임계영역 진입을 요청한 후 수락되기 전까지 다른 프로세스가 진입할 수 있는 횟수를 제한
  • 동기화 도구: 세마포어, 모니터
  1. 세마포어(Semaphore)
  • 다익스트라가 제안
  • 구조: 정수형 변수 + 두 개의 동작(P, V)
  • 세마포어란 음이 아닌 정수값을 가지는 플래그 변수
  • 임계영역에 들어가기전에 P: acquire() 하고
  • 임계영역으로부터 나올 때 V: release() 한다
  • P와 V를 다음과 같이 정의한다
    1
    2
    3
    - P(S): while S <= 0 do no-op; // 세마포어 변수 S가 0이면 임계구역 진입 불가
    S = S - 1; // 세마포어 변수 S가 1이면 진입하여 0으로 만든 후 다른 프로세스 진입 못 하게 블락
    - V(S): S = S + 1; // 작업을 완료하고 나올 때 1을 더해줘 다른 프로세스가 진입 가능하게 만듬
  1. 모니터(Monitor)
  • 세마포어보다 고수준의 개념
  • 구조: 공유자원 + 공유자원 접근 함수
  • 2개의 queues: 배타동기 + 조건동기
  1. 교착상태(Deadlock)
  • 교착상태의 필요조건: 상호배타(Mutual Exclusion), 보유 및 대기(Hold and Wait), 비선점(No Preemption), 환형대기(Circular Wait)
  • 교착상태의 처리: 방지, 회피, 검출 및 복구, 무시
  • 실제 상황에서 교착상태는 잘 일어나지 않는다

Comment and share

Author's picture

Jin Seon

Aspiring developer who’s dreaming about freedom


Developer


Seoul