뮤텍스, 세마포어, 데드락

기린이·2023년 8월 2일
0

CS 지식

목록 보기
13/15

Race Condition

두 개 이상의 프로세스가 공통 자원을 병행적으로(concurrently) 읽거나 쓰는 동작을 할 때, 공용 데이터에 대한 접근이 어떤 순서에 따라 이루어졌는지에 따라 그 실행 결과가 같지 않고 달라지는 상황

상호배제

앞선 race condition 문제를 해결하기 위해선 여러 프로세스나 쓰레드가 동시에 공유 자원에 접근하는 것을 제어하는 상호배제 기법이 필요하다.

뮤텍스

스레드 및 프로세스에 의해 소유될 수 있는 key를 기반으로 상호 배제하는 방법
동기화 대상 1개이다.
뮤텍스 소유 스레드만이 해제가능하다.

세마포어

공유자원에 접근할 수 있는 스레드및 프로세스 개수에 제한을 두어 상호배제하는 방법
동기화 대상 1개 이상이다.
세마포어 소유하지 않은 다른 스레드가 해제 가능하다.

데드락

그러나 상호배제 기법을 쓰더라도 데드락이라는 문제가 발생할 수 있다.

데드락: 여러 프로세스가 서로 공유 자원을 내놓기를 바라면서 무한정 기다리는 상태

예를 들면, A 프로세스가 lock을 건 상태로 죽어버리면 (unlock을 하지 못하고), B프로세스는 A프로세스가 unlock을 하지 않았기 때문에 공유 자원을 쓰지 못하고 무한정 기다리게 된다.

이외에도 동일 쓰레드에서 Lock 두번 연속 호출 시 데드락이 걸린다.

그렇기에 데드락을 해결하는 방법이 존재한다.

데드락 성립 조건

"상점비순"

• 상호배제 : 프로세스들이 필요로 하는 자원에 대해 배타적 통제권을 요구함
• 점유대기 : 프로세스가 할당된 자원을 가진 상태에서 다른 자원 기다림
• 비선점 : 프로세스가 어떤 자원의 사용을 끝날 때까지 그 자원을 뺏을 수 없음
• 순환대기 : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 갖고 있음

데드락 해결 방법

예방, 회피, 탐지 및 회복,무시

  • 예방 : 교착 상태가 발생하기 전에 미리 조치를 취하는 방식으로, 교착 상태 발생 조건 중 하나를 제거함으로써 해결한다.
    단점으로는 자원 낭비가 심함
  • 회피 : 프로세스가 자원을 요구할 때, 데드락에 빠질 가능성을 계산해안전한 경우에만 할당하는 경우.
    단점으로는 오버헤드가 많이 발생한다.
  • 탐지 및 회복 : 데드락이 발생하면 빠르게 발견하고 교착 상태를 일으킨 프로세스를 종료하거나 할당된 자원을 해제하면서 회복
  • 무시 : 데드락을 주기적으로 탐지하거나 예방하는데에 자원을 사용하는 것보다 이를 무시할 때 더 큰 이득이 있을 수 있어 사용

사실 뮤텍스, 세마포어 기법을 사용하면 데드락 문제까지 해결되는 것이 아닌가..? 혼동되었는데 뮤텍스와 같은 상호배제 기법은 race condition을 해결하기 위한 방법이고, 이 방법도 완벽한 것이 아니라 데드락의 문제가 생길 수 있는 것이고, 그렇기에 데드락의 성립조건에 상호배제가 있었던 것이었다.

https://iredays.tistory.com/125

profile
중요한 것은 속력이 아니라 방향성, 공부하며 메모를 남기는 공간입니다.

0개의 댓글