Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 게임개발
- unreal
- 개발일지
- DFS
- upper_bound
- 구현
- BFS
- 이득우
- 알고리즘
- unity
- 웅진씽크빅
- 시리얼라이제이션
- 운영체제
- 언리얼
- 게임개발공모전
- lower_bound
- binary_search
- 이분탐색
- UI 자동화
- c++
- 인프런
- 유니티
- 백준
- fsm
- c#
- 재귀
- 안드로이드
- 유한상태기계
- 프로그래머스
- 너비우선탐색
Archives
- Today
- Total
초고교급 희망
13강 교착 상태 본문
728x90
식사하는 철학자 문제
동그란 원탁에 5명의 철학자, 식사 5개, 포크 5개
포크 2개 잡을 때만 식사 가능
모든 철학자가 동시에 왼쪽 포크 잡으면 어떤 철학자도 식사 X, 영원히 생각함
→모든 철학자는 다른 철학자가 포크를 내려놓을 때까지 기다림
교착 상태(데드락)
일어나지 않을 사건을 기다리며 진행이 멈춰 버리는 현상
철학자: 프로세스, 스레드
포크: 자원, 한 번에 하나의 프로세스나 스레드만 접근 가능한 임계 구역
생각하는 행위: 자원을 기다림
교착 상태 발생 조건
- 상호 배제
- 해당 자원을 한 번에 하나의 프로세스만 이용 가능
- 점유와 대기
- 자원을 할당받은 상태에서 다른 자원을 할당받기를 기다림
- 비선점
- 어떤 프로세스도 다른 프로세스의 자원을 강제로 빼앗지 못 함
- 원형 대기
- 자원 할당 그래프가 원의 형태
교착 상태 예방
- 자원의 상호 배제 없애기
- 모든 자원 공유 가능하게? → 무리
- 점유와 대기 없애기
- 한 프로세스에 필요한 자원 몰아줌.
- 단점: 자원의 활용률 낮아짐.
- 당장 자원이 필요해도 기다릴 수 밖에 없거나 사용되지 않으면서 오랫동안 할당되는 자원도 생김.
- 많은 자원 사용하는 프로세스가 불리함 → 기아 현상(무한정 기다림)
- 비선점 없애기
- 이용 중인 프로세스로부터 자원 빼앗기
- 모든 자원이 선점 가능하지는 않다.
- 단점: 범용성 낮음
- 원형 대기 없애기
- 모든 자원에 번호 붙이고 오름차순으로 자원 할당
- 원형 식탁이 아닌 사각형 식탁에서 일렬로 앉아서 식사
- 단점: 수많은 자원에 번호 붙이는 건 어렵고, 특정 자원의 활용률 떨어질 수 있음
교착 상태 회피
한정된 자원의 무분별한 할당으로 인해 발생하는 문제 해결
안전 상태를 유지할 수 있는 경우에만 자원을 할당
- 안전 상태: 교착 상태 발생하지 않고 모든 프로세스가 정상적으로 자원 할당받고 종료될 수 있는 상태
- 불안전 상태: 교착 상태 발생 가능, 안전 순서열 없는 상황
- 안전 순서열: 교착 상태 없이 안전하게 프로세스들에 자원 할당할 수 있는 순서
- 예시) 웹 브라우저 → 메모장 → 게임
교착 상태 검출 후 회복
자원 요구하면 그때그때 모두 할당, 교착 상태 발생 여부를 주기적으로 검사.
교착 상태 검출되면 회복
- 선점을 통한 회복
- 교착 상태 해결될 때까지 한 프로세스씩 자원 몰아주기
- 프로세스 강제 종료를 통한 회복
- 교착 상태 놓인 프로세스 모두 강제 종료
- 한 번에 해결 가능, 많은 프로세스가 작업 내용 잃음
- 해결될 때까지 한 프로세스씩 강제 종료
- 작업 내역 잃는 건 최소화, 교착 상태 없어졌는지 확인하는 과정에서 오버헤드 야기함
- 교착 상태 놓인 프로세스 모두 강제 종료
타조 알고리즘: 교착 상태 무시하는 방법
728x90
'Operating System' 카테고리의 다른 글
12강 프로세스 동기화 (0) | 2024.01.18 |
---|