Notice
Recent Posts
Recent Comments
Link
쟈미로그
임계영역, 경쟁상태(Race Condition)와 교착상태(DeadLock) 본문
1. 임계영역 (Critical Section)
동일한 자원(공유자원)에 접근하는 코드 영역.
즉, 문제가 발생하지 않게 독점을 보장해줘야 하는 영역이다.
방법
뮤텍스, 세마포어 등이 있다.
해결 조건
상호 배제
: 한 프로세스/스레드가 임계 영역 진입 시 다른 이는 들어갈 수 없음. -> 안될 시 Race Condition 발생한정 대기
: 특정 프로세스/스레드가 임계 영역에 영원히 들어가지 못하면 안됨. -> 안될 시 Starvation 발생진행
: 포르세스/스레드 간 임계 영역 진행에 대해 서로 방해할 수 없음. -> 안될 시 DeadLock 발생
2. 경쟁 상태 (Race Condition)
여러 프로세스가 동시에 공유 자원에 접근할 때, 접근 순서에 따라 결과값이 달라지는 상태.
즉, 해당 공유 자원은 동시 접근이 되지 않도록 해야한다.
뮤텍스/세마포어 등을 통해 임계 영역의 상호 배제
가 지켜지도록 한다.
3. 교착 상태 (DeadLock)
여러 프로세스가 서로 자원을 얻지 못해서 무한히 자원을 기다리며 대기하는 상태.
한정된 자원을 여러 곳에서 사용하려할 때 발생한다.
발생 조건
상호 배제
: 자원을 한번에 한 프로세스만 사용할 수 있음.점유 대기
: 하나 이상의 자원을 점유한 상태에서, 이미 다른 프로세스에 할당돼있는 자원을 추가로 점유하려고 대기하는 프로세스가 존재함.비선점
: 이미 할당된 자원은 사용이 끝날 때까지 강제로 뺏을 수 없음.순환 대기
: 프로세스들은 순환 형태로 자원을 대기하고 있음.
해결법
위 조건들 중 하나라도 성립 안해도 데드락을 해결할 수 있다!
상호 배제 조건은 제거할 시 경쟁 상태에 빠질 수 있어서 제거하기 어렵다. 보통 교착 상태 방지 알고리즘은 순환 대기 발생을 막는데 초점이 맞춰져있다.
- 예방 : 조건 중 하나를 제거해서 예방하는 방식. 자원 낭비가 심하다.
- 상호배제 부정 - 공유자원을 여러 프로세스가 사용.
- 점유대기 부정 - 프로세스의 실행 전에 필요한 모든 자원 할당.
- 비선점 부정 - 높은 우선순위의 프로세스가 이미 할당된 자원을 선점할 수 있게 함.
- 순환대기 부정 - 자원에 고유번호 할당 후 일정 순서대로 자원 요구.
- 회피 : 프로세스에게 자원을 할당한 후에도 안전할지 확인한 후 자원을 할당하는 방식.
- 데드락 발생 가능성을 인정하면서 적절히 회피하는 것!
- 은행원 알고리즘 - 자원 할당량을 사전에 파악하고 데드락을 회피하는 알고리즘.
- 탐지 및 회복
- 탐지 - 은행원 방식과 유사하게, 자원 할당 그래프 등으로 데드락 발생 여부 탐지.
- 회복 - 1. 단순히 프로세스 1개 이상 중단시키기, 2. 자원 선점 (데드락 걸린 프로세스의 점유 자원을 선점에서 다른 프로세스에 할당
참고
https://velog.io/@lovi0714/%EC%9E%84%EA%B3%84-%EC%98%81%EC%97%AD-Critical-Section
https://coder-in-war.tistory.com/entry/OS-06-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%8F%99%EA%B8%B0%ED%99%94-%EC%9E%84%EA%B3%84%EC%98%81%EC%97%ADCritical-Section
https://help-solomon.tistory.com/12
'CS > OS' 카테고리의 다른 글
뮤텍스와 세마포어 (0) | 2022.11.22 |
---|---|
프로세스와 스레드, 멀티 프로세스와 멀티 스레드 (0) | 2022.11.22 |
운영체제, 커널, 메모리 구조에 대해 (1) | 2022.11.21 |
Comments