동기화/동기화기법
: 특정 자원에 접근할 때 한개의 프로세스만 접근하게 하기
: 프로세스들 사이의 수행 시기를 맞추는 것
- 실행 순서 제어를 위한 동기화
프로세스를 올바른 순서대로 실행하기
- 상호 배제를 위한 동기화
동시에 접근해서는 안되는 자원에 하나의 프로세스만 접근하게 하기
ex ) 생산자와 소비자 문제
: 프로세스나 스레드가 자신만의 독자적인 메모리 주소공간을 사용하지 않고 공유하는 메모리 주소공간이 있을 경우 발생하는 문제
⇒ count(총합)이란 데이터를 공유하고 있기에 문제
[상호 배제를 위한 동기화의 3가지 원칙]
- 상호배제 : 한 프로세스가 임계구역에 진입했다면 다른 프로세스는 임계 구역에 들어올 수 없다.
- 진행 : 임계 구역에 어떤 프로세스도 진입하지 않았다면 임계구역에 진입하고자 하는 프로세스는 들어갈 수 있어야 한다.
- 유한대기 : 한 프로세스가 임계구역에 진입하고 싶다면, 그 프로세느느 언젠가는 임계구역에 들어올 수 있어야한다.
: 전역변수, 파일, 입출력장치, 보조기억장치 등등 프로세스들이 동시에 사용하는 공동의 자원
동시에 시행하면 문제가 발생하는 자원(공유자원)에 접근하는 코드 영역
: 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하여 문제가 발생하는 경우
- 뮤텍스 락
- 세마포
- 모니터
동시에 접근해서는 안되는 자원에 동시에 접근하지 않도록 만드는 도구
: 하나의 공유 자원에 접근하는 프로세스를 상정한 방식
- 자물쇠 역할 : 프로세스들이 공유하는 전역 변수 lock
- 임계 구역을 잠그는 역할 : acquire 함수
- 임계 구역의 잠금을 해제하는 역할 : release 함수
문제점
- Busy Wait
프로세스가 반복적으로 임계 구역이 잠겨있는지 (lock)를 확인하는 문제
** 뮤텍스 락에 비해 일반화된 동기화 도구
: 공유자원이 여러개 있을 경우, 여러 개의 프로세스가 각각 공유 자원에 접근할 때
- 전역변수 S : 임계구역에 진입할 수 있는 프로세스의 개수 (= 사용 가능한 공유 자원의 개수)
- wait 함수(P) : 임계구역에 들어가도 좋은지, 기다려야 할지 알려주는 함수
- signal 함수(V) : 임계구역 앞에서 기다리는 함수에게 “들어가도 된다”고 신호를 주는 함수
[상호 배제를 위한 동기화]
문제점
- Busy Wait
프로세스가 반복적으로 임계 구역이 잠겨있는지 (lock)를 확인하는 문제
해결점
- wait함수는 사용할 수 있는 자원이 없을 경우 해당 프로세스 상태를 대기 상태로 만들고, 그 프로세스의 PCB를 세마포를 위한 대기 큐에 집어 넣는다.
- 다른 프로세스가 임계 구역에서의 작업이 끝나고 signal 함수를 호출하면 signal 함수는 대기 중인 프로세스를 대기 큐에서 제거하고, 프로세스 상태를 준비 상태로 변경한 뒤 준비큐로 옮긴다.

[실행 순서 제어를 위한 동기화]
: 세마포어 변수 S를 0으로 두고 먼저 실행할 프로세스 뒤에 signal 함수, 다음에 실행할 프로세스 앞에 wait 함수를 붙이기

** 매번 임계 구역 앞뒤로 일일이 wait와 signal함수를 명시하는 세마포에 비해 편리한 도구
[상호 배제를 위한 동기화]
: 공유 자원과 공유 자원에 접근하기 위한 인터페이스를 묶어서 관리 (프로세스 → 인터페이스 → 공유자원 접근가능)
[실행 순서 제어를 위한 동기화]
: 특정 조건을 바탕으로 프로세스를 실행하고 일시 중단하기 위해 조건변수(CV) 사용
- wait : 특정 프로세스가 아직 실행될 조건이 되지 않았을 때, wait을 통해 실행을 중단
- signal : 특정 프로세스가 실행될 조건이 충족되었을 때 signal을 통해 실행을 재개



Uploaded by N2T