728x90
728x90
Deadlock(교착 상태)
- 두 가지 이상의 작업이 서로 상대방의 작업이 끝나기를 하염없이 기다리고 있는 상태
- 다음 페이지에서 깊게 설명
Race Condition(경쟁 상태)
- 공유 자원에 대해 두 개 이상의 스레드가 동시에 읽거나 쓰는 상황을 의미한다.
- 접근의 순서에 따라 결과값에 영향을 주는 문제가 발생할 수 있다.
Critical Section(임계 영역)
- 공유 자원의 독점을 보장하는 코드 영역이다.
- Race Condition 이 발생해 문제가 일어날 수 있는 영역이다.
- 문제 방지를 위해 뮤텍스와 세마포어를 사용한다.
뮤텍스(MUTual EXclusion, 상호 배제)
여러 스레드를 사용하는 환경에서 공유 자원에 대한 접근을 제한하는 동기화 메커니즘이다
- Boolean 타입의 Lock 변수를 사용한다.
- Lock을 걸었던 프로세스만 Lock을 해제할 수 있다.
작동 방식
- Lock이 걸려 있는 공유 자원은 접근하지 못하고 대기하게 된다.
- 스레드는 Critical Section 에 진입할 때 Lock을 걸고 다른 스레드가 접근하지 못하도록 제한한다.
- 작업이 끝나고 Critical Section 에서 나올 때 스레드가 Lock을 해제하여 다음 스레드가 실행할 수 있게 한다.
예시) 정원이 1명인 식당에서 식사를 하는 경우
- 1명이 들어가면 새로 온 손님은 대기해야 한다.
- 들어갔던 손님이 식사를 마치고 나오면 다음 손님이 들어갈 수 있다.
세마포어(Semaphore)
Multi-programming 환경에서 다수의 프로세스나 스레드의 여러 개의 공유 자원에 대한 접근을 제한하는 방법으로 사용되는 동기화 기법이다.
- 뮤텍스와 달리, 하나 이상의 스레드가 동시에 접근할 수있다.
- 공유 자원의 수가 1개일 때는 이진 세마포어를 사용한다.
- 뮤텍스와 거의 같다.
- Lock을 걸었던 스레드가 아닌 다른 스레드가 Critical Section을 빠져나오며 Lock을 해제할 수 있다.
작동 방식
- S(세마포어 변수), n (공유자원에 접근가능한 프로세스 수)를 사용한다.
- S = n 에서 시작(위 그림은 n = 1의 경우다.)
- 스레드가 공유 자원에 접근하면 S = S -1 (semWait() 연산)
- 만약 S < 0 이 되면 semWait() 를 호출한 프로세스는 Block된다.
- 스레드가 공유 자원 사용을 끝내면 S = S + 1 (semSignal() 연산)
- 만약 S < 0 이 되면 semWait() 연산에 의해 Block된 프로세스를 해제한다.
예시) 정원이 n명인 식당에서 식사를 하는 경우
- n명까지 들어갈 수 있다.
- n명이 다 차면 새로 온 손님은 대기해야 한다.
- m명이 식사를 마치고 나가면 다음 m명이 들어갈 수 있다.
참고
728x90
728x90
'Computer Science > Operating System' 카테고리의 다른 글
Compile(컴파일) (0) | 2023.03.08 |
---|---|
Deadlock(데드락) (0) | 2023.03.08 |
Process Scheduling Algorithm(프로세스 스케줄링 알고리즘) (0) | 2023.03.07 |
Context Switching(컨텍스트 스위칭) (0) | 2023.03.07 |
단기 스케줄러, 중기 스케줄러, 단기 스케줄러 (0) | 2023.03.07 |