1. 교착 상태 (Deadlock)
1) 교착 상태의 정의
• 교착 상태란, 두 개 이상의 프로세스가 서로의 작업이 끝나기를 기다리며 진행이 멈춘 상태를 의미함.
• 운영체제가 해결하지 못하면 외부 개입(작업 교체, 종료)이 필요함.
• 하나 이상의 작업이 영향을 받아 무한 대기 상태가 발생할 수 있음.
• 비공유 자원을 사용하는 두 프로세스가 서로 기다릴 때 발생함.
• 자원을 해제할 때까지 프로세스는 작업을 진행할 수 없음.
2) 기아 상태와 차이점
• 기아 현상 (Starvation): 운영체제의 정책 문제로 특정 프로세스의 작업이 지속적으로 지연되는 현상.
• 교착 상태: 여러 프로세스가 특정 자원을 서로 점유하고 대기하면서 자연적으로 발생하는 문제.
3) 시스템 자원과 교착 상태
• 공유할 수 없는 자원을 사용할 때 교착 상태 발생.
4) 교착 상태의 예시
• 일상생활에서도 외부 개입이 없으면 해결되지 않음.
5) 잠금과 교착 상태
• 잠금을 사용할 때 교착 상태가 발생할 수 있음.
6) 응용 프로그램에서의 교착 상태
• 데이터베이스에서 데이터 일관성을 유지하기 위한 잠금(lock) 과정에서 교착 상태 발생 가능.
7) 프로세스의 자원 사용 과정
① 자원 요청: 필요한 자원을 요청, 다른 프로세스가 사용 중이면 대기.
② 자원 사용: 획득한 자원을 사용.
③ 자원 해제: 사용 후 자원을 반납.
8) 컴퓨터 시스템에서의 교착 상태 예시
• 스풀링 시스템: 디스크의 스풀 공간이 가득 차면 교착 상태 발생.
• 디스크 공유: 디스크 사용에 대한 제어가 없으면 프로세스 간 충돌로 교착 상태 발생.
• 네트워크 시스템: 메시지 흐름 제어가 없을 경우, 입출력 버퍼 부족으로 인해 교착 상태 발생.
2. 자원 할당 그래프 (Resource Allocation Graph)
• 프로세스가 어떤 자원을 사용 중이며, 어떤 자원을 기다리고 있는지를 방향성 그래프로 표현.
• 프로세스는 원(circle), 자원은 사각형(rectangle)으로 표시됨.
1) 다중 자원 사용
• 여러 프로세스가 하나의 자원을 동시에 사용할 경우, 수용 가능한 프로세스 수를 작은 원으로 표현.
2) 식사하는 철학자 문제
• 각 철학자가 두 개의 포크(자원)를 사용해야 식사가 가능.
• 다음 조건을 만족하면 교착 상태 발생:
- 포크(자원)를 공유할 수 없음.
- 다른 철학자의 포크를 빼앗을 수 없음.
- 왼쪽 포크를 들고 오른쪽 포크를 기다림.
- 자원 할당 그래프가 원형을 이루어 양보가 불가능함.
3. 교착 상태 발생 조건 (Necessary Conditions)
• 교착 상태가 발생하려면 다음 네 가지 조건을 모두 만족해야 함. 하나라도 충족되지 않으면 교착 상태 발생하지 않음.
1) 상호 배제 (Mutual Exclusion)
• 자원이 한 프로세스에 의해 독점적으로 사용됨.
• 다른 프로세스는 해당 자원이 해제될 때까지 대기해야 함.
2) 비선점 (Non-preemptive)
• 한 프로세스가 사용 중인 자원을 다른 프로세스가 강제로 빼앗을 수 없음.
3) 점유와 대기 (Hold and Wait)
• 프로세스가 이미 할당된 자원을 유지한 채, 추가 자원을 요청하며 대기하는 상태.
4) 원형 대기 (Circular Wait)
• 프로세스들이 서로 자원을 점유한 채, 원형 구조로 대기하는 상황.
4. 교착 상태 해결 방법
• 자원 할당 전략 변경: 자원의 요청 순서를 정하거나, 우선순위를 설정하여 해결.
• 자원 회수 정책: 특정 프로세스가 보유한 자원을 강제로 회수할 수 있도록 설계.
• 교착 상태 예방 기법: 네 가지 발생 조건 중 하나 이상을 제거하는 방식 적용.
• 교착 상태 탐지 및 복구: 교착 상태가 발생하면 프로세스를 종료하거나 자원을 회수하여 해결.
이 내용은 휴넷사회복지평생교육원의 운영체제 강의를 듣고 정리한 것입니다.
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 13. 메모리 관리 (0) | 2025.04.23 |
---|---|
[운영체제] 12. 교착 상태 해결 방법 (0) | 2025.04.10 |
[운영체제] 10. 임계구역 문제 (0) | 2025.03.29 |
[운영체제] 9. 프로세스 동기화 (0) | 2025.03.28 |
[운영체제] 8. 스케줄링 알고리즘 (0) | 2025.03.17 |