본문 바로가기

개발에 도움이 되는/CS

경쟁상태(Race Condition), 교착상태(DeadLock), 기아상태(Starvation)의 정의

- 요약

 

경쟁상태(Race Condition) : 공유 자원에 대해 여러 개의 프로세스가 동시에 접근을 시도할 때 접근의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태

 

 

교착상태(DeadLock) : 두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있기 때문에 아무것도 완료되지 못하는 상태

 

- 교착 상태의 조건 : 아래 4가지 조건을 모두 충족시켜야 함

  1. 상호배재 : 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구한다.

  2. 점유대기 : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다.

  3. 비선점 : 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없다.

  4. 순환대기 : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다. 

 

- 해결 방안

  1. 예방 : 교착 상태 발생 조건 중 하나를 제거하면서 해결(자원 낭비 심함)

  2. 회피 : 교착 상태 발생 시 피해나가는 방법 (ex. 은행원 알고리즘)

  3. 탐지 : 자원 할당 그래프를 통해 교착 상태를 탐지(그에 대한 오버헤드 발생함)

  4. 회복 : 교착 상태를 일으킨 프로세스를 종료하거나, 할당된 자원을 해제시켜 회복시키는 방법

 

 

 

 

기아상태(Starvation) : 특정 프로세스의 우선 순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태

 

- 해결 방안

  스케줄링으로 해결 (우선 순위를 변경해준다.)

   ex ) 라운드 로빈 스케줄링 : 프로세스들 사이에 우선순위를 두지 않고, 순서대로 시간단위로 CPU 할당

 

 

반응형