- 동기화, 경쟁 조건, 임계영역
- 예시 : 하나의 객체를 두 개의 스레드가 접근할 때 생기는 일
경쟁 조건이 일어날 수 있는 상황을 없애기 위해 동기화를 해야하는데, 동기화를 하기 위해 임계 영역을 지정하고자 한다.
-
- 동기화 (Synchronization)
- 여러 프로세스/스레드를 동시에 실행해도 공유 데이터의 일관성을 유지 하는 것
- 경쟁 조건 (Race condition)
- 여러 프로세스/스레드가 동시에 같은 데이터를 조작할 때, 타이밍이나 접근 순서에 따라 결과가 달라질 수 있는 상황
- 임계 영역 (Critical section)
- 공유 데이터의 일관성을 보장하기 위해 하나의 프로세스/스레드만 진입해서 실행 가능한 영역
- Critical section problem의 해결책이 되기 위한 조건
- Mutual exclusion (상호 배제)
- 하나가 동작할 때는 다른거는 실행 못시킴
- Progress (진행)
- 임계영역이 비어있거나 요청이 오면 임계 영역에서 실행 될 수 있음
- Bounded wait (한정된 대기)
- 계속 기다리게 하지 않는다
- 계속 기다리게 하지 않는다
- Mutual exclusion (상호 배제)
- 동기화 (Synchronization)
스핀락, 뮤텍스, 세마포 : 어떻게 mutual exclusion을 보장할 수 있을까에 대한 고민
- Lock : 임계영역을 지켜낼 수 있는 기법
(test_and_set 함수는 atomic 함수 : 실행 중간에 간섭받거나 중단 되지 않음)
volatile int lock = 0;
void critical(){
while (test_and_set(&lock)==1);
//critical section operating
lock=0;
}
- 스핀락(spinlock) : 위의 방법 처럼 lock을 가질 수 있을 때 까지 반복해서 시도
- 기다리는 동안 CPU 낭비 됨
- 뮤텍스(Mutex)스핀락의 CPU 점유율 높은 현상을 해결하기 위해 락이 준비 되면 깨우는 방법
- 현재 돌아가고있는 스레드가 있을 경우, 다음 스레드의 lock 차례에 스레드를 큐에 넣고
- 현재 돌아가는 스레드가 unlock될때 , 큐에 하나라도 있으면 다음 순서의 스레드를 깨운다.
- Priority inheritance 속성을 가진다.
- Priority inheritance : 프로세스/스레드를 동작시키는 우선순위를 가지고 스케줄링 할 때, lock을 가지고있는 프로세스의 우선순위를 높여주어 critical section을 먼저 빠져나오게 하는 속성
- 락을 가질 수 있을때 까지 휴식을 취하는 방법 (큐 & atomic 함수)
💡 뮤텍스가 스핀락 보다 항상 좋은가?
No. 멀티 코어 환경이고, critical section에서의 작업이 컨텍스트 스위칭보다 더 빨리 끝난다면 스핀락이 뮤텍스보다 더 이점이 있음.
3. 세마포(semaphore)
- signal mechanism을 가진, 하나 이상의 프로세스/스레드가 critical section에 접근 가능하도록 하는 장치
- 순서를 정해줄때 사용
💡 뮤텍스와 이진 세마포는 같은것 아닌가?
No. 뮤텍스는 락을 가진 자만 락을 해제할 수 있지만 세마포는 그렇지 않다
💡 상호 배제만 필요하다면 뮤텍스 작업간의 실행 순서 동기화가 필요하다면 세마포
반응형
'이론 공부! > 기술 면접 준비' 카테고리의 다른 글
[네트워크] OSI 4 Layer에 따른 각 계층 정리 (0) | 2022.11.15 |
---|---|
[OS] 면접 질문 대비 (0) | 2022.08.24 |
[OS] Stack & Heap, 프로세스 & 스레드 (0) | 2022.08.24 |
[Data Strucutre] 면접 질문 대비 (0) | 2022.08.24 |
[Data Structure] Hash Table, Graph 정리 (0) | 2022.08.24 |