Synchronization(동기화)
동시다발적으로 실행되는 프로세스들은 서로 협력하며 영향을 주고 받는데, 협력하여 실행하는 프로세스들의 실행 순서와 자원 일관성을 보장하기 위해 동기화가 필요하다. 동기화는 프로세스들 사이의 수행 시기를 맞추는 것을 의미하는데, 정확히는 아래 두 가지를 의미한다.
실행 순서 제어: 프로세스를 올바른 순서대로 실행
상호 배제: 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하도록 제한
여기서 프로세스뿐만 아니라 스레드도 동기화 대상이 될 수 있다.(실행의 흐름을 갖는 모든 것은 동기화의 대상)
공유 자원과 임계 구역
여러 프로세스가 공유하는 자원을 공유 자원이라고 하며, 동시에 실행하면 문제가 발생할 수 있는 코드 영역을 임계 구역이라고 한다. 임계 구역을 동시 다발적으로 실행하면 문제가 발생하는데, 이를 레이스 컨디션이라고 한다.
레이스 컨디션이 발생하면 데이터 일관성 문제가 발생하기 때문에, 이런 문제를 해결하기 위해 세 가지 원칙하에 임계 구역을 문제를 해결하고 있다.
상호 배제(mutual exclusion): 한 프로세스가 임계 구역에서 실행되면 다른 프로세스는 임계 구역에서 실행될 수 없다.
진행(progress): 임계 구역에 어떤 프로세스도 진입하지 않았다면, 임계 구역이 진입하고자 하는 프로세스는 진입할 수 있어야 한다.
유한 대기(bounded waiting): 한 프로세스가 임계 구역에 진입하고 싶다면, 그 프로세스는 언젠가는 진입할 수 있어야 한다.
동기화 기법
운영체제는 프로세스 동기화를 위해서 뮤텍스 락 / 세마포 등의 동기화 기법을 제공한다.
뮤텍스 락
설명
뮤텍스(Mutex)는 Mutual Exclusion의 약자로, 자원에 대한 상호 배제를 보장하는 동기화 기법
뮤텍스 락은 하나의 스레드 또는 프로세스가 공유 자원에 접근하는 동안 다른 스레드나 프로세스가 그 자원에 접근하지 못하도록 차단
오직 하나의 스레드만 자원을 사용하도록 보장하여 데이터의 일관성과 무결성을 유지
동작 방법
잠금(Lock): 스레드가 자원에 접근하려고 하면, 뮤텍스 락 획득(잠긴 경우 대기)
자원 사용: 뮤텍스를 성공적으로 잠근 스레드는 자원에 접근하여 작업을 수행
잠금 해제(Unlock): 자원의 사용이 끝나면, 뮤텍스 락을 해제하고, 대기 중인 다른 스레드 중 하나가 자원에 접근할 수 있도록 함
세마포(Semaphore)
설명
세마포는 자원의 접근을 계수로 제어하는 동기화 기법
세마포는 일반적으로 정수 값을 가지고 있으며, 이 값을 통해 여러 스레드나 프로세스가 제한된 수의 자원에 접근할 수 있도록 관리
세마포는 뮤텍스와 달리 다수의 자원에 대한 접근을 관리할 수 있으며, 카운팅 세마포와 바이너리 세마포로 구분
동작 방법
P(Wait): 스레드가 자원에 접근하려고 할 때, 세마포 값을 확인하여 0보다 크면 값을 1 감소시키고 자원에 접근(0인 경우 대기)
V(Signal): 스레드가 자원의 사용을 마치면 세마포 값을 1 증가 시킴
뮤텍스와 세마포의 차이점
자원 관리
단일 자원 관리
다수의 자원 관리 가능
값의 범위
0과 1 (바이너리)
0 이상 (카운팅 세마포)
사용 목적
상호 배제가 필요한 경우
다수의 자원에 대한 접근 제어
소유권
락을 획득한 스레드만 락 해제 가능
락 해제는 특정 소유권 없음
동작 방식
하나의 스레드만 자원에 접근 허용
다수의 스레드가 제한된 자원 수만큼 접근 가능
유형
바이너리 락
바이너리 및 카운팅 세마포
대기 상태
자원이 잠겨 있을 때 스레드 대기
자원이 부족할 때 스레드 대기
참고자료
Last updated
Was this helpful?