bbanpro 2020. 7. 8. 17:59
728x90
반응형

 

👍 교착상태란?

 

운영체제는 프로세스가 임계구역에 동시접근하지 못하도록 상호배제 알고리즘을 사용한다.

그런데 만약 실행상태인 프로세스가 무한루프에 빠지거나(점유와 대기 상태의 교착상태), 준비상태인 프로세스와 실행상태인 프로세스가 서로 종속적인 경우라면(환형 상태), 현재 실행상태인 프로세스는 영원히 끝나지 않을 것이다.

이렇게 여러 프로세스가 하나의 자원을 공유하여 사용하고 있을 때 서로 사용할 자원을 요구하지만 그렇지 못하여 무한정 기다리는 상태를 "교착상태"라고 한다.

교착상태는 분명 좋지 않은 것이다. 운영체제는 얼마든지 교착상태가 안 일어나도록 예방할 수 있다.

하지만 교착상태를 아예 없애기에는 너무 극단적이다. 왜냐하면 교착상태도 결국 상호배제가 아니면 생길 수 없는 현상이기 때문이다.

따라서 우리는 교착상태를 없애지 말고 쿨하게 인정하되, 가능한 발생하지 않도록 피해가는 쪽으로 운영하는 것이 적절하다고 볼 수 있다.


👊 교착상태가 발생할 필요충분조건 4가지 - 모두 충족해야 함 (= 교착상태의 원인)

 

상호배제 : 여러 프로세스가 임계구역에 동시 접근을 할 수 없다

비선점 : 비실행상태인 프로세스는 실행상태인 프로세스로부터 자원(CPU, 프린터 등)을 빼앗아 올 수 없다.

점유와 대기 : 할당된 자원을 가진 상태에서 다른 자원을 기다림

환형(순환) 대기 : 서로를 원하기 때문에 물고 물림


👊 교착상태의 해결방안

 

🙌 교착상태 예방(Prevention)

교착상태가 발생하지 않도록 아예 미리 차단하는 방법으로, 교착상태의 필요충분조건 4가지를 부정하는 것.

좋은 방법은 아니다.

상호배제부정 => 동시에 너도 나도 프린터를 쓴다는 것은 불가능하므로 비현실적인 방법

비선점부정 => 선점화하는 것으로, 언제든지 실행중인 프로세스를 중단하거나 공유자원을 빼앗을 수 있게 한다. 현실적인 방법

점유와 대기 부정 => 기다리는 법 없이 필요한 자원을 한꺼번에 요구하며, 요구한만큼 자원이 없다면 작업을 진행하지 않는 땡깡을 부림.

환형 대기 부정 => 자원을 중구난방으로 사용하지 못하도록 선형(단방향) 순서로 명령한다.

 

 

🙌 교착상태 회피(Avoidance)

교착상태가 일어나도록 그냥 두되, 운영체제가 알아서 피해가는 방식.

프로세스가 자원을 요구할 때 시스템이 안전 상태를 유지할 수 있는 자원 요구만을 할당하여 주는 방안으로, 자원 분배를 교착상태가 발생하지 않는 범위 내에서 한다.

다익스트라의 은행원 알고리즘이 대표적이다.

 

🙌 교착상태 발견(Detection)

컴퓨터의 중단 원인이 교착상태인지 아니면 다른 이유인지 파악하는 방식.

자원과 프로세스를 인접행렬로 표현하여 파악.

 

🙌 교착상태 회복(Recoverty)

서로 같은 자원을 공유하려고 할 때, 한 프로세스를 잠시 중단시키고 그 프로세스로부터 자원을 뺏는 방식.

자원을 뺏는 것으로도 안되면 해당 프로세스를 리셋한다.

 

자원 빼앗을 프로세스 대상

  • 우선순위가 낮은 프로세스
  • 처리된 진행상태가 적은 프로세스
  • 자원을 적게 사용하고 있는 프로세스

프로세스 리셋 대상

  • 무한대기(기아상태) 등 문제가 있는 프로세스
  • 정상 수행이 불가능한 프로세스

만약 자원 빼앗기로도 회복이 안되면, 교착상태가 발생하기 이전 상태로 복구시키는 "Rollback"을 한다.

728x90
반응형