동기화

yshjft·2022년 2월 3일
0

운영체제

목록 보기
6/8

✔︎ Critical Section(임계 구역)

공유 자원을 접근하는 코드 영역

✔︎ 임계 구역 문제

임계 영역은 동기화를 통해 공유 자원의 일관성을 보장해야하는데 이를 하지 못하는 경우 발생하는 문제를 의미한다.

경쟁 상태

여러개의 프로세스/쓰레드가 동시에 접근할 때 가장 나중에 실행되는 프로세스/스레드에 의해 최종값이 결정되어 data inconsistency가 발생하는 상태를 의미한다.

✔︎임계 구역 문제 해결

문제 해결을 위한 기본 조건

  • 상호 배제(Mutual Exclusion)
    오로지 하나의 프로세스만이 임계 구역에서 실행되어야 한다.

  • 진행(Process)
    임계 구역에서 실행되고 있는 프로세스가 없고 별도의 동작이 없는 프로세스들만 임계영역에 들어갈 수 있는 대상이 된다.

  • 한정 대기(Bounded Waiting)
    다른 프로세스의 기아를 방지하기 위해, 임계 구역에 한 번 접근했던 프로세스는 다음에 접근할 때 제한을 주어야 한다.

문제 해결 방법

  • 뮤텍스(Mutex, 상호배제, 이진 세마포어)

    • 두 프로세스(스레드)가 공유 자원에 동시에 접근하는 것을 막는 것

    • 임계 구역을 가진 두 프로세스(스레드)의 running time이 서로 겹치지 안도록 각각 단독으로 실행하게하는 기술

    • 리소스에 대한 접근을 조율하기 위해서 lock을 사용

    • 프로세스(스레드)가 임계영역에 들어갈 때 lock을 하고 나올 때 unlock을 한다. 임계 영역에 lock이 걸리면 다른 프로세스(스레드)는 들어올 수 없다.

    • 데커 알고리즘 & 피터슨 알고리즘
      flag와 turn 변수를 통해 임계 구역에 들어갈 프로세스(스레드)를 결정하는 방식

      ❑ flag: 프로세스 중 누가 임계영역에 진입할 것인지 나타내는 변수
      ❑ turn: 누가 임계 구역에 들어갈 차례인지 나타내는 변수
      ❑ 피터슨 알고리즘은 상대방 프로세스(스레드)에 임계영역 진입 기회를 양보한다.

    • 제과점(Bakery) 알고리즘
      여러 프로세스(스레드)에 대한 처리가 가능한 알고리즘. 번호표를 배부하여 가장 작은 수의 번호표를 가지고 있는 프로세스(스레드)가 임계 구역에 진입한다

  • 세마포어
    • 여러 프로세스(스레드)가 공유 자원에 접근하는 것을 막는다. 이를 위해 현재 공유 자원의 상태를 나타내는 카운터 변수를 사용한다.
    • P 연산(wait(S)) & V 연산(signal(S))
      ❑ P 연산: 임계 구역에 들어가기 전에 수행(임계 구역 진입 여부를 공유자원 S를 통해 결정한다)
      ❑ V 연산: 임계 구역에서 나올 때 수행(다른 프로세스(스레드)가 접근할 수 있도록 한다.)
    • 교착 상태에 빠질 수 있다는 단점이 있다.
wait(S) {
	while(S <= 0); // 대기
	S—;
}

signal(S) {
	S++;
}
  • 모니터
    • 프로그래밍 언어 수준에서 동시성을 제어하는 상호 배제 기법
    • 하나의 프로세스내에 다른 쓰레드들 간에 동기화를 위해 사용한다.
    • 공유자원에 접근하기 위한 키 획득과 자원 사용 후 해제를 모두 처리한다. (??)
  • 뮤텍스와 세마포어 차이
    • 뮤텍스는 오로지 1개의 프로세스(스레드)만이 공유 자원에 접근할 수 있고 세마포어는 지정된 변수(S)의 값만큼 접근할 수 있다.
    • 세마포어는 뮤텍스가 될 수 있지만(이진 세마포어 == 뮤텍스) 뮤텍스는 세마포어가 될 수 없다.
    • 현재 수행중인 프로세스(스레드)가 아닌 다른 프로세스(스레드)가 세마포어를 해제할 수 있다. 하지만 뮤텍스는 락(lock)을 획득한 프로세스가 반드시 그 락을 해제해야 한다.
    • 세마포어는 자원의 상태를 나타내는 일종의 변수로 소유 개념이 아니지만 뮤텍스는 자원을 잠시 소유하였다가 반환하는 개념이다.

✔︎ 참고

profile
꾸준히 나아가자 🐢

0개의 댓글