본문 바로가기

전공/운영체제

[운영체제] 교착 상태

 

시스템 모델(System Model)


 

시스템은 경쟁하는 스레드들 사이에 분배되어야 하는 유한한 자원으로 구성된다.

 

자원들은 다양한 유형으로 분할되고, 이들 각각은 동일한 몇개의 인스턴스들로 구성된다.

 

한 스레드가 어떤 자원 유형의 한 인스턴스를 요청하면, 동일한 인스턴스들 중 하나가 할당된다.

 

 

 

mutex lock과 세마포와 같은 동기화 도구들 역시 시스템 자원이다.

 

이들은 현대 컴퓨터 시스템에서 가장 일반적인 교착 상태의 발생 원인이다.

 

 

 

스레드는 자원을 사용하기 전에 요청해야 하고, 자원을 사용하고 난 후에는 해제해야 한다.

(request, use, release)

 

스레드는 task를 수행하기 위해 필요한 만큼의 자원을 요청할 수 있고,

 

요청한 자원의 수는 전체 자원의 수를 초과할 수 없다.

 

 

 

지원의 요청과 해제는 system call이다.

 

스레드가 커널이 관리하는 자원을 사용할 때마다 매번 os는 스레드가 자원을 요청했는지와 그 자원을 할당받았는지를 확인한다.

 

system table에 각 자원의 할당 여부와 어느 스레드에 할당되었는지를 기록한다.

 

다른 스레드에 할당된 자원을 요청하면, 스레드는 해당 자원에 대한 waiting 큐에 추가된다.

 

 

 

 

 

 

Multithreaded Application에서의 교착 상태


 

서로 hold 중인 lock을 요청하게 되면 교착 상태가 발생한다.

 

교착 상태는 스레드의 실행 순서에 따라 일어날 수도 아닐 수도 있다.

 

따라서 특정 스케줄링 상황에서만 발생하는 교착 상태에 대한 식별이 어렵다.

 

 

 

Livelock은 다른 형태의 liveness 오류이다.

 

교착 상태와는 둘 이상의 스레드가 진행되지 않는다는 유사점이 있고,

 

교착 상태는 프로세스가 block되는 반면, livelock은 프로세스가 실패한 행동은 계속해서 시도한다는 차이점이 있다.

 

이는 스레드가 실패한 행동을 재시도하는 시간을 무작위로 정하면 회피할 수 있다.

 

이는 교착 상태보다 덜 일반적인 상황이고, 특정 스케줄링 상황에서만 발생한다.