프로세스 동기화
정의
- 협력하는 프로세스 사이에서 실행 순서 규칙을 정하여 공유 자원의 일관성을 보장하는 것
- 프로세스가 협력하며 공유자원을 사용하는 상황에서, 경쟁조건이 발생하면 공유자원을 신뢰할 수 없게 만들 수 있다. 이를 방지하기 위해 프로세스들이 공유 자원을 사용할 때 특별한 규칙을 만드는것이 프로세스 동기화
공유자원
- 여러 프로세스가 공동으로 사용하는 메모리, 파일등
경쟁상태
여러 프로세스(또는 스레드)가 공유자원에 동시에 접근할 때, 공유 자원에 대한 접근 순서에 따라 실행 결과가 달라질 수 있는 상황
발생하는 경우
- 커널 코드 실행중에 인터럽트가 발생할경우
- 프로세스가 시스템 콜을 하여 커널모드로 진입해서 작업을 수행하는 도중에 문맥 교환이 발생할 경우
- 멀티 프로세서에서 공유 메모리 내의 커널데이터에 접근할 경우
임계구역
- 여러 프로세스(또는 스레드)가 자원을 공유하는 상황에서, 하나의 프로세스(또는 스레드)만 접근할 수 있도록 제한해둔 코드 영역
피터슨 알고리즘
- 상호 배제를 위한 병렬 프로그래밍 알고리즘
- 공유 메모리를 활용하여 여러 개의 프로세스가 하나의 자원을 함께 사용할 때 문제가 발생하지 않도록 해준다.
flag
와turn
이라는 변수로 임계영역에 들어갈 프로세스를 결정하는 방식- flag : 프로세스중 누가 임계영역에 진입할 것인지 나타내는 변수
- turn : 누가 임계영역에 들어갈 차례인지 나타내는 변수
Mutex
- 상호배제를 뜻함
- 1개의 공유자원에 단하나의 프로세스만이 접근
- 공유 자원을 점유한 프로세스는 락(LOCK)를 지니며, 자원 사용을 마치면 락을 반납
Semaphore
- N개의 공유 자원에 N개의 프로세스만 접근 가능
- 남은 공유자원의 수 카운터를 사용함
- 프로세스는 임계구역에 진입하며 카운터 -1
- 카운터가 0 일때 다른 프로세스는 진입 불가
- 프로세스는 임계구역에서 나오면서 카운터 +1, Wake Up 신호를 보냄
- 대기 프로세스는 Sleep 상태가 된다
- 남은 공유자원의 수 카운터를 사용함
Monitor
- 세마포어보다 고수준 언어에서 사용되는 상호배제 기법
- 자바에서 동기화에 사용됨
- 배타동기 큐와 조건동기 큐가 사용된다
- 배타동기 큐는 하나의 프로세스만 공유자원에 접근할 수 있게 하는 작용을 하는 공간(공유 자원을 얻기위해 대기하는 큐)
- 조건동기 큐는 진입 프로세스가 블록되면서 새 프로세스가 진입 가능하게 하는 공간(블락되면서 대기하는 큐)
- 배타 동기는 synchronized 키워드를 사용해서 지정할 수 있다
- synchronized : 코드블록을 동기화시키는 제어자
- 조건동기는 wait(), notify(), notifyAll()함수를 사용
- wait() : 자원을 점유하던 프로세스를 block시키는 메소드
- notify() : 조건동기 큐의 block 상태 프로세스를 깨우는 메소드
- notifyAll() : 조건동기 큐의 모든 block 상태 프로세스를 깨우는 메소드