동기화 문제가 왜 발생하는지에 대해서는 [전공생이 설명하는 OS] 쓰레드(Thread)와 동기화 문제 의 마지막 단락을 참고해주세요.
[동기화 관련 용어]
(1) Race Condition
: 멀티쓰레드 또는 멀티 프로세스 환경에서 공유자원에 동시에 접근할 때, 의도치 않은 결과를 낳는 것을 race condition이라고 하고 다음과 같은 특성을 갖는다. 근본적으로는 [cpu 스케줄링 + 캐시(레지스터 포함) + non-atomic instruction] 때문에 발생하며, 이를 방지하기 위해서는 공유자원에 대한 동기화가 필요하다.
- Non-Deterministic : 의도하지 않은 결과를 내는데, 결과를 예측할 수 없다.
- Reproducible : 재현 가능하다.
(2) Critical Section
: 공유자원에 접근하는 코드 영역이다. 동기화 문제는 결국 이 critical section 을 어떻게 다루는가에 대한 문제로 볼 수 있다. 크게는 상호배제(mutual exclusion) 전략과 조건동기화(conditional synchronization) 전략 두가지로 나눌 수 있다. 참고로 공유자원에 대해서 read-only 만 수행한다면 race condition은 발생하지 않는다.
(3) Mutual Exclusion
: 상호 배제라는 뜻으로, critical section을 수행하는 실행흐름(thread or process)은 단 한 개로 한정되어야한다는 뜻이다. 다른 말로는 공유자원에 접근할 때 동시에 여러개의 프로세스나 스레드가 접근할 수 없도록 제한하는 방식이다.
(4) Conditional Synchronization
: 조건부 동기화 방식으로 특정 조건에서만 공유자원에 접근할 수 있도록 제한하는 방식이다.
[Critical Section Problem]
동기화 문제를 해결한다는 것은, 임계영역에 대한 접근을 잘 제어한다는 것이다. 구체적으로는 아래의 3가지를 만족시켜야한다.
- Mutual Exclusion (상호 배제)
: 임계 영역에 접근하는 실행흐름(process/thread)은 동시에 둘 이상이 될 수 없다. - Progress (진행)
: 임계 영역을 아무도 실행하고 있지 않을 때, 무제한 대기하지 않고 임계영역으로 들어갈 수 있어야한다. deadlock 상황을 예로 들 수 있다. - Bounded Waiting (한정 대기)
: starvation 이 발생하면 안된다. 즉 공유자원에 대한 access 요청을 했는데, 다른 프로세스들은 계속 접근하면서, 특정 프로세스만 무한정 대기하고 있으면 안된다. 공유자원 요청을 하면 언제가는 해당 자원을 할당 받을 수 있어야한다.
위에서 언급했다시피, 동기화 전략에는 (1) 상호배제, (2) 조건부 동기화 두가지가 있다. 다음 포스팅에서는 상호배제를 이용한 동기화 전략을 살펴보도록 하겠다..
'CS > Operating System' 카테고리의 다른 글
[전공생이 설명하는 OS] 동기화 - (3) 조건동기화 (pthread 예제 코드 포함) (0) | 2022.05.22 |
---|---|
[전공생이 설명하는 OS] 동기화 - (2) 상호배제 전략 (Mutex) (0) | 2022.05.19 |
[전공생이 설명하는 OS] 쓰레드(Thread)와 동기화 문제 (3) | 2022.04.28 |
[전공생이 설명하는 OS] 멀티 코어 프로세스 스케줄링 (0) | 2022.04.28 |
[전공생이 설명하는 OS] 프로세스 스케줄링(feat. 알고리즘 장단점 비교) (0) | 2022.04.28 |