프로세스 동기화

임지원·2024년 6월 20일

프로세스 동기화(Synchronization)

프로세스의 실행 순서를 제어하고 동시에 접근할 수 없는 자원에 하나의 프로세스만 접근하게 하여 데이터의 일관성을 유지하는 과정

Race Condition(경쟁 상태)

여러 프로세스들이 동시에 데이터에 접근하는 상황에서 어떤 순서로 데이터에 접근하냐에 따라 결과 값이 달라질 수 있는 상황

공유 데이터의 동시 접근은 데이터의 불일치를 발생시킬 수 있다.
따라서 일관성을 유지하기 위해서는 협력 프로세스 간의 실행 순서를 정해주는 동기화가 필요하다.

Critical Section(임계 영역)

동일한 자원에 동시에 접근하는 경우가 발생하는 코드의 영역

접근 순서에 따라 실행 결과가 달라지는 구역으로 멀티 프로세스 환경에서 둘 이상의 프로세스가 동시에 접근하면 안되는 영역이다.
하나의 쓰레드가 임계 영역에 접근하기 위해서 요청->(대기)->임계영역 처리->완료의 순서로 이루어진다.

임계영역 문제를 해결하기 위한 3가지 조건
1. Mutual Exclusion (상호배타) : 하나의 프로세스가 임계 영역에 있으면 다른 프로세스는 못들어감
2. Progress (진행) : 임계영역에 없으면 어떤 프로세스가 들어갈 것인지 선택
3. Bounded Waiting (유한 대기) : 한번 들어간 프로세스는 제한을 준다.

Mutex vs Semaphore

Mutex

  • mutual exclusion에서 나온 용어로 '상호배제'의 의미를 가진다.
    공유 불가능한 자원의 동시 사용을 막기 위해 Lock를 가진 쓰레드만 임계 영역에 접근할 수 있고 작업이 끝난 쓰레드는 Unlock하여 Lock을 반환한다.

  • 정의: 뮤텍스는 Mutual Exclusion의 줄임말로, 상호 배제를 보장하는 동기화 객체이다. 한 번에 하나의 스레드만 자원을 사용할 수 있게 한다.

  • 소유권: 뮤텍스는 소유권 개념이 있다. 한 스레드가 뮤텍스를 획득하면, 그 스레드만이 뮤텍스를 해제할 수 있다. 다른 스레드는 뮤텍스가 해제될 때까지 대기해야 한다.

  • 사용 목적: 주로 단일 자원의 동기화에 사용된다. 예를 들어, 임계 구역(critical section)을 보호하기 위해 사용된다.

  • 생성 및 해제: 뮤텍스를 생성한 스레드와 해제하는 스레드가 동일해야 한다. 이는 뮤텍스의 소유권 개념 때문이다.

Semaphore

  • 두 개의 원자적 함수로 조작되는 정적 번수로 멀티 프로그래밍에서 공유자원 접근을 제한하는 방법으로 사용
    S는 정수값을 가지는 변수이고 자원을 할당하는 P연산과 해제하는 V연산이 있다.
    P는 들어가기 전에 수행, V는 나올때 수행된다.

    S는 화장실의 열쇠이고 S는 사람이 들어갈 때 열쇠의 수가 줄어드는 것, V는 나올때 열쇠가 늘어나는 것과 같다.
    열쇠가 3개 있다면 화장실에 접근 할 수 있는 프로세스는 3명인 것이다.

  • 정의: 세마포어는 여러 스레드가 동시에 접근할 수 있는 자원의 개수를 제어하는 동기화 객체다. 카운팅 세마포어와 바이너리 세마포어가 있다.

  • 카운팅 세마포어: 여러 개의 스레드가 자원에 접근할 수 있게 허용한다. 세마포어의 카운트는 동시에 접근 가능한 스레드의 수를 나타낸다.

  • 바이너리 세마포어: 뮤텍스와 유사하게 동작하며, 카운트가 0 또는 1인 세마포어다. 뮤텍스와의 차이점은 소유권이 없다.

  • 소유권: 세마포어는 소유권 개념이 없다. 한 스레드가 세마포어를 획득하고, 다른 스레드가 해제할 수 있다.

  • 사용 목적: 여러 자원을 관리할 때 사용된다. 예를 들어, 일정 수의 스레드만이 접근할 수 있는 풀(pool)을 관리하는 데 유용

차이

  • 뮤텍스는 상호 배제를 보장하며, 한 번에 하나의 스레드만 자원을 사용할 수 있게 한다. 소유권 개념이 있어 뮤텍스를 획득한 스레드만 해제할 수 있다.
  • 세마포어는 여러 스레드가 동시에 접근할 수 있는 자원의 수를 제어한다. 소유권 개념이 없으며, 카운팅 세마포어와 바이너리 세마포어로 나뉜다.
profile
백엔드 새싹

0개의 댓글