반응형
동기화 : 실행 순서와 자원의 일관성을 보장
- 프로세스들간의 수행 시기를 맞추는 것
- 실행 순서 제어 : 프로세스를 올바른 순서대로 실행하기
- 동시에 실행되는 프로세스를 올바르게 순서대로 실행하지 않으면 값이 꼬이기 때문에 실행 순서 제어를 해줘야 한다.
- 상호 배제 : 동시에 접근해서는 안되는 자원에 하나의 프로세스만 접근하게 하기
- A, B 프로세스가 D = 10이라는 자원에 접근을 하는데 A는 2를 더해주고, B는 10을 더해준다고 생각해보자
- A = D + 2, B = D + 10 을 해주는데 순서대로허면 10 -> 12 -> 22가 된다.
- 하지만 동시에 접근하면 10 -> 12 -> 20 이렇게 D에 동시에 접근하게 되서 이상한 값이 된다.
- 그래서 다른 프로세스가 접근하면 또 다른 프로세스는 대기 해야 한다.
- 이러한 자원 하나에 접근하는 것, 전역 변수를 부르는 말은 공유 자원이라고도 한다.
- 공유자원은 전역변수, 파일, 입출력장치, 보조기억장치 등이 될 수 있다.
- 임계 구역 : 동시에 실핼하면 문제가 발생하는 자원에 접근하는 코드 영역
- 임계 구역의 코드를 실행하여 문제가 발생하는 경우를 레이스 컨디션이라고 한다.
- 실행 순서 제어 : 프로세스를 올바른 순서대로 실행하기
대표적인 도구 3가지
- 뮤텍스 락 : 임계구역을 자물쇠로 잠궈두고, 다른 프로세스가 접근하려고 할 때 잠겨 있으면 대기하고, 잠겨있지 않다면 임계구역에 접근하는 법
- 세마포 : 뮤텍스 락과 비슷하지만 잠궈야 할 문이 여러개라면? 프로세스는 임계구역에 들어가기 전 signal을 받아서 제어를 한다.
- 모니터 : 인터페이스(통로)를 묶어 관리한다. 모니터를 통해 자원에 접근하고자 하는 프로세스를 큐에 삽입하고, 큐에 삽입된 순서대로 하나씩 공유 자원을 이용하도록 한다. 세마포와 마찬가지로 일시 중단하기 위한 조건 변수를 사용해 프로세스나 스레드의 실행 순서를 제어한다.
반응형