2012-12-01 2 views
3

교착 다루는 것은 교착 발생한다면 공정 1 잠금 자원 ("올바른"위치로 전환 의한 컨텍스트) 대기 자원 동시에 동안 B위한 프로세스 2 잠금 자원 에 액세스 리소스 B 기다린다. 커널 : UNIX

어떻게 교착 상태와 유닉스 거래를합니까? 나는 다음을 읽었다 : here.

많은 교착 상태는 단순히 순서를 변경 수있는 방법

같은 순서 (예를 들어, 순으로 잠금 이름)에서 그들을 고정하기 위해 여러 자원을 잠글 모든 프로세스를 요구함으로써 방지 할 수 또한 실행 순서를 변경하지 않고 잠금을 획득합니까? 누군가 세부은 현대 Unix 커널에 의해 취해지는 교착 상태 처리에 접근 할 수 있습니까?

답변

3

리눅스 커널의 경우,이 처리하지 않습니다. 대신 런타임에서 이런 종류의 교착 상태를 감지하고 불평합니다.

이 기술이 사용하는 lockdep는 런타임 잠금 정확성 검사기입니다. 자세한 내용은 커널 문서 Documentation/lockdep-design.txt을 참조하십시오. 더 의미가 있지만, 잠금 ** ** 같은 순서로 수행 할 수없는 경우가 있으며, 이러한 교착 상태의 가능성이 존재

2

아니요, 주문을 OS로 변경할 수 없습니다. 이 구문은 "프로그래머가 합당하고 모든 경쟁 엔터티에서 동일한 순서로 리소스를 잠그면 많은 교착 상태가 불가능합니다"라고 읽어야합니다. 그것을 해결하는 방법에 아무 생각이 없기 때문에

+0

. 그런 경우, 커널은 교착 상태를 어떻게 처리합니까? –

+0

@Cthulhu 현대 유닉스 커널 (리눅스와 BSD)은 교착 상태를 다루지 않습니다. – cnicutar

+1

Solaris는 사용자 영역 코드에서 교착 상태를 변경하거나 방지하지 않습니다. dtrace 도구 (Gregg 및 Mauro)는 세마포어 및 뮤텍스와 같은 객체의 상태를 표시 할 수 있습니다. 이러한 객체의 상태에 대한 논리적 인 의미는 OS가 아닌 프로그래머에게 달려 있습니다. –