반응형
프로세스 동기화
임계 영역(Critical Section)에 진입하는 프로세스를 관리하기 위해 Mutex, Semaphore방법을 사용하여 접근을 제어한다. 이때 lock을 사용하며 획득과 방출을 이용해 다중 프로세스 접근을 제어함.
- 소프트웨어상에서 Critical Section 문제를 해결하기 위한 동기화 도구
- 간단한 정수 값과 두 가지 함수 wait(P함수) signal(V함수)로 공유 자원에 대한 접근을 처리함
- wait()는 자신의 차례가 올 때 까지 기다리는 함수이며, siganl()은 다음 프로세스로 순서를 넘겨주는 함수이다.
OS 는 Counting/Binary 세마포를 구분한다
- 카운팅 세마포
가용한 개수를 가진 자원 에 대한 접근 제어용으로 사용되며, 세마포는 그 가용한 자원의 개수 로 초기화 된다. 자원을 사용하면 세마포가 감소, 방출하면 세마포가 증가 한다. - 이진 세마포
MUTEX 라고도 부르며, 상호배제의 (Mutual Exclusion)의 머릿글자를 따서 만들어졌다. 이름 그대로 0 과 1 사이의 값만 가능하며, 다중 프로세스들 사이의 Critical Section 문제를 해결하기 위해 사용한다.
- Busy Waiting(바쁜 대기)
Spin lock이라고 불리는 Semaphore 초기 버전에서 Critical Section 에 진입해야하는 프로세스는 진입 코드를 계속 반복 실행해야 하며, CPU 시간을 낭비했었다. 이를 Busy Waiting이라고 부르며 특수한 상황이 아니면 비효율적이다. 일반적으로는 Semaphore에서 Critical Section에 진입을 시도했지만 실패한 프로세스에 대해 Block시킨 뒤, Critical Section에 자리가 날 때 다시 깨우는 방식을 사용한다. 이 경우 Busy waiting으로 인한 시간낭비 문제가 해결된다.
Mutex(뮤텍스)
- 프로세스나 스레드가 공유 자원을 lock()을 통해 잠금 설정하고 사용한 후에는 unlock()을 통해 잠금 해제하는 객체임. 잠금이 설정되면 다른 프로세스나 스레드는 잠긴 코드 영역에 접근할 수 없고 해제는 그와 반대로 진행됨.
- 상호배제라고도 하며 Critical Section을 가진 스레드의 Running time이 서로 겹치지 않도록 각각 단독으로 실행하게 하는 기술이다.
차이점
- 가장 큰 차이점은 관리하는 동기화 대상의 개수
- Mutex는 동기화 대상이 오직 하나뿐일 때, Semaphore는 동기화 대상이 하나 이상일 때 사용한다.
- Semaphore는 Mutex가 될 수 있지만 Mutex는 Semaphore가 될 수 없다.
- Mutex는 상태가 0, 1 두 개 뿐인 binary Semaphore
- Semaphore는 소유할 수 없는 반면, Mutex는 소유가 가능하며 소유주가 이에 대한 책임을 가진다.
- Mutex 의 경우 상태가 두개 뿐인 lock 이므로 lock 을 가질 수 있다.
- Mutex의 경우 Mutex를 소유하고 있는 스레드가 이 Mutex를 해제할 수 있다. 하지만 Semaphore의 경우 이러한 Semaphore를 소유하지 않는 스레드가 Semaphore를 해제할 수 있다.
- Semaphore는 시스템 범위에 걸쳐있고 파일시스템상의 파일 형태로 존재하는 반면 Mutex는 프로세스 범위를 가지며 프로세스가 종료될 때 자동으로 Clean up 된다.
교착상태(Deadlock)
>> 2개 이상의 프로세스들이 서로가 가진 자원을 기다리며 중단된 상태를 말함.
ex) 프로세스 A가 프로세스 B의 어떤 자원을 요청할 때 프로세스 B도 프로세스 A가 점유하고 있는 자원을 요청하는 것
Deadlock의 발생조건 4가지
- 상호 배제 : 자원은 한번에 한 프로세스만 사용할 수 있음
- 점유 대기 : 특정 프로세스가 점유한 자원을 다른 프로세스가 요청하는 상태
- 비선점 : 다른 프로세스의 자원을 강제적으로 가져올 수 없음
- 순환 대기: 두 개 이상의 프로세스가 자원 접근을 기다리는데, 그 관계에 사이클이 존재한다.
위 4가지 모두 성립해야 데드락이 발생함(한개라도 성립하지 않으면 데드락 문제를 해결할 수 있음)
Deadlock
- 예방(Preventation)
- 교착 상태 발생 조건 중 하나를 제거하면서 해결함(자원 낭비가 심함)
- 회피
- 교착 상태 발생시 피해나가는 알고리즘
- 대표적 알고리즘 예시) 은행원 알고리즘(Banker's Algorithm)
- 총 자원의 양과 현재 할당한 자원의 양을 기준으로 안정 또는 불안정 상태로 나누고 안정 상태로 가도록 자원을 할당하는 알고리즘
'CS 전공지식 > Operating System' 카테고리의 다른 글
[운영체제] 메모리와 캐시 (0) | 2024.06.03 |
---|---|
[운영체제] CPU 스케줄링과 알고리즘 (1) | 2024.06.03 |
[운영체제] 멀티 스레드와 임계영역(Critical Section) (0) | 2024.06.02 |
[운영체제] 멀티 프로세스와 PCB (1) | 2024.06.02 |
[운영체제] 프로세스 & 스레드 (0) | 2024.06.02 |