
여러분 안녕하세요~ Hyun's story입니다!
최근에 비동기 기술에 대해 많이 알고 하고 싶어서 관련 기술들을 많이 찾아보았습니다. 비동기와 운영체제와 깊은 연관이 있다는 것을 깨닫고, 운영체제 책을 구입하고, 운영체제 강의를 다운받아서 공부중에 있습니다~
이번에는 교착상태 개념에 대해 설명해드릴려고 합니다.
비동기로 스레드를 Concurrent하게 사용하고 아래에 설명해드릴 4가지 조건( Mutual Exclusive, Hold and wait, No-Presumption, Circular wait)이 충족이 되면 위와 같이 데드락 상황이 발생한다고 하네요.
교착상태..교착상태...가 뭐지라고 생각했는데, 운영체제 강의를 보고 이해를 했습니다. 위의 사진과 같이 프로세스가 자원을 요청하는데 또 다른 프로세스가 그 자원을 점유하고 있고 그 프로세스는 다른 자원을 요청하고있고, 계속 돌다가 결국 프로그램이 죽어버리게 되는 것을 교착상태라고 합니다.
운영체제에서는 데드락!! Deadlock, 한국어로는 교착상태라고 합니다.
교착상태가 발생하면 문제가 되는게, 처음에 발생한 데드락 프로세스만 데드락이 걸리면 되는데, 어떤 프로그램이 실행되면 서로 자원을 가져오고 공유하기 때문에 즉, 복잡한 거미줄처럼 서로 연결되어있는 구조때문에,
데드락을 해결을 바로 하지 않고 시간이 가면 갈 수록 시스템 전체가 데드락이 걸려버릴 수 도 있습니다.
그 만큼, 데드락을 해결하고 회피하는 방법이 중요하다고 합니다.
데드락은 스레드가 concurrent한 상황일 때 동시에 process를 처리할 때 발생하기 때문에, 경우에 따라 데드락이 걸릴 수도 있고 안걸릴 수도 있다고 합니다. 그래서, 디버깅하기가 정말 어렵다고 하네요. 어느날 가끔 데드락이 걸렸다가, 평소에는 안걸리다가...(대부분 데드락 문제는 프로그래머들이 프로그래밍을 잘못짠거라고하네요ㅠ )

위의 그림과 같은 상황이 데드락 상황입니다.
p는 프로세스를 말하고요, R은 자원을 말합니다.
동그라미 점은 자원의 개수를 말하고요.
화살표가 박스에 걸쳐있는건 Reqest (요청) 상태에 있는 중이고,
점에 있는 화살표가 p를 가리키는 건 p가 이미 리소스를 점유하고 있다는 것입니다.
위와 그림을 보면서 와닿으셨듯이,
데드락은 다음 4가지상황이 만족이 되면 무조건 데드락이 걸리게 됩니다.
1. Mutual Exclusive : 프로세스들이 필요로 하는 자원에 대해 배타적 통제권을 요구함.
2. Hold and wait 세마포어를 둘다 통과 했다는 의미이고 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다리는 상태
3. No-Presumption : 프로세스가 어떤 자원의 사용을 끝날 때까지 그 자원을 뺏을 수가 없음.
(나중에 설명해 드릴, checkpoint로 돌아가는 방법이 있지만, 다음시간에 설명하겠습니다.)
4. Circular wait 위의 그림과 같이 계속해서 원을 그리면서 반복적으로 자원할당 요청하고 기다리고, 자원할당 요청하고 기다리고 이런 상황을 말합니다.

만약에 위 같은 상황이라면 데드락은 걸리지 않습니다. 왜? 자원 개수가 프로세스가 요청하는 개수랑 같기 때문이죠~~
자원의 개수가 부족하고 circular wait상태가 되면 데드락이 걸릴 수 밖에 없습니다.
이상, 데드락에 대한 개념과 데드락이 걸렸을 때 조건들을 설명했습니다.
다음 시간에는 데드락을 해결하기 위한 방법 여러가지를 설명하고자 합니다.
혹시라도 잘못된 개념이 있다면 댓글을 통해 알려주시면 감사하겠습니다.
긴글 읽어주셔서 감사합니다.
오늘도 좋은하루되세요!
'Computer Science > 운영체제' 카테고리의 다른 글
[운영체제 메모리관리] 메모리 구조(Memory Structure) (0) | 2020.08.12 |
---|
- 1. Mutual Exclusive : 프로세스들이 필요로 하는 자원에 대해 배타적 통제권을 요구함.
- 2. Hold and wait 세마포어를 둘다 통과 했다는 의미이고 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다리는 상태
- 3. No-Presumption : 프로세스가 어떤 자원의 사용을 끝날 때까지 그 자원을 뺏을 수가 없음.
- (나중에 설명해 드릴, checkpoint로 돌아가는 방법이 있지만, 다음시간에 설명하겠습니다.)
- 4. Circular wait 위의 그림과 같이 계속해서 원을 그리면서 반복적으로 자원할당 요청하고 기다리고, 자원할당 요청하고 기다리고 이런 상황을 말합니다.