임계 영역을 해결하기 위한 방법은 크게 뮤텍스, 세마포어, 모니터 세 가지가 있으며, 이 방법 모두 상호 배제, 한정 대기, 융통성이란 조건을 만족합니다.
- 상호 배제 : 한 프로세스가 임계 영역에 들어갔을 때 다른 프로세스는 들어갈 수 없음
- 한정 대기 : 특정 프로세스가 영원히 임계 영역에 들어가지 못하면 안 됨
- 융통성 : 한 프로세스가 다른 프로세스의 일을 방해해서는 안 됨
뮤텍스
스레드가 공유 자원을 lock()을 통해 잠금설정하고 사용한 후에 unlock()을 통해 잠금해제하는 객체 잠금이 설정되면 다른 스레드는 잠긴 코드 영역에 접근할 수 없고 해제는 그와 반대입니다. 뮤텍스는 잠금 또는 잠금해제라는 상태만을 가짐.
세마포어
일반화된 뮤텍스. 간단한 정수 값과 두 가지 함수 wait(P 함수라고도 함) 및 signal(V 함수라고도 함)로 공유 자원에 대한 접근을 처리
모니터
둘 이상의 스레드나 프로세스가 공유 자원에 안전하게 접근할 수 있도록 공유자원을 숨기고 해당 접근에 대해 인터페이스만 제공하는 객체
모니터와 세마포어 차이
모니터는 세마포어보다 구현하기 쉬우며 모니터에서 상호 배제는 자동인 반면에, 세마포어에서는
상호 배제를 명시적으로 구현해야 하는 차이점이 있습니다.
세마포어와 뮤텍스의 차이
세마포어는 조건 변수가 없고 프로세스가 세마포어 값을 수정할 때 다른 프로세스는 동시에 세마포어 값을 수정할 수 없습니다. 뮤텍스는 한개의 프로세스 또는 스레드만의 임계영역 접근을 처리하지만 세마포어는 여러개의 임계영역접근을 처리할 수 있습니다.
세마포어 종류
1. 바이너리 세마포어
0과 1의 두 가지 값만 가질 수 있는 세마포어, 구현의 유사성으로 뮤텍스는 바이너리 세마포어라고 할 수 있습니다. 엄밀히 말하면 뮤텍스는 잠금을 기반으로 상호배제가 일어나는 잠금 메커니즘이 들어간 객체이고, 세마포어는 신호를 기반으로 상호배제가 일어나는 신호매케니즘이 들어간 객체입니다.
(예를 들면 핸드폰으로 노래를 듣다가 친구 전화오면 노래 중지되고 통화 처리작업에 관한 인터페이스가 등장하는 것을 상상하자)
2. 카운팅 세마포어
카운팅 세마포어는 여러개의 값을 가질 수 있는 세마포어이며, 여러 자원에 대한 접근을 제어하는데 사용됩니다.
교착 상태(deadlock)
두 개 이상의 프로세스들이 서로가 가진 자원을 기다리며 중단된 상태
교착상태의 원인
상호 배제 : 한 프로세스가 자원을 독점하고 있으며 다른 프로세스들은 접근이 불가능
점유 대기 : 특정 프로세스가 점유한 자원을 다른 프로세스가 요청하는 상태
비선점 : 다른 프로세스의 자원을 강제적으로 가져올 수 없음
환형 대기 : 프로세스 A는 프로세스 B의 자원을 요구하고, 프로세스 B는 프로세스 A의 자원을 요구하는 등 서로가 서로의 자원을 요구하는 상황을 말함
교착상태의 해결방법
1. 자원을 할당할때 애초에 조건이 성립되지 않도록 설계
2. 교착 상태 가능성이 없을 때만 자원 할당되며, 프로세스당 요청할 자원을 최대치를 토앻 자원 할당가능 여부를 파악하는 '은행원 알고리즘'을 사용
3. 교착 상태가 발생하면 사이클이 있는지 찾아보고 이에 관련된 프로세스를 한개씩 지움
4. 교착 상태는 매우 드물게 일어나기 때문에 이를 처리하는 비용이 더 커서 교착상태가 발생하면 사용자가 작업을 종료함
교착상태일 경우 '응답없음' 이라고 뜨기도 한다.
* 은행원 알고리즘 : 총 자원의 양과 현재 할당한 자원의 양을 기준으로 안정, 불안정 상태로 나누고 안정상태로 가도록 자원을 할당하는 알고리즘
'CS > 운영체제' 카테고리의 다른 글
| 캐시, 캐시히트, 캐시미스 (0) | 2022.07.26 |
|---|---|
| CPU 스케줄링 알고리즘(비선점형, 선점형) (0) | 2022.07.26 |
| 공유자원과 임계 영역, 그리고 경쟁상태(race condition) (0) | 2022.07.26 |
| 멀티프로세싱과 멀티스레딩, 그리고 IPC (0) | 2022.07.26 |
| PCB와 컨텍스트 스위칭 (0) | 2022.07.26 |