📌 교착 상태 (Dead Lock)
둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때 무한 대기에 빠지는 상황.
예시
- A와 B가 필기를 하려한다.
- 필기를 하려면 연필과 노트가 필요하다.
- A는 연필을 가지고 있고, B는 노트를 가지고 있다.
- A는 B에게 노트를 요구하고, B는 A에게 연필을 요구한다.
- 하지만 A와 B는 가지고 있는 것을 넘겨주면 필기를 할 수 없기 때문에 서로 넘겨줄 생각이 없다.
- 무한정 대기하는 상황이 발생하는데 이것을 교착 상태라고 한다.
- 여기서 연필과 노트는 공유 자원이라고 하고, 공유 자원이 속해 있어 교착 상태가 발생할 수 있는 영역을 임계 영역이라고 한다.
📌 공유 자원 (Shared Resource)
시스템 안에서 각 프로세스, 스레드가 함게 접근할 수 있는 자원이나 변수 등을 의미한다.
- 이 공유 자원을 두 개 이상의 프로세스가 동시에 읽거나 쓰는 상황을 경쟁 상태(race condition)라고 한다.
- 동시에 접근을 시도할 때 접근의 타이밍이나 순서 등이 결과값에 영항을 줄 수 있는 상태.
📌 임계 영역 (Critical Section)
임계 영역이란 한 순간 반드시 프로세스 하나만 진입해야 하는데, 프로그램에서 임계 자원을 이용하는 부분으로 공유 자원의 독점을 보장하는 코드 영역을 의미한다. 임계 구역은 지정된 시간이 지난 후 종료된다.
- 공유되는 자원, 즉 동시접근하려고 하는 그 자원 (ex. 연필, 노트) 에서 문제가 발생하지 않게 독점을 보장해줘야 하는 영역을 임계 영역이라고 한다.
📌 임계 영역을 해결하기 위한 방법
- 뮤텍스, 세마포어, 모니터 등이 있다.
- 상호 배제, 한정 대기, 융통성이라는 조건을 만족한다.
- 상호 배제 : 한 프로세스가 임계 영역에 들어갔을 때 다른 프로세스는 들어갈 수 없음.
- 한정 대기 : 특정 프로세스가 영원히 임계 영역에 들어가지 못하면 안 됨.
- 진행 : 임계 구역에 들어간 프로세스가 없는 상태에서, 들어가려고 하는 프로세스가 여러 개 있다면 어느 것이 들어갈지를 적절히 결정해주어야 한다.
✔ 3번에 대해서 다르게 표현한 곳이 있어서 가져왔다.
3. 융통성 : 한 프로세스가 다른 프로세스의 일을 방해해서는 안 됨.
📌 마치며
- 임계 영역! 뭔가 단어가 생소하고 어려웠는데 뭔가 트랜잭션 공부했을 때가 생각나면서 ACID 부분 봤을 때랑 비슷한 점이 있다고 느껴졌다.
- 은행 입출금 예시가 많았어서 그럴 수도 있을 듯.
- 접근을 시도할 때 접근 타이밍, 순서에 따라 결과값이 달라질 수 있는 것을 경계하는 점이 비슷하다고 느껴졌다.
- 뮤텍스, 세마포어, 모니터의 개념은 따로 포스팅해야겠다.
📌 reference!
운영체제 - 경쟁상태, 임계영역, 상호배제
크리티컬 섹션(Critical Section)
위키백과 - 임계 구역 문제
[10분 테코톡] 🎲 와일더의 Mutex vs Semaphore
주홍철 지음, 『면접을 위한 CS 전공지식 노트』,길벗(2022년), p172 - 178