1. 프로세스/스레드 동기화
동기화란 어느 공유자원에 대해 프로세스/스레드가 동시에 그 자원에 접근해서 작업하는것을 제어하는것을 말한다.
즉, 데이터의 일관성을 위해 프로세스/스레드 동기화가 필요하다.
동기화가 필요한 이유에 대해 아래에서 알아보자.
2. 동기화가 필요한 이유(경쟁 상태)
경쟁 상태는 상호배제를 하지 않았을때 일어나는 현상을 말한다.
동기화에서 "자원에 접근해서 작업 하는것을 제어하는것" 은 "프로세스/스레드의 상호배제를 고려한다." 고 볼수 있다.
이말은 프로세스/스레드 동기화가 없으면 경쟁 상태가 일어나게 되고 접근 순서에 따라 데이터의 결과 값이 달라지기 때문에 결국엔 데이터의 일관성이 깨지게 된다.
그렇다면 경쟁상태가 일어나지 않게 하기 위해선 어떻게 해야할까?
(참고 - 경쟁상태란 : https://record-developer.tistory.com/77)
3. 임계 영역
경쟁상태 발생을 억제하기 위해서 임계 영역을 정의할 필요가 있다.
임계영역이란 여러 프로세스/스레드가 접근하려는 공유자원에 대한 코드 부분을 말하는데 이를 정의해 줘야한다.
그리고 결국 여러개의 프로세스/스레드가 공유자원을 사용하기 위해 임계영역에 접근하게 되는데 이때 정의한 임계영역에 대해 프로세스/스레드가 차근차근 접근 할수 있도록 조건을 줘야한다.
- 상호배제
한번에 두개 이상의 프로세스/스레드가 접근할수 없다. 즉, 오직한개만 접근 가능하다. - 진행
임계영역에 프로세스/스레드가 존재하지 않을땐 임계영역에 접근하여 작업할 수 있다. - 한정된 대기
현재 진행중인 프로세스/스레드를 제외하고 임계영역에 접근 대기중인 프로세스/스레드가 있을때 무한대기를 방지함으로써 기아현상이 일어나지 않도록 한다.
이때 대기중인 프로세스/스레드에서 이미 한번이상 임계구역에서 실행을 했던 것들의 우선순위는 뒤로 밀리게 된다.
4. 임계 영역 문제 해결방안
임계 영역의 문제를 해결하는데 3가지 방안이 존재한다.
- 피터슨 해결방안
뮤텍스와 세마포어랑 다르게 오로지 2개의 프로세스/스레드가 공유자원에 접근하려고 할때를 고려한 해결방안 이다.(바쁜 대기?)(추가중) - 뮤텍스와 세마포어
뮤텍스와 세마포어는 둘다 공유자원 관리를 위한 상호배제 기법중 하나이다.
뮤텍스와 세마포어 둘다 여러개의 프로세스/스레드가 임계구역에 동시에 접근하는 것을 막음으로써 데이터의 일관성을 유지시킨다.
다만
뮤텍스의 경우 임계영역에 접근한 프로세스/스레드는 lock을 걸어 다른 프로세스/스레드가 접근하지 못도록하고 작업이 끝난 프로세스/스레드는 걸었던 lock을 직접 unlock하면서 임계영역을 빠져나오게 된다. 그 후 대기중인 다른 프로세스/스레드는 임계영역에 접근이 가능하다.
세마포어의 경우 세마포어값에 따라 프로세스/스레드의 임계영역 접근을 막는다.
세마포어 값은 세마포어 함수인 wait(), signal()로 이루어져 있고 wait()는 세마포어값을 1 감소, signal()은 세마포어값을 1 증가시키면서 값의 변동을 준다.
이때, 세마포어값이 0보다 작으면 프로세스/스레드의 임계영역 접근을 제한하고, 1보다 크거나 같게되면 임계영역 접근을 허락하는 원리다. 또한 뮤텍스와 다르게 세마포어값은 현재 작업이 끝난 프로세스/스레드가 아닌 대기중인 프로세스/스레드가 signal()함수를 실행함으로써 임계영역 접근의 여부를 결정할 수 있다.
(참고 - 뮤텍스와 세마포어 : https://record-developer.tistory.com/56)
'OS(운영체제) > 프로세스' 카테고리의 다른 글
[운영체제] 프로세스 - 사용자 수준의 스레드와 커널 수준의 스레드의 차이? (0) | 2022.02.02 |
---|---|
[운영체제] 프로세스 - 경쟁 상태란? (1) | 2022.01.13 |
[운영체제] 프로세스 - 컨텍스트 스위칭이란? (0) | 2022.01.11 |
[운영체제] 프로세스 - 뮤텍스와 세마포어 차이 (0) | 2021.12.13 |
[운영체제] 프로세스 - 교착상태와 해결방안 (0) | 2021.12.09 |