728x90
728x90
정상적인 상황일 때, 프로세스는 요청 request -> 사용 use -> 방출 release 의 순서로 자원을 이용한다.
이러한 정상적인 상황을 방해하는 것이 바로 교착 상태!
교착 상태가 되려면 4가지의 필요조건을 모두 충족해야 하고, 이 4가지 조건의 상태가 깨지는 순간이 있으면 안 된다.
- 상호 배제 Mutual Exclusion
한 번에 한 프로세스만 자원을 사용하는 상태 - 점유와 대기 Hold and wait
프로세스는 최소 하나의 자원을 점유하는데, 이때 동시에 다른 프로세스에 의해 점유된 자원을 추가로 얻으려고 대기로 들어가는 상태이다. (이미 점유한 자원은 내가 당장 쓸 수 있음과 상관없이 점유한다.. selfish의 전형적인 예,,) - 비선점 Non-preemption
자원들을 선점하지 못한 상태 - 순환 대기 Circular wait
ㅍ1은 ㅍ2가 점유한 점유한 자원을 기다리고, ㅍ2는 ㅍ3가 점유한 자원을 기다리고 ㅍ3은 ㅍ1이 점유한 자원을 기다리는 ㅍ1,2,3이 존재하여 사이클을 만들어버리는 상태
위의 상태가 깨지는 순간이 있으면 안 된다는 말이 이해가 어려울 수 있어 부가설명을 해보자면,
순환 대기를 형성한 ㅍ1,2,3 중 ㅍ1은 여러 자원을 소유하고 있고, 각 자원의 반납 시간이 다르다. 그리고 ㅍ2는 ㅍ1의 자원 중 어느 것이나 받으면 상관없는 상황이라면, ㅍ2는 ㅍ1이 들고 있던 자원 중 하나의 선점을 반납하는 순간 ㅍ2의 욕구가 해소되면서 순환이 깨지기 때문에 교착상태가 아닌 순간이 존재하게 된다. 이처럼 순환이 어어어ㅓㅇ어ㅓㅁ청 길게 진행되어도 순환이 깨지는 순간이 있다면 그건 교착 상태가 아니라는 것이다.
=> 그래프에 순환이 없을 경우: 교착 상태 아님
그래프에 순환이 있을 경우: 교착 상태일 수도, 아닐 수도 있음. 상황마다 다름
728x90
728x90
'OS' 카테고리의 다른 글
커널! 유닉스에서의 커널, 커널 손상 시, 마이크로 커널, 모놀리식 커널 (0) | 2020.08.25 |
---|---|
교착 상태 해결 방법 (0) | 2020.08.24 |
CPU 스케줄링(2) : 스케줄링 알고리즘 (0) | 2020.08.14 |
CPU 스케줄링(1) : 기본 개념 (0) | 2020.08.14 |
프로세스 스케줄링, 스케줄링 큐 (0) | 2020.08.02 |
댓글