프로세스 동기화
정의 : 협력하는 프로세스 사이에서 실행 순서 규칙을 정해 공유 자원의 일관성을 보장하는 것.
(ex: 여러 프로세스가 동시에 하나의 공유된 자원에 접근하려고 할 때 이 프로세스들의 순서를 정해 데이터의 일관성을 유지시켜줘야 함.)
1. 경쟁 조건(Race Condition)
정의 : 공유된 자원의 둘 이상의 입력 또는 조작의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태.
* 여러 프로세스가 공유 데이터를 동시에 조작할 때, 실행의 특정 순서에 따라 결과가 달라지는 상황.
= 동시에 접근할 때 자료의 일관성을 해치는 결과가 나타남.
발생 조건
* 커널 작업 수행 중 인터럽트가 발생할 때
문제점 : 커널모드에서 데이터를 Load하여 작업을 수행하던 도중 인터럽트가 발생하여 같은 데이터를 조작하는 경우(인터럽트의 작업이 반영되지 않음)
해결법 : 커널모드에서 작업을 수행하는 동안, 인터럽트를 disable시켜 인터럽트가 CPU 제어권을 가져가지 못하도록 함.
* 프로세스가 system call하여 커널 모드로 진입하여 작업을 수행하는 도중 문맥 교환이 발생할 때
문제점 : 프로세스1이 커널모드에서 데이터를 조작하는 도중, 시간이 초과되어 CPU 제어권이 프로세스2로 넘어가 같은 데이터를 조작하는 경우(프로세스2의 작업이 반영되지 않음)
해결법 : 프로세스가 커널모드에서 작업하는 경우 시간이 초과되어도 CPU 제어권이 다른 프로세스에게 넘어가지 않도록 함.
* 멀티 프로세서에서 공유 메모리 내의 커널 데이터에 접근할 때
문제점 : Multi-Processor 환경에서 2개의 CPU가 동시에 커널 내부의 공유 데이터에 접근하여 조작하는 경우
해결법 : 커널 내부에 있는 각 공유 데이터에 접근할 때마다 데이터에 대한 lock/unlock하기
2. 임계 구역(Critical Section)
정의 : OS에서 여러 프로세스가 데이터를 공유하면서 수행될 때, 각 프로세스에서 공유 데이터를 액세스하는 프로그램 코드 부분을 뜻한다. 공유 자원의 독점을 보장해주는 역할.
프로그램적으로 해결하는 방법
* Mutual Exclusion(상호 배제)
프로세스1이 critical section을 수행 중이면 다른 모든 프로세스들은 해당 critical section에 접근할 수 없다.
* Progress (진행)
아무도 critical section에 있지 않다면, 들어가고자 하는 프로세스를 허용해줘야 함.
*Bounding Waiting(유한 대기)
프로세스가 critical section에 들어가기 위해 무한정으로 기다리는 형상(starvation)이 있으면 안됨.
피터슨 알고리즘
(설명 추가 필요)
3. 세마포어(Semaphore)
동시에 자원에 접근할 수 있는 허용 가능한 counter 갯수.
- 동기화 기법 중 추상적인 방법.
- 여러 프로세스들에 의해 공유되는 변수로 정의
- 변수는 오직 P()와 V()라는 Atomic한 연산에 의해서만 접근 가능.
- 리소스의 상태를 나타내는 카운터.
Busy-Wait 방식
프로세스 P가 자원이 모두 사용 중이면 wait하는 방식. 자원의 여유가 생기면 자원을 획득하고, 모두 사용했으면 자원을 반납한다.
Block-Wakeup방식
Critical Section의 길이가 긴 경우는 Block-wakeup방식이 유리하나, 임계 구역이 짧으면 잦은 문맥 교환으로 인해 오버헤드가 증가하게 되어 Busy-wait 방식이 유리하다.
Mutex
상호 배제를 뜻하며, Binary Semaphore과 같은 의미이다. 자원에 단 하나의 작업만 접근 가능하다는 뜻이다.
- Critical Section을 가진 스레드들의 Running Time이 겹치지 않게 각각 단독으로 실행되게 하는 기술이다. 다중 프로세스들의 공유 자원에 대한 접근을 조율하기 위해 lock과 unlock을 사용한다.
세마포어와 큰 차이점은 동기화 대상의 개수로, Mutex는 동기화 대상이 오직 하나일 때, 세마포어는 동기화 대상이 하나 이상일 때 사용한다.
4. Monitor
현재 제시된 세마포어의 문제점은 다음과 같다.
- 코딩하기 어려움
-correctness의 입증 어려움.
- voluntary cooperation이 필요.
- 한 번의 실수가 모든 시스템에 치명적 영향 미침.
모니터 내에서는 한 번에 하나의 프로세스만 활동이 가능하고, 동기화 제약 조건을 명시적으로 코딩할 필요가 없다. 또한 프로세스가 모니터 안에서 기다릴 수 있도록 Conditional Variable을 사용한다. (이는 wait/signal 연산에 의해서만 접근 가능하다.)
wait : 다른 프로세스가 signal 전까지 suspend됨.
signal : 하나의 suspend된 프로세스를 깨움.
Monitor / Semaphore
Monitor : 자체적으로 하나의 프로세스만 처리.
Semaphore : 직접 Lock 걸고 해제해야 함.
참조
https://kosaf04pyh.tistory.com/243
'이론 공부 내용 정리' 카테고리의 다른 글
OS-가상메모리1(용어 정의 및 특징 정리) (0) | 2021.07.19 |
---|---|
OS-메모리 관리 전략 (0) | 2021.07.19 |
OS4-스케줄러,CPU 스케줄러,동기와 비동기의 차이 (0) | 2021.06.10 |
운영체제1-프로세스vs스레드, 멀티스레드 (0) | 2021.05.27 |
네트워크3-로드밸런싱, 웹 통신의 큰 흐름 (0) | 2021.05.24 |