반응형
들어가기 전에
- 교착 상태(데드락) → 뮤텍스(상호배제)
- 데이터 레이스
2가지를 공부하고 들어가자.
1. 교착 상태(데드락)
→ 두 개 이상의 프로세스나 스레드가 서로 자원을 얻지 못해서 다음 처리를 하지 못하는 상태. 무한히 다음 자원을 기다리게 되는 상태를 말한다.
쉽게 말해서 프로세스가 자기가 원하는 자원이 있는데 다른 사람이 계속 가지고 있어 무한히 wait 상태에 빠지는 것을 말한다.
데드락의 발생 조건
- 상호 배제 ( mutual exclusion ) : 자원에 대한 배타적 통제권
- 점유 대기( hold and wait ) : 할당된 자원을 점유한 상태로 다른 자원을 대기
- 비선점 ( no preemtion ) : 자원이 점유 해제되기 전에 선점할 수 없음
- 순환 대기 ( circular wait ) : 객체가 필요한 다음 자원을 다음 객체가 점유
데드락(DeadLock) 처리
교착 상태를 예방 & 회피
- 예방(prevention)
- 교착 상태 발생 조건 중 하나를 제거하면서 해결한다 (자원 낭비 엄청 심함)
- 회피(avoidance)
- 교착 상태 발생 시 피해나가는 방법
데드락이 발생하지 않도록 우리는 뮤텍스라는 것을 사용할 것임.
교착 상태를 탐지 & 회복
교착 상태가 되도록 허용한 다음 회복시키는 방법
- 탐지(Detection)자원 요청 시, 탐지 알고리즘을 실행시켜 그에 대한 오버헤드 발생함
- 자원 할당 그래프를 통해 교착 상태를 탐지함
- 회복(Recovery)
- 교착 상태 일으킨 프로세스를 종료하거나, 할당된 자원을 해제시켜 회복시키는 방법
뮤텍스
뮤텍스(Mutex)는 데드락을 방지하거나 해결하는 데 사용되는 동기화 기법 중 하나이다. 뮤텍스는 상호 배제(Mutual Exclusion) 조건을 충족시키기 위해 사용되며, 여러 프로세스나 스레드가 동시에 공유 자원에 접근하는 것을 제어합니다.
상호배제(Mutex : Mutual eXclusion)
- 임계 구역
- 다중 프로그래밍 기법에서 둘 이상의 프로세스가 운영될 때 서로 공유하게 되는 자원을 말함.
- 상호 배제의 개념
- 하나의 프로세스만 임계구역을 사용할 수 있도록 다른 프로세스의 접근을 차단하는 것.
뮤텍스는 다음과 같은 방식으로 동작한다:
- 오직 하나의 프로세스나 스레드만 뮤텍스를 획득있음. 다른 프로세스나 스레드는 뮤텍스를 획득하기 위해 대기해야함.
- 뮤텍스를 사용하려는 프로세스나 스레드가 뮤텍스를 획득하면, 다른 프로세스나 스레드는 해당 자원에 접근할 수 없으며 대기 상태에 들어간다.
- 뮤텍스를 사용한 프로세스나 스레드가 작업을 마치면 뮤텍스를 반납하여 다른 프로세스나 스레드가 이를 획득함.
데이터 레이스
데이터 레이스란? (확인하는 법, 해결법)
데이터 레이스란 멀티 쓰레드/프로세스 환경에서 일어나는 오류다. 여러 쓰레드/프로세스가 공유자원에 동시에 접근하려 할 때, 일어나는 경쟁 상황을 일컫는다.
가령 한 쓰레드와 또 다른 쓰레드가 동시에 한 변수를 쓰려고 할 때, 한 쓰레드는 한 변수를 쓰고 있는데 다른 쓰레드는 그 변수를 읽으려고 할 때 등의 상황에서 데이터 레이스가 발생한다.
이를 해결해주기 위해 뮤텍스를 잘해야한다.
뮤텍스(Mutex)와 세마포어(Semaphore)의 차이
데드락 (DeadLock, 교착 상태) | 👨🏻💻 Tech Interview
반응형
'42Seoul > philsopheres' 카테고리의 다른 글
Philosophers 코드 (0) | 2023.09.11 |
---|---|
philosophers c언어 함수 (0) | 2023.09.11 |
philsopheres 문제 정리 (0) | 2023.09.11 |