동일한 자원을 동시에 접근하는 작업을 실행하는 코드 영역을 Ciritical Section
이라고 한다.
프로세스들이 Critical Section
을 동시에 접근하였을 때 발생하는 동기화 문제
하드웨어 기반 해결책으로써, 동시에 공유 자원에 접근하는 것을 막기 위해 critical section에 진입하는 프로세스는 lock을 획득하고 critical section에 진입하는 프로세스는 lock을 획득하고 critical section을 빠져나올 때, lock을 방출함으로써 동시에 접근이 되지 않도록 한다.
critical section으로의 진입 가능성 확인과 동시에 진입 거부를 원자적으로 한번에 처리한다.
소프트웨어상에서 Critical Section 문제를 해경하기 위한 동기화 도구
MUTEX
라고도 부르며, 상호배제(Mutual Exclution)
의 머릿글자를 따서 만들어졌다. 이름 그대로 0과 1의 값만 사용 가능하며, 다중 프로세스들 사이의 Critical Section 문제를 해결하기 위해 사용된다.Spin Lock
이라고 불리는 Semaphore 초기 버전에서 Critical Section에 진입해야하는 프로세스는 진입을 계속 시도하기 때문에, CPU 시간을 낭비했었다. 이를 Busy Waiting이라고 부르며 특수한 상황이 아니면 비효율적이다. 일반적으로는 Semaphore에서 Critical Section에 진입을 시도했지만 실패한 프로세스에 대해 Block시킨 뒤, Critical Section에 자리가 날 때 다시 깨우는 방식을 사용한다. 이 경우 Busy Waiting으로 인한 시간 낭비 문제가 해결된다.프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태이다. 둘 이상의 프로세스가 각자 공유 자원을 할당받은 후 다음 처리를 위해 다른 공유자원을 할당받아야할 때, 각자 필요한 자원이 상대방에게 할당되어있는 경우 프로세스들이 다음 처리를 위한 공유 자원을 획득하기 위해 서로 무한정 대기하는 상태이다.