일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- nodejs rabbitmq
- java 파티
- spring mongoTemplate switch
- java 1238
- kotiln functional interface
- 익명 객체 @transactional
- 자바 1676
- 백준 2252 줄세우기
- Spring ipfs
- spring mongodb switch
- java 1509
- go
- ipfs bean
- kotiln const val
- spring mongoTemplate
- spring mongodb
- java 백준 1509
- 백준 연결요소 자바
- javav 1676
- 백준 1504 java
- 백준 특정한 최단 경로
- rabbitmq 싱글톤
- ipfs singletone
- java 팩토리얼 개수
- Java Call By Refernce
- kotiln const
- 안정해시
- mongodb lookup
- 자바 백준 팩토리얼 개수
- 전략 패턴이란
Archives
- Today
- Total
공부 흔적남기기
데드락이란? 해결방법은? 본문
728x90
반응형
데드락이란?
프로세스가 자원을 얻지 못해서 다음 처리를 하지 못하는 상태( 교착상태 )
시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생한다.
예를들어 프로세스 A와 B가 있고 자원 a와 b가 있다고 가정하고 A는 a를 사용하고 있었고 B는 b를 사용하고 있었는데 A는 b가 필요해지고 B는 a가 필요해질때 서로 프로세스가 끝나길 기다리기 떄문에 무한 wait상태에 빠지게 되는데 이를 DeadLock이라 한다.
데드락이 발생하는 경우
- 멀티 프로그래밍 환경에서 한정된 자원을 얻기 위해 프로세스들이 경쟁하는 경우
- 데이터를 사용 처리할 수 없는 상황
- 대기 상태로 들어간 프로세스들이 실행 상태로 변경될 수 없을때 발생함
발생 조건
- 상호 배제 : 자원은 한번에 한 프로세스만 사용할 수 있다.
- 점유 대기 : 최소 하나의 자원을 점유하고 있으며 다른 프로세스에 할당되어 사용되고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재해야한다.
- 비선점 : 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 뺴앗을 수 없다.
- 순환 대기: 프로세스의 집합에서 순환형태로 자원을 대기하고 있어야한다.
데드락 처리
1. 예방
- 상호 배제 부정 : 여러 프로세스가 공유 자원을 사용
- 점유 대기 부정 : 프로세스 실행전 모든 자원을 할당
- 비선점 부정 : 자원 점유 중인 프로세스가 다른 자원을 요구 할 때 가진 자원 반납
- 순환 대기 부정 : 자원에 고유번호 할당 후 순서대로 자원 요구
2. 회피
은행원 알고리즘 -> 은행에서 모든 고객의 요구가 충족되도록 현금을 할당하는데에서 유래
프로세스가 자원을 요구할 때, 시스템은 자원을 할당한 후에도 안정 상태로 남아있게 되는지 사전에 검사
안정 상태면 자원 할당, 아니면 프로세스들이 자원해지까지 대기한다.
3. 탐지 & 회복
자원 할당 그래프를 통해 교착상태를 탐지-> 교착 상태를 일으킨 프로세스를 종료하거나, 할당된 자원을 해제시켜 회복시키는 방법
출처 : https://gyoogle.dev/blog/computer-science/operating-system/DeadLock.html
728x90
반응형