동시성, 병렬성
동시성
Task들이 빠르게 전환되어 실행되면서 동시에 실행되는 것처럼 보이는 것
- 유휴상태를 최소화 하는데에 목적이 있다.
- 싱글코어, 멀티코어 모두에 해당하는 개념
- 동기화 문제가 나타날 수 있다.
- Race Condition, Dead Lock, Starvation 등
병렬성
물리적인 시간에서 작업이 동시에 실행되는 것
프로세스 동기화란?
하나의 자원을 한 순간에 하나의 프로세스만이 이용하도록 제어하는 것
임계 영역(Critical Section)
임계 구역은 둘 이상의 프로세스가 동시에 접근해서는 안 되는 공유 자원(자료 구조 또는 장치)에 접근하는 코드의 일부를 말한다.
경쟁상태 (Race Condition)
경쟁 조건은 2개 이상의 프로세스가 공유 자원을 병행적으로 읽거나 쓰는 상황을 말하며, 공유 자원 접근 순서에 따라 실행 결과가 달라지는 상황을 말한다. 즉, 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태를 말하는 것이다. (동시성 문제라고도 한다.)
- 어떻게 해결할 수 있을까?
- Mutual Exclusion (상호 배제)
- Progress (진행)
- 한 임계구역에 접근하는 쓰레드를 결정하는 것은 유한 시간 이내에 이루어져야한다.
- 누가 먼저 들어갈 것인지 빠르게 결정한다.
- Bounded waiting (유한대기)
- 임계구역으로 진입하기 위해 대기하는 모든 쓰레드는 유한 시간 이내에 해당 임계구역으로 진입할 수 있어야 한다.
- 기다리는 모든 쓰레드가 진입가능하도록 만든다.
상호 배제 (Mutual Exclusion)
특정 프로세스가 공유자원을 사용하고 있을 경우, 다른 프로세스가 해당 공유 자원을 사용하지 못하게 제어하는 기법
- 여러 프로세스가 동시에 공유자원을 사용할 때, 각 프로세스가 번갈아가며 자원을 사용하게끔 임계 구역을 유지.
- 대표적인 기법으로 Mutex, Semaphore가 있다.
- 그 외에 피터슨의 알고리즘, 다익스트라 알고리즘 등의 기법이 있다.
뮤텍스 (Mutex)
여러 프로세스를 실행하는 환경에서 자원에 대한 접근 제한을 위한 동기화 메커니즘
- 상호 배제의 약자로 락이라고도 한다.
- 상호 배제 동시성 제어 정책을 시행하도록 설계
- lock, unlock 연산만을 지원하면 된다.
세마포어 (Semaphore)
두개의 원자적 함수로 제어되는 정수 변수로 멀티프로그래밍 환경에서 공유자원에 대한 접근 제어를 하는 방법
뮤텍스와 세마포어 차이
- Mutex는 동기화 대상이 오직 1개일 때 사용하며, Semaphore는 동기화 대상이 1개 이상일 때 사용한다.
- Mutex는 자원을 소유할 수 있고, 책임을 가지는 반면 Semaphore는 자원 소유가 불가하다.
- Mutex는 상태가 0, 1 뿐이므로 Lock을 가질 수 있고, 소유하고 있는 스레드만이 이 Mutex를 해제할 수 있다. 반면 Semaphore는 Semaphore를 소유하지 않는 스레드가 Semaphore를 해제할 수 있다.
- Semaphore는 시스템 범위에 걸쳐 있고, 파일 시스템 상의 파일로 존재한다. 반면, Mutex는 프로세스의 범위를 가지며 프로세스 종료될 때 자동으로 Clean up 된다.
모니터
mutual exclusion과 cooperation을 통해 스레드 간의 안전한 공유자원 접근을 보장하는데 사용되는 자료구조

- 모니터는 공유 자원 + 공유 자원 접근함수로 이루어져 있고, 2개의 큐를 가지고 있다.
- 각각 mutual exclusion(상호배타) queue, conditional synchronization(조건동기) queue이다.
데드락
운영체제 또는 소프트웨어의 잘못된 자원 관리로 인하여 둘 이상의 프로세스 또는 스레드들이 아무것도 진행하지 않는 상태
-
발생조건은?
- 상호 배제 (Mutual exclusion)
- 점유 상태로 대기 (Hold and wait)
- 선점 불가 (No preemption)
- 순환성 대기 (Circular wait)
-
어떻게 해결할 수 있을까?
- 예방
- 회피
- 리소스 할당의 측면에서, 교착상태가 발생할 가능성이 있는 자원 할당(unsafe allocation)을 하지 않는다.
- 은행원 알고리즘이 있다.
- 탐지 및 회복
- 탐지 알고리즘으로 은행원 알고리즘, 대기 그래프 등을 활용 이후 교착 상태를 일으킨 프로세스를 종료하거나, 할당된 자원을 해제함으로써 복구