>  기사  >  운영 및 유지보수  >  Linux에서 교착 상태의 원인은 무엇입니까?

Linux에서 교착 상태의 원인은 무엇입니까?

青灯夜游
青灯夜游원래의
2022-03-21 16:03:113169검색

Linux에서 교착 상태가 발생하는 이유는 다음과 같습니다. 1. 선점할 수 없는 리소스에 대한 경쟁으로 인해 발생하는 교착 상태 2. 소비 가능한 리소스에 대한 경쟁으로 인해 발생하는 교착 상태 3. 부적절한 프로세스 진행 순서로 인해 발생하는 교착 상태 리소스 해제 순서가 부적절하여 프로세스 교착 상태가 발생함)

Linux에서 교착 상태의 원인은 무엇입니까?

이 튜토리얼의 운영 환경: linux5.9.8 시스템, Dell G3 컴퓨터.

1. 교착 상태의 개념:

프로세스(또는 스레드) 그룹의 각 프로세스(또는 스레드)가 대기 중인 경우 그룹의 다른 프로세스(또는 스레드)에 의해서만 발생할 수 있습니다. 프로세스 이벤트가 발생하면 프로세스(또는 스레드) 그룹이 교착 상태에 빠지게 됩니다(교착 상태).

2. 교착 상태의 원인:

(1) 선점 불가능한 리소스에 대한 경쟁으로 인한 교착 상태

예: 파일 공유 시 발생하는 교착 상태

시스템에 두 개의 프로세스 P1과 P2가 있습니다. 둘 다 F1과 F2라는 두 개의 파일을 쓸 준비가 되어 있습니다. 둘 다 재사용 가능하고 선점 불가능한 리소스입니다. 프로세스 P1이 F1을 동시에 열면 프로세스 P2가 F2 파일을 엽니다. P1이 F2를 열려고 하면 F2가 이미 점유되어 있기 때문에 차단됩니다. 이때 F1이 이미 점유되어 있기 때문에 차단됩니다. 시간이 지나면 무선 연결이 되지 않습니다. 대기 상태가 계속해서 교착 상태가 됩니다.

(2) 소모성 자원 경쟁으로 인한 교착 상태

예: 프로세스 통신으로 인한 교착 상태

시스템에는 P1, P2, P3 세 개의 프로세스가 있고, m1, m2, m3은 3개의 소모품입니다. 의지. 한편, 프로세스 P1은 메시지 m1을 생성하여 P2로 보내고, 다른 한편으로는 P3으로부터 메시지 m3을 수신합니다. 한편, 프로세스 P2는 메시지 m2를 생성하여 P3에 보내고, 다른 한편으로는 P1으로부터 메시지 m1을 수신합니다. 마찬가지로, 프로세스 P3은 한편으로 메시지 m3을 생성하여 P1에 보내고, 다른 한편으로는 P2로부터 메시지 m2를 수신합니다.

세 프로세스가 먼저 자신이 생성한 메시지를 보낸 다음 다른 프로세스로부터 메시지를 받으면 교착 상태 없이 원활하게 실행될 수 있습니다. 그러나 세 프로세스가 모두 메시지를 생성하지 않고 먼저 다른 프로세스로부터 메시지를 받으면 영원히 대기하면 교착 상태가 발생합니다.

(3) 프로세스 진행 순서가 잘못되어 교착 상태 발생: 실행 중인 프로세스 중에 리소스를 요청하고 해제하는 순서가 부적절하여 프로세스 교착 상태가 발생합니다.

위 그림에서 곡선 1의 순서로 진행하면 두 과정이 원활하게 완료되고, 곡선 2의 순서로 진행하면 두 과정이 원활하게 완료됩니다. 곡선 3의 경우 두 프로세스가 원활하게 완료됩니다. 곡선 4의 순서로 진행하면 두 프로세스가 안전하지 않은 영역 D에 진입하게 됩니다. 이때 P1은 리소스 R1을 유지하고 P2는 리소스 R2를 유지합니다. 불안전한 상태에서 계속 진행하면 교착상태가 발생할 수 있습니다.


3. 교착상태의 필요조건

(1) 상호 배제 조건. 프로세스(스레드)가 요청한 리소스는 일정 기간 내에 하나의 프로세스(스레드) 잠금에 의해서만 점유될 수 있습니다.

(2) 요청 및 보류 조건. 프로세스(스레드)는 이미 하나 이상의 리소스를 점유하고 있지만 새로운 리소스 요청이 이루어지고 해당 리소스는 다른 프로세스(스레드)에 의해 점유됩니다.

(3) 비선점형 조건(비선점형 조건). 프로세스(스레드)에서 얻은 리소스는 모두 사용되기 전에는 선점될 수 없습니다.

(4) 루프 대기 조건(루프 대기 조건). 교착 상태가 발생하면 리소스의 순환 체인인 프로세스(스레드)가 있어야 합니다.

4. 교착상태 회피, 예방 및 솔루션

교착상태 회피는 시스템 작동 중에 결국 교착상태가 발생하지 않도록 주의하는 것입니다.

     교착상태 발생의 처음 세 가지 조건은 교착상태 발생의 필요조건, 즉 이 세 가지 조건이 존재하는 것보다 교착상태가 발생하기 위해 반드시 충족해야 하는 조건입니다. 반드시 발생하므로 논리적으로 피한다면 네 번째 조건은 교착상태를 피할 수 있습니다.

교착 상태 방지의 기본 아이디어: 시스템은 시스템이 만족할 수 있는 프로세스에서 발행한 각 리소스 요청을 동적으로 확인하고, 할당 후 시스템이 교착 상태에 빠질 가능성이 있는 경우 확인 결과에 따라 리소스를 할당할지 여부를 결정합니다. 할당되지 않습니다. 그렇지 않으면 할당됩니다.

(1) 교착상태를 피하기 위해 일반적으로 사용되는 방법:

1. 자원의 순차적 할당

2. Banker 알고리즘, 기본 아이디어: 교착상태 방지 방법에서는 프로세스가 자원을 동적으로 적용할 수 있지만 시스템은 리소스를 할당하기 전에 할당된 리소스의 보안을 먼저 계산해야 합니다. 할당으로 인해 시스템이 안전하지 않은 상태로 전환되지 않으면 이를 할당하고, 그렇지 않으면 기다려야 합니다.

(2) 교착 상태 방지:

1. "양도할 수 없는" 조건의 파괴: 프로세스가 리소스를 점유한 후 다른 리소스를 신청했지만 이를 충족할 수 없으면 원래 점유된 리소스를 종료합니다.
이 전략은 구현하기 복잡하고 비용이 많이 듭니다. 일정 기간 사용 후 리소스를 강제로 빼앗기 때문에 이전 단계의 작업이 실패하게 됩니다.
2. "요청 및 보류" 조건 삭제: 정적 일회성 리소스 할당 전략을 채택합니다. 즉, 프로세스가 실행되기 전에 모든 리소스에 적용하고, 만족하면 실행하고, 그렇지 않으면 기다려서 점유 및 적용되지 않도록 합니다. 을 위한.
3. "상호 배제" 조건 파괴: 이 전략은 거의 불가능합니다. 자원의 상호 배타성은 그 자체의 성격에 따라 결정되기 때문입니다.
4. "순환 대기" 조건을 제거합니다. 시스템의 모든 리소스에 순차적으로 번호를 매깁니다. 일반적인 원칙은 희귀한 리소스가 더 큰 숫자를 갖는다는 것입니다. 프로세스가 자원을 적용할 때 자원 번호의 순서를 엄격하게 따라야 합니다. 그렇지 않으면 시스템이 자원을 할당하지 않습니다. 즉, 프로세스는 더 작은 숫자의 자원을 획득할 때 더 큰 숫자의 자원에만 적용할 수 있으며, 자원을 해제할 때는 숫자의 내림차순으로 수행되어야 합니다.

(3) 교착 상태 해결 방법:

현재 두 가지 방법이 있습니다. 하나는 교착 상태가 발생하는 것을 방지하는 것이고, 다른 하나는 교착 상태가 발생하도록 허용한 다음 발생 후 해결하는 것입니다.

4가지 구체적인 방법이 있습니다:

1. 교착 상태를 방지합니다. 교착 상태의 조건을 파괴하기 위해 특정 엄격한 제한을 설정하여 교착 상태가 발생하는 것을 방지합니다. 그러나 이 방법은 시스템 자원 활용도를 낮춥니다. 2. 교착 상태를 방지합니다. 동적 자원 할당 과정에서 시스템이 불안전한 상태에 들어가는 것을 방지하고 교착 상태를 피하기 위해 몇 가지 방법이 사용됩니다. 이 접근 방식은 약한 제약 조건을 희생하면서 더 높은 리소스 활용도를 달성합니다.

3. 교착 상태를 감지합니다. 시스템 운영 중 교착상태 발생 허용 시스템에 감지 메커니즘을 설정함으로써 실제 교착상태 발생 여부를 신속하게 감지하고, 교착상태와 관련된 프로세스 및 자원을 정확하게 파악하여 교착상태 완화 조치를 취할 수 있습니다.

4. 교착 상태를 해제하세요. 이는 교착 상태 감지와 함께 수행되는 조치로 프로세스를 교착 상태에서 해제하는 데 사용됩니다.

관련 추천: "

Linux 비디오 튜토리얼

"

위 내용은 Linux에서 교착 상태의 원인은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.