Critical Section(임계영역)
멀티 스레딩의 문제점에서 나오듯, 동일한 자원을 동시에 접근하는 작업을 실행하는 코드 영역을 Critical Section이라한다.
Semaphores(세마포어)
소프트웨어상에서 Critical Section 문제를 해결하기 위한 동기화 도구
- 카운팅 세마포어 - 가용한 개수를 가진 자원에 대한 접근 제어용으로 사용되며, 세마포어는 그 가용한 자원의 개수로 초기화 된다. 자원을 사용하면 세마포어가 감소, 방출하면 증가된다.
- 이진 세마포어 - MUTEX라고도 불린다. 0과 1의 값만 가능하며 다중 프로세스들 사이에서 Critical Section 문제를 해결하기 위해 사용한다.
Busy Waiting(바쁜 대기)
Busy Waiting은 세마포어의 단점이다. Spin lock이라고 불리는 세마포어 초기 버전에서 Critical Section에 진입해야하는 프로세스는 진입 코드를 계속 반복 실행해야 하며, CPU 시간을 낭비했었다. 이를 Busy Waiting이라고 부르며 특수한 상황이 아니면 비효율적이다. 일반적으로 Semaphore에서 Critical Section에 진입을 시도했지만 실패한 프로세스에 대해 Block 시킨 뒤, Critical Section에 자리가 날 대 다시 깨우는 방식을 사용한다.
Deadlock(교착상태)
세마포어가 Ready Queue를 가지고 있고, 둘 이상의 프로세스가 Critical Section 진입을 무한정 기다리고 있고, Critical Section에서 실행되는 프로세스는 진입 대기중인 프로세스가 실행돼야만 빠져나올 수 있는 상황을 지칭한다.
모니터
- 고급 언어의 설계 구조물로서, 개발자의 코드를 상호배제 하게끔 만든 추상화된 데이터 형태이다.
- 공유자원에 접근하기 위한 키 획득과 자원 사용 후 해제를 모두 처리한다. (세마포어는 직접 키 해제와 공유자원 접근 처리가 필요하다. )
참고