티스토리 뷰
● 도입
- 여러 프로세스가 서로 다른 프로세스의 작업이 끝나기를 기다리다가 아무도 작업을 진행하지 못하는 상태를 교착상태라고 한다.
- 교착상태는 일상생활에서도 발생할 수 있다.
- 위와 같은 도로에서 차량 한 대가 꼬리 물기를 해서 교통이 마비되었다고 해보자
- 도로를 원할하게 할려면 앞에서 길을 터줘야 하는데 지금은 그 어느 차선도 이러지도 저지도 못 하는 상태이다.
- 이럴때는 누군가 도로를 통제해서 해결해 줘야한다.
● 교착상태
- 교착상태가 발생하는 이유는 공유자원 때문이다.
- 만약 어떤 자원을 여러 개의 프로세스가 공유하지 않는다면 교착상태는 발생하지 않을 것이다.
cf1) 위의 예시에서 (공유자원 = 도로)이다. 공유되는 도로를 서로 차지하려다 교착상태가 발생한 것이다.
cf2) 교착상태를 설명하는 가장 유명한 예시가 식사하는 철학자이다.
- 교착상태의 필요조건은 아래와 같다.(필요조건 = 어떤 진술이 참이 되기 위해서 반드시 충족되어야 하는 조건)
- 4개의 필요조건 중 1개라도 충족하지 않으면 교착상태는 발생하지 않는다.
1. 상호배제
- 어떤 프로세스가 한 리소스를 점유했다면 해당 리소스는 다른 프로세스에게 공유되면 안 된다.
= 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권
= 식사하는 철학자에서 포크가 리소스에 해당한다.
2. 비선점
- 프로세스 A가 리소스를 점유하고 있을 때 프로세스B가 리소스를 빼앗을 수 없어야한다.
= 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없다.
= 다른 사람이 이미 들고있는 포크를 빼앗을 수 없다.
3. 점유와 대기
- 어떤 프로세스가 리소스A를 가지고 있는 상태에서 리소스B를 원하는 상태여야한다.
= 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다.
= 오른쪽 포크를 손에 쥔 채로 왼쪽 포크를 기다리고 있는 상태
4. 원형대기(순환대기)
- 점유와 대기를 하는 프로세스들의 관계가 원형을 이루고 있다.
= 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.
= 서로가 서로의 포크를 원하는 상황이 원형을 이룬다.
https://ko.wikipedia.org/wiki/%EA%B5%90%EC%B0%A9_%EC%83%81%ED%83%9C
'CS > 운영체제' 카테고리의 다른 글
#25 컴파일과 프로세스 (0) | 2023.05.22 |
---|---|
#24 데드락 해결 by 은행원 알고리즘(Banker's algorithm) (0) | 2023.05.21 |
#22 프로세스 동기화 - 모니터(컴퓨터 모니터 아님) / synchronized (0) | 2023.05.11 |
#21 프로세스 동기화 - 세마포어 (0) | 2023.05.10 |
#20 프로세스 동기화 - 공유자원과 임계구역 (0) | 2023.05.09 |
- Total
- Today
- Yesterday
- 프로세스
- node.js
- SQL
- API
- MongoDB
- java
- OS
- Advanced Stream
- MySQL
- Phaser
- 운영체제
- 코딩테스트
- 빅데이터
- Java8
- nosql
- 빅데이터 분석기사
- 자료구조
- db
- Phaser3
- spring
- Stream
- git
- DART
- 알고리즘
- jpa
- 코테
- 프로그래머스
- Spring Boot
- SpringBoot
- 메모리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |