프로그래밍 농장

Deadlock [ 임베디드 설계 ] 본문

Linux

Deadlock [ 임베디드 설계 ]

Tennessee201 2021. 10. 19.
728x90

Deadlock ?  

-> 프로세스들이 서로 unlock이 연상되기를 기다리면서 트랜잭션의 수행을 중단하고 있는 상태이다. ' 교착상태 '

 

-> Necessary conditions for deadlock ( 데드락이 생길수 있는 4가지 조건 )

: Mutuaal exclusion : 하나의 리소스를 어떤 프로세스가 장악하면 다른건 사용불가

: Hold and wait : 프로세스가 cpu를 장악시, 끝날떄까지 다른건 사용불가

: No preemption : 프로세스가 cpu를 장악중일시, 누군가 뻇는것이 불가능 

: Circular wait : 리소스의 스레드가 필요로 하는 사이클이 있음 ( 서로 필요한 리소스가 다름, ( 연관이있음 ) )

-> 이 중 하나라도 만족하지못하면 쉽게 데드락이 풀림

 

아래그림은 사이클이 없어서 데드락에 대한 고민이 없다. 

but, 아래그림은 사이클이 있기에 데드락이 존재한다. 

아래그림은 사이클이 있지만 데드락이 없다. 


Deadlock Prevention : 데드락 예방법 

- Mutual exclusion : 동시에 접근을 허용

- Hold and Wait : 동시에 접근한 리소스(프로세스)들을 그냥 둘 다 포기해버린다. ( 교착상태 회피 )

- No Preemption : 현재 리소스가 사용중이건 아니건, 와서 접근을 가로챌수있도록 허용해줌 

- Circular Wait : 각 리소스와 스레드가 서로 원을 이루며 접근을 함 (교차) 


- 알고리즘 계산법 

Allocation : 현재 할당된 갯수 / Max : 최대 갯수 / Need : 최대치까지 필요한 갯수 / Available : 현재 총 가능한 갯수

아래처럼 T0 부터 순차적으로 줄수있다. 

이때 T0 은 가능한 갯수에서 max까지 못채워지므로 T1이 가능하므로 T1을 채워준다. -> 이후 T1은 종료 -> Available에 T1의 값을 반환해줌 

728x90