공유 자원: 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일
경쟁 상태 (race condition) : 2개이상의 프로세스가 공유자원을 병행적으로 일걱나 쓰는 상황, 타이밍이나 순서등이 결과 값에 영향을 줄 수 있다. (동시성 문제)
임계 구역 (Critical Section) : 공유 자원 접근 순서에 따라 실행 결과가 달라지는 프로그램의 코드 영역 (즉, 임계 구역 안에서 race condition 발생)
한 프로세스가 임계구역에 들어가면 다른 프로세스는 들어갈수 없다.
상호 배제 때문에 기다리는 프로세스가 무한대기하면 안된다.
임계구역에 프로세스가 없다면 어떤 프로세스라도 들어가서 자원활용 가능하다.
프로그램의 실행단위이며 하나의 프로세스는 여러개의 쓰레드로 구성이 가능하다.
하나의 프로세스를 구성하는 쓰레드들은 프로세스에 할당된 메모리, 자원을 공유 가능
프로세스과 같이 실행, 준비, 대기 등의 실행 상태를 가지며 상태변화가 될때마다 쓰레드 문맥교환을 수행 한다
쓰레드 동기화는 race condition을 피하기 위해 임계영역 내에서 상호배제를 제공하는 메커니즘이다!!!
여러개의 프로세스에 의해서 공유되는 자원의 접근 제어를 위한 도구, P와 V의 명령으로만 접근이 가능하다
(P : 임계구역 들어가기전 수행 (wait))
(V : 임계구역 나갈때 수행 (signal))
계수 세마포어 (Counting Semaphore)
general semaphore
초기 값은 가능한 자원의 수
세마포어의 값 범위는 0과 양의 정수, 여러개의 공유자원을 상호배재
이진 세마포어 (Binary Semaphore)
mutex locks
세마포어의 값 0 or 1
계수 세마포어 보다 간단, 한개의 공유자원을 상호배재
세마포어 연산은 처리중에 인터럽트 되면 안된다.