교착상태 문제 제기
1) 실생활에서 발생하는 교착상태
- 밥을 먹기 위해 숟가락, 젓가락 모두 필요한 상황에서 한 사람은 숟가락을 다른 한 사람은 젓가락을 소유할 경우 숟가락이나 젓가락을 사용할 수 있을 때까지 대기 → 무한 대기 발생
- 교착 상태 : 자원을 소유한 채, 모두 상대방이 소유한 자원을 기다리면서 무한 대기
2) 식사하는 철학자 문제
- 5명의 철학자가 원탁에서 식사, 식사 시간은 서로 다름
- 자리마다 스파게티 1개와 양 옆에 포크가 있으며
- 각 철학자는 옆 철학자와 대화 불가능
- 식사를 하기 위해서는 양 손에 포크가 동시에 들려 있어야하며
- 왼쪽 포크를들고 다음 오른쪽 포크를 드는 순서
- 포크가 사용 중일 경우 대기
→ 모든 철학자가 동시에 같이 자리에 앉아 식사를 할 경우 모두 왼쪽에 포크를 들어 무한 대기 발생
3) 철학자들의 교착상태 원인과 해결
- 교착상태 원인 - 환형 대기 / 요청 5명 모두 자원을 소유하면서 다른 자원을 요청
- 교착상태 해결 - 환형 대기가 생기지 않도록 ex) 마지막 철학자만 오른쪽 포크를 먼저 잡고 왼쪽을 잡도록 규칙
4) 식사하는 철학자와 컴퓨터 시스템
- 식사하는 철학자 문제는 컴퓨터 교착상태를 비유하여 나타낸 것
- 철학자 : 프로세스 포크 : 자원 스파게티 : 프로세스가 처리할 작업
교착상태
1) 교착상태의 정의
- Deadlock(교착상태) : 자원을 소유한 스레드들 사이에서, 각 스레드는 다른 스레드가 소유한 자원을 요청하여 무한정 대기하고 있는 현상
- 교착상태 발생 위치
- 사용자가 작성한 멀티스레드 응용프로그램에서 주로 발생 (정교하지 못한 코딩)
- 커널 내에서도 발생 가능 (거의 발생 X)
- 교착상태를 막도록 운영하는 컴퓨터 시스템은 많지않음 (막는데 많은 시간과 비용 소모)
2) 전형적인 멀티 스레드 교착상태
- 2개의 스레드가 각각 락 소유, 다른 상대가 가진 락을 요청하고 기다릴 때 발생
- 락과 자원에 대한 경쟁이 있을 경우 교착상태는 언제든 발생 가능
3) 잠재적인 교착상태 발생 요인
- 자원
- 교착상태의 발생 원인
- 컴퓨터 시스템에는 많은 자원 존재 (락 자원, 파일, 데이터 베이스 등의 소프트웨어 자원과 프린터, 메모리, 프로세서 등의 하드웨어 자원)
- 자원과 스레드
- 한 스레드가 여러 자원을 동시에 필요로 하는 상황
- 자원과 운영체제
- 한 번에 하나씩 자원을 할당하는 운영체제 정책
- 자원 비선점
- 할당된 자원은 스레드가 자발적으로 내놓기 전에 강제로 뺏지 못하는 정책
4) 교착상태 모델링
- 자원 할당 그래프
- 그래프의 요소
- 꼭지점 : 스레드(원), 자원(사각형)
- 간선 : 소유/요청 관계, 할당 간선과 요청 간선
- 자원에 대한 시스템의 상태를 나타내는 방향성 그래프
- 해당 그래프를 통해 교착상태 판단
- 교착상태 예방, 회피, 감지를 위한 알고리즘 개발에 필요
교착상태 해결
1) 교착상태가 발생하는 4가지 조건
- 코프만 조건 : 교착상태가 발생하는 4가지 필요조건
- 상호 배제
- 소유하면서 대기
- 강제 자원 반환 불가
- 환형 대기
- 4가지 조건 중 한 가지라도 성립되지 않으면 교착상태가 발생하지 않음
2) 교착상태 해결 방법
- 교착상태 예방
- 교착상태 발생 여지를 차단
- 4가지 조건 중 하나 이상의 조건이 성립되지 않도록 시스템 구성
- 교착상태 회피
- 교착상태에 가지 않도록 회피
- 자원 할당 시마다 교착상태 가능성을 파악하여 교착상태가 일어나지 않으면 자원 할당
- banker’s algorithm
- 교착상태 감지 및 복구
- 교착상태를 감지하는 프로그램 구동, 발견 후 교착상태 해제
- 교착상태 무시
- 교착상태는 없다고 단정하여 사용
- 사용자가 이상을 느끼면 재실행할 것이라고 믿는 방법
- 현재 대부분의 운영체제에서 사용하는 가장 일반적인 방법
3) 교착상태 예방
- 상호배제 없애기
- 2개 이상의 스레드가 자원을 활용할 수 있도록
- 근본적으로 컴퓨터 시스템에 적용 불가능
- 대기하지 않게 만들기
- 방법 1 : 스레드 실행 전 필요한 모든 자원을 파악 후 모든 자원을 할당
- 방법 2 : 스레드가 새로운 자원을 요청하려면, 현재 할당 받은 모든 자원을 반환하고 한꺼번에 요청하여 할당
- 선점 허용
- 자원을 강제로 반환하게 된 스레드가 자원을 다시 사용하게 될 때 이전 상태로 되돌아갈 수 있도록 상태 관리
- 간단하지 않으며 오버헤드가 매우 큼
- 환형 대기 제거
- 모든 자원에게 번호를 매기고, 번호 순으로 자원 할당
4) 교착상태 회피
- 자원할당 시 미래에 환형 대기가 발생할 것으로 판단되면 자원 할당하지 않는 정책
- banker’s Algorithm
- 해당 내용은 따로 포스트 할 예정
5) 교착상태 감지 및 복구
- 교착상태를 감지하는 프로그램을 통해 형성된 교착상태 해제
- 교착상태를 감지하였을 때 복구 방법
- 자원 강제 선점
- 롤백 (시간과 메모리에 대한 부담이 커 잘 사용하지 않음)
- 스레드 강제 종료
6) 교착상태 무시
- 교착상태를 해결할 필요성 : 교착상태는 발생하긴하나 발생 가능성이 극히 적고 교착상태를 피하기 위한 비용이 많이 듦
- 타조 알고리즘 (ostrich)
- put your head in the sand (무시)
- 현재 대부분의 운영체제에서 사용
- hard real-time 시스템이나 환자 감시 시스템에서는 적합하지 않음
'Computer Science > Operating System' 카테고리의 다른 글
[운영체제] 페이징 메모리 관리 (0) | 2023.07.23 |
---|---|
[운영체제] 메모리 관리 (0) | 2023.07.22 |
[운영체제] 스레드 동기화 (0) | 2023.07.16 |
First Come First Served (FCFS) 구현 (0) | 2023.07.11 |
[운영체제] CPU 스케줄링 (0) | 2023.07.11 |