본문 바로가기

컴퓨터공학/운영체제

교착상태와 기아상태

반응형

교착상태 (DeadLock)

: 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에, 다음 단계로 진행하지 못하는 상태

 

임계 자원 A와 B가 있다고 가정해보면, Thread A에서 lock.Acquire(B)를 실행하기 위해 대기하는 상태이고 Thread B에서 lock.Acquire(A)를 실행하기 위해 대기하는 상태라고 하면 서로 자원을 쓰기 위해 계속 대기하게 된다

이렇게 무한정으로 대기하는 상태를 교착상태라고 한다

// Thread A
lock.Acquire(A)
A 실행
lock.Acquire(B)
B 실행
lock.Release(B)
lcok.Release(A)
// Thread B
lock.Acquire(B)
B 실행
lock.Acquire(A)
A 실행
lock.Release(B)
lock.Release(B)

 

아래의 4가지가 충족하면 교착상태로 빠질 가능성이 높다

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

2. 점유대기(Hold and wait) : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다리는 상태

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

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

고로 이 4가지 중 한개만 배제해줘도 교착상태에 빠져나올 수 있다.

*사실 결과적으로는 프로그래밍 적으로 해결해야 될 문제이다

 

기아상태(Starvation)

: 계속적으로 해당 프로세스가 점유가 안될때 발생하는 현상

가령 우선순위 1의 29개의 프로세스와 우선순위 2 1개의 프로세스가 있다고 하면 10번을 실행했을때 우선순위2가 실행될 확률은 0 이다. 이런식으로 계속 실행되지 못한 상태를 기아상태

 

기아상태는 해결점은 FIFO, 오랫동안 실행되지 못한 프로세스 실행 등 이전에 배운 방법을 토대로 결합하거나 차용하여 쓸 수 있다.

 

반응형

'컴퓨터공학 > 운영체제' 카테고리의 다른 글

페이지폴트  (0) 2019.11.27
다중페이징시스템  (0) 2019.11.26
가상메모리의 이해 - 페이징 기법  (0) 2019.11.25
가상메모리  (0) 2019.11.25
세마포어  (0) 2019.11.25