프로세스 동기화
- 서로 관련된 프로세스들의 실행 순서와 자원의 일관성을 보장하는 작업
- 실행의 흐름을 갖는 것(프로세스, 스레드 포함)을 대상으로 한다.
- 특정 자원에 접근할 때 한 개의 프로세스만 접근하게 하거나, 프로세스를 올바른 순서대로 실행하게 하는 것
- 실행 순서 제어 : 프로세스를 올바른 순서로 실행
- 상호 배제 (mutual exclusion) : 동시에 접근하면 안되는 자원에 하나의 프로세스만 접근
공유 자원 (shared resource)
- 전역 변수, 파일, 입출력장치, 보조기억장치 등
임계 구역 (critical section)
- ‘동시에 실행하면 문제가 발생하는 자원’에 접근하는 코드 영역
- 2개 이상의 프로세스가 임계 구역에 진입하고자 하면 진입한 프로세스를 제외한 나머지 프로세스는 대기해야 한다.
- race condition : 잘못된 실행으로 인해 여러 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하여 문제가 발생하는 경우
- e.g.
- 고급 언어는 실행 과정에서 저급 언어로 변환되어 실행된다.
count++
→ register = count; register = register + 1; count = register;
- 실제 실행 시에는 하나의 명령어가 아닐 수 있기 때문에 중간에 context switching이 발생할 수 있다. (연산이 원자화되어 있지 않다.)
- 상호 배제를 위한 동기화의 원칙
- 상호 배제 (mutual exclusion) : 하나의 프로세스가 임계 구역에 진입했다면 다른 프로세스는 임계 구역에 들어갈 수 없다.
- 진행 (progress) : 임계 구역에 어떤 프로세스도 진입하지 않았다면 진입할 수 있어야 한다.
- 유한 대기 (bounded waiting) : 한 프로세스가 임계 구역에 진입하고 싶다면 그 프로세스는 언젠가 임계 구역에 진입할 수 있어야 한다.
동기화 기법
- mutex lock (mutual exclusion lock)
- semaphore
- monitor