Critical Section
정의
Critical Section이란?
공유 자원에 접근하는 코드 영역
Critical Section 문제
- 하나의 프로세스 안에는 1개 이상의 쓰레드들이 존재
- 각 쓰레드들은 각자의 Stack과 Register만 독립적으로 가지고 있음
- 이외의 나머지 자원들은 공유함으로써 문제가 발생
Thread 동기화 방법
User Mode Synchronization
- 동기화 과정에서 Kernel의 자원을 이용하지 않음 -> 성능상의 이점
Critical Section
- 코드 영역 자체를 보호할 때 사용
- 한 프로세스 내의 Thread들 간의 동기화 가능
Interlock Synchronization
- 전역변수 하나의 접근에 동기화
Kernel Mode Synchronization
- 동기화 과정에서 Kernel의 자원을 이용 -> Kernel Mode 로 전환되며 성능저하 발생
- User Mode에서 제공하지 못하는 기능들 제공
Mutex
- Mutual exclusion(상호배제)의 약자
- Kernel 오브젝트인 Mutex를 이용한 동기화 기법
- Lock을 실행한 Thread가 Critical Section에서 나갈 때만 Mutex 해제
- 여러 프로세스의 Thread 사이에서 동기화 가능
- 한개의 Critical Section만 동기화 가능(Mutex는 한개의 Critical Setion을 소유한다 or 책임진다)
- 일정 시간을 주기로 계속 Acquire를 반복 호출하여 Critical Section에 접근 가능한지 여부를 확인(“Busy Waiting”, “spinlock”)
- CPU 사이클을 계속해서 낭비하는 단점
Semaphore
- 받아들일 수 있는 Thread 또는 Process의 수를 semaphore는라고 부름
- 지정된 수 만큼의 Thread가 동시에 실행되도록 동기화
- 다중프로세스 동기화 기법
- Lock을 실행하지 않은 다른 Thread에서도 Signal을 보내 Lock을 해제할 수 있음
- wait와 signal이라는 개의 atomic operation 사용
- Binary Semaphore(count = 1), Counting Semaphore(count > 1)가 존재
- 하나의 Critical Section 에 2개 이상의 Thread 또는 Process 진입 가능
- Thread 또는 Process가 Lock을 획득하면 semaphore는 감소
- Thread 또는 Process가 Lock을 반환하면 semaphore는 증가
댓글남기기