쟈미로그

임계영역, 경쟁상태(Race Condition)와 교착상태(DeadLock) 본문

CS/OS

임계영역, 경쟁상태(Race Condition)와 교착상태(DeadLock)

쟈미 2022. 11. 22. 02:40

1. 임계영역 (Critical Section)

동일한 자원(공유자원)에 접근하는 코드 영역.

즉, 문제가 발생하지 않게 독점을 보장해줘야 하는 영역이다.

방법

뮤텍스, 세마포어 등이 있다.

해결 조건

  • 상호 배제 : 한 프로세스/스레드가 임계 영역 진입 시 다른 이는 들어갈 수 없음. -> 안될 시 Race Condition 발생
  • 한정 대기 : 특정 프로세스/스레드가 임계 영역에 영원히 들어가지 못하면 안됨. -> 안될 시  Starvation 발생
  • 진행 : 포르세스/스레드 간 임계 영역 진행에 대해 서로 방해할 수 없음. -> 안될 시 DeadLock 발생

 

 

2. 경쟁 상태 (Race Condition)

여러 프로세스가 동시에 공유 자원에 접근할 때, 접근 순서에 따라 결과값이 달라지는 상태.

 

즉, 해당 공유 자원은 동시 접근이 되지 않도록 해야한다.

뮤텍스/세마포어 등을 통해 임계 영역의 상호 배제가 지켜지도록 한다.

 

 

3. 교착 상태 (DeadLock)

여러 프로세스가 서로 자원을 얻지 못해서 무한히 자원을 기다리며 대기하는 상태.

한정된 자원을 여러 곳에서 사용하려할 때 발생한다.

발생 조건

  1. 상호 배제 : 자원을 한번에 한 프로세스만 사용할 수 있음.
  2. 점유 대기 : 하나 이상의 자원을 점유한 상태에서, 이미 다른 프로세스에 할당돼있는 자원을 추가로 점유하려고 대기하는 프로세스가 존재함.
  3. 비선점 : 이미 할당된 자원은 사용이 끝날 때까지 강제로 뺏을 수 없음.
  4. 순환 대기 : 프로세스들은 순환 형태로 자원을 대기하고 있음.

해결법

위 조건들 중 하나라도 성립 안해도 데드락을 해결할 수 있다!

상호 배제 조건은 제거할 시 경쟁 상태에 빠질 수 있어서 제거하기 어렵다. 보통 교착 상태 방지 알고리즘은 순환 대기 발생을 막는데 초점이 맞춰져있다.

 

  • 예방 : 조건 중 하나를 제거해서 예방하는 방식. 자원 낭비가 심하다.
    • 상호배제 부정 - 공유자원을 여러 프로세스가 사용.
    • 점유대기 부정 - 프로세스의 실행 전에 필요한 모든 자원 할당.
    • 비선점 부정 - 높은 우선순위의 프로세스가 이미 할당된 자원을 선점할 수 있게 함.
    • 순환대기 부정 - 자원에 고유번호 할당 후 일정 순서대로 자원 요구.
  • 회피 : 프로세스에게 자원을 할당한 후에도 안전할지 확인한 후 자원을 할당하는 방식.
    • 데드락 발생 가능성을 인정하면서 적절히 회피하는 것!
    • 은행원 알고리즘 - 자원 할당량을 사전에 파악하고 데드락을 회피하는 알고리즘.
  • 탐지 및 회복
    • 탐지 - 은행원 방식과 유사하게, 자원 할당 그래프 등으로 데드락 발생 여부 탐지.
    • 회복 - 1. 단순히 프로세스 1개 이상 중단시키기, 2. 자원 선점 (데드락 걸린 프로세스의 점유 자원을 선점에서 다른 프로세스에 할당

 

 

 

참고
https://velog.io/@lovi0714/%EC%9E%84%EA%B3%84-%EC%98%81%EC%97%AD-Critical-Section
https://coder-in-war.tistory.com/entry/OS-06-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%8F%99%EA%B8%B0%ED%99%94-%EC%9E%84%EA%B3%84%EC%98%81%EC%97%ADCritical-Section
https://help-solomon.tistory.com/12

 

Comments