Process synchronization
프로세스 동기화
Apr 09, 2024
동기화의 의미
- 특정 자원에 접근할 때 한 개의 프로세스만 접근하게 하거나, 프로세스를 올바른 순서대로 실행하게 하는 것
실행 순서 제어를 위한 동기화
동시에 실행되는 프로세스를 올바른 순서대로 실행하는 것
상호 배제를 위한 동기화
공유가 불가능한 자원의 동시 사용을 피하기 위해 사용하는 알고리즘
생산자와 소비자 문제
- 공유된 버퍼나 큐와 같은 자원을 여러 생산자와 소비자가 동시에 접근할 때 발생하는 문제를 다룸
- 생산자는 자원을 생성하고 큐에 넣고, 소비자는 큐에서 자원을 제거하여 사용
- 생산자와 소비자 프로세스가 제대로 동기화되지 않으면 레이스 컨디션이나 버퍼 오버플로우 등의 문제가 발생할 수 있음
공유 자원과 임계 구역
공유 자원
- 여러 프로세스가 접근할 수 있는 자원
- 공유 자원은 데이터나 장치를 가리킴
- 여러 프로세스가 동시에 공유 자원에 접근하려고 할 때, 동기화 문제가 발생할 수 있음
임계 구역
- 프로세스가 공유 자원에 접근하여 작업을 수행하는 부분
- 임계구역은 한 번에 하나의 프로세스만 접근가능하며 다른 프로세스는 임계구역에 진입하지 못해야함
- 레이스 컨디션(race conditon): 임계구역에 여러 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하여 문제가 발생하는 경우
프로세스 동기화의 세 가지 기본 요구사항
- 상호배제: 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 임계 구역에 들어올 수 없음
- 진행: 임계 구역에 어떤 프로세스도 진입하지 않았다면 임계 구역에 진입하고자하는 프로세스는 들어갈 수 있어야 함
- 유한 대기: 한 프로세스가 임계 구역에 진입하고 싶다면 그 프로세스는 언젠가는 임계구역에 들어올 수 있어야 함
동기화 기법
뮤텍스 락(Mutex Lock: MUTual Exclusion Lock)
- 임계 구역을 잠금으로써 프로세스 간의 상호 배제를 구현
- 공유 자원에 대한 접근을 제어하기 위한 상호배제를 구현하기 위해 사용됨
- lock(자물쇠 역할), acquire(임계 구역 잠그는 역할), release(임계구역 해제하는 역할)
세마포(Semaphore)
- 여러 개의 공유자원이 있을 경우 여러 개의 프로세스가 각각 공유자원에 접근 가능해야 함
- 전역변수 S(임계 구역에 진입할 수 있는 프로세스 개수), wait 함수(임계 구역에 진입가능한지 여부), signal 함수(진입 가능 신호)
- 임계 구역 앞뒤로 wait와 signal 함수 명시
모니터(Monitor)
- 주로 클래스나 구조체와 같은 방법을 사용하여 구현하고 복잡한 동기화 문제를 간단하게 해결할 수 있도록 함
- 공유 자원과 공유 자원에 접근하기 위한 인터페이스(통로)를 묶어 관리
- 프로세스는 반드시 인터페이스를 통해서만 공유 자원에 접근
- 공유 자원을 다루는 인터페이스에 접근하기 위한 큐를 만들고, 모니터 안에 항상 하나의 프로세스만 들어오도록하여 상호배제를 위한 동기화 제공
- 세마포와 마찬가지로 실행 순서 제어를 위한 동기화 제공
Go toor?