교착상태(deadlock)
두 개 이상의 작업이 서로가 가진 자원을 기다리며 상대방의 작업이 끝나기만을 기다리고 있기 때문에, 다음 단계로 진행하지 못하는 상태로 프로세스, 스레드 모두 이와 같은 상태가 일어날 수 있다. 스마트폰에서 특정 앱이 실행중 동작이 안될때 이유중 하나로 데드락인 경우가 있다. 운영체제가 해당 앱이 특정 기간동안 반응이 없으면 강제종료 시킨다.
교착상태의 원인
- 상화배제 : 한 프로세스가 자원을 독점해서 다른 프로세스들이 자원에 접근 불가 상태
- 점유대기 : 특정 프로세스가 점유한 자원을 다른 프로세스가 요청하는 상태
- 비선점 : 다른 프로세스의 자원을 강제적으로 가져 올 수 없음
- 환형대기 : 프로세스 A,B가 서로의 자원을 요구하는 상황
교착상태 해결 방법
- 자원을 할당할때 애초에 교착상태 조건이 성립되지 않도록 설계한다.
- 교착상태 가능성이 없을때만 자원 할당되며, 프로세스당 요청할 자원 최대치를 통해 자원할당 가능여부를 파악하는 ‘은행원알고리즘’을 사용한다.
- 교착상태가 발생하면 사이클이 있는지 찾아보고 이에 관련된 프로세스를 한 개씩 지운다.
기아상태(starvation)
특정 프로세스의 우선순위가 낮아서 원하는 자원을 계속 할당 받지 못하는 상태로 교착상태는 여러 프로세스가 동일 자원 점유를 요청할 때 발생하는 반면에 기아 상태는 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할때, 특정 프로세스는 영원히 자원 할당이 안되는 경우를 의미한다.
기아상태 해결 방안 (우선순위 변경)
- 프로세스 우선순위를 수시로 변경해서, 각 프로세스가 높은 우선순위를 가질 기회주기
- 오래 기다린 프로세스의 우선순위 높여주기