IT recording...
[OS] 9. 데드락 - (3) 본문
[이화여자대학교 반효경 교수님의 강의를 듣고 정리한 글입니다.]
[그림과 함께 편하게 보려면 여기로]
https://adorable-aspen-d23.notion.site/OS-9-3-8cb5bff3e4eb458b9d8c1133224e1aa5
1. DeadLock(교착상태)
: 프로세스들이 각자 일부 자원을 가지고 있으면서, 상대방이 가진 자원을 요구하는 상태
- 자원
- 하드웨어, 소프트웨어 등을 포함하는 개념
1. Deadlock 발생의 4가지 조건
1. Mutual Exclusion (상호배제)
- 상호 배제적으로 사용되는 자원을 사용할 때 발생한다.
- 프로세스들이 동시에 한 자원을 사용할 수 있다면 해당 자원에 대해서는 데드락 발생X
2. No Preemption (비선점)
- 프로세스는 자원을 스스로 내어놓을 뿐 빼앗기지 않는다. (강제로 빼앗기지 않는다)
- 양보 따윈 없다
3. Hold and wait (보유대기)
- 자원을 가진 프로세스가 다른 자원을 기다릴 때 보유 자원을 놓지 않고 계속 가지고 있음 (스스로 내놓지 않는다)
- 프로세스는 일을 하기 위해 가지고 있는 자원은 절대로 내어놓지 않고 다른 자원이 오기까지 기다린다.
4. Circular wait (순환대기)
- 자원을 기다리는 프로세스들 간에 Cycle이 형성된다.
2. 자원그래프
- Cycle 없음
- 데드락이 아니다.
- Cycle 존재
- 자원의 인스턴스의 갯수 == 싸이클의 갯수 이면 데드락이 아니다.
- 이외의 경우는 데드락이다.
2. 교착상태 해결
1. Prevention(예방)
: 데드락의 네 가지 조건 중 하나를 무산시킨다.
- Mutual Exclusion
- 이것은 데드락 방지를 위해 무산시킬 수는 없다.
- 공유될 자원이면 애초에 데드락이 발생하지도 않음
- No Preemption
- 외부에서 강제로 빼앗아 버린다. (선점)
- 프로세스가 어떤 자원을 기다려야 하는 경우, 대기상태로 들어가면서 현재 할당 받은 자원을 강제로 반환한다. (선점)
- 이후 자원을 선점 당한 프로세스가 재시작시, 반환한 자원 + 요청한 자원 모두 할당받아야 한다.
- 그래서 CPU, memory는 데드락이 발생하지 않는다.
- 왜? → 선점당할 수 있게 설계되어 있기 때문이다. 얘네는 context swtiching으로 문맥 보존도 가능하다.
- 입출력장치, mutex, semaphore 는 context를 저장할 수 없기 때문에 선점이 불가능하다.
- Hold and Wait
- 어떤 작업을 하기 위해 필요로 하는 자원을 획득하려고 할 때, 다른 어떤 자원도 가지고 있지 않아야 한다.
-
- 프로세스 시작 시 모든 필요한 자원을 할당받게 하는 방법 (대기없음)
- But, 지금 바로 안쓰는 작업 쥐고 있으면 효율성 떨어짐
-
- 자원이 필요할 경우 보유 자원을 모두 놓고 다시 요청 (점유없음, 자진반납)
- But, 기아상태 가능
- 자주 쓰이는 작업은 이미 다른 곳에 할당되어 있기 때문에
-
- 어떤 작업을 하기 위해 필요로 하는 자원을 획득하려고 할 때, 다른 어떤 자원도 가지고 있지 않아야 한다.
- Circular Wait
- 모든 자원 유형에 할당 순서를 정하여 정해진 순서대로만 자원을 할당한다. (일렬번호 부여)
- 번호가 증가하는 순으로만 자원 요청 가능
- 1,3을 획득해야 하는 프로세스는 반드시 1,3 순으로 획득해야 한다.
⇒ But, 예방 방법은 너무 비효율적이다. (생기지도 않을 데드락을 막는다니?)
Utilization 저하, throughput 감소, Starvation 문제 발생 가능
2. Avoidance (회피)
: 프로세스가 시작될 때 평생 쓸 자원의 최대량을 알고 있다고 가정한다.
- 자원 요청 시 최대를 Allocation 했을 경우를 가정해서 안정 상태가 유지되는지를 확인한다.
- 데드락이 일어날 것 같으면 자원의 여분이 있어도 아예 자원을 안줌
- 안정 순열
- 시스템이 어떤 순서로든 프로세스들의 최대 요구 수에도 교착 상태를 야기하지 않는다.
- 안정 상태
- n!개의 순열 중 안정순열이 하나라도 존재하면 안정상태이다.
- 자원을 할당해줘도 안정상태가 유지되는가?
- Single Resource
- 점선 : 프로세스가 평생에 요구할 수 있는 자원
- 점선을 연결해서 사이클이 형성되면 데드락이 발생할 수 있다고 가정하고 자원 안줌
- 점선 : 프로세스가 평생에 요구할 수 있는 자원
- Multiple Resource
- Banker’s Algorithm (Safety Algorithm)
- Allocation : 현재 할당중인 자원의 양
- Max : 프로세스가 평생 쓸 자원의 양
- Work : (전체에서) 현재 사용 가능한 자원의 양
- Need : 프로세스가 앞으로 더 요구할 자원의 양 (Max - Allocation)
- Safety Algorithm
- 모든 프로세스를 순서대로 돌면서 만족시키는 순열이 있는지를 확인한다.
- Banker’s Algorithm (Safety Algorithm)
⇒ 근데 얘도 비효율적이다.
3. Detection (탐지)
: 현 상태를 대상으로 하여 request와 교착상태를 체크한다.
- 현 상태에서 request가 존재하는 자원내에 사용이 불가능하면 할당하지 않는다.
- 알고리즘
4. Recovery (복구)
- 종료(Abort)
- 교착상태에 있는 모든 프로세스를 종료시킨다.
- But, 처음부터 계산해야해서 비용이 크다.
- 교착상태 탐지 알고리즘을 수행시키면서 한 프로세스씩 중지시킨다.
- But, 탐지 알고리즘 수행에 오버헤드가 발생한다.
- 교착상태에 있는 모든 프로세스를 종료시킨다.
- 선점(Resource Preemption)
- Rollback(후퇴) 필요
- 안정상태가 확인될 때까지 자원을 이동시키며 rollback시키고, 거기서 다시 시작한다.
- But, 안정상태 결정이 힘드며, 프로세스 상태 정보 관리가 필요하다.
- ⇒ total rollback (abort & restart)
- But, 기아상태가 발생할 수 있다.
- 비용에 근거하여 프로세스 선점 시 특정 프로세스만 계속 선점될 수 있다.
- 안정상태가 확인될 때까지 자원을 이동시키며 rollback시키고, 거기서 다시 시작한다.
- Rollback(후퇴) 필요
5. Ignorance (무시)
- 아무것도 안함
- 데드락은 잘 발생하지 않는 애기때문에 얘를 막으려고 쇼하는게 비용이 더 많이 든다. (낭비)
- 그러니까 발생해서 프로그램 느려지면 → 사용자가 눈치챙겨서 → 알아서 종료시키기
'Operating System' 카테고리의 다른 글
[OS] 11. 가상메모리 - (2) (0) | 2022.05.16 |
---|---|
[OS] 10. 메모리 관리 - (1) (0) | 2022.05.15 |
[OS] 8. 프로세스 동기화 문제 - (2) (0) | 2022.04.24 |
[OS] 7. 프로세스 동기화, 임계구역 - (1) (0) | 2022.04.24 |
[OS] 6. CPU 스케줄링 (0) | 2022.04.24 |
Comments