Semaphore
정의
두 개의 P연산과 V연산으로, CPU에서 병렬 처리 시에 Process들간 실행 시간 순서를 결정하는 연산 방식을 뜻합니다.
임계 영역을 사이에 두고 점유 여부를 통해 실행 중인 Process의 유무를 따질 수 있게 하여 '상호 배제 기법'을 구현합니다.
P연산과 V연산
실행 순서는 대충
프로세스A의 P연산 -> 프로세스A의 V연산 -> 프로세스B의 P연산 -> 프로세스B의 V연산 순서로 진행됩니다.
Semaphore의 유형
이진 세마포어(Binary Semaphore) 와 계수 세마포어(Counting Semaphore)로 구분됩니다.
Binary Semaphore는 Semaphore변수가 0 또는 1 값만 갖습니다.
반면,
Counting Semaphore는 Semaphore변수로 0 이상의 모든 정수 값을 가질 수 있습니다.
Counting Semaphore는 Binary Semaphore에 비해 생산자/소비자 문제 즉, 프로세스 내 자원의 다양성을 반영한 동기화 방식의 운영이 가능하게 하는 장점이 있습니다.
다른 동기화 기법인 뮤텍스 ? (MUTEX)
뮤텍스는 한 Thread만 할당이 가능하지만(그 시점에 한 개 프로세스만 실행 가능),
세마포어는 사용 가능한 자원은 Counting하게 하여 여러 자원 사용이 가능합니다.(Counting Semaphore의 경우)
연산 방식도 당연히 다른데, 뮤텍스는 Locking/Unlocking의 개념, 세마포어는 P연산, V연산 개념을 사용합니다.
또다른 동기화 기법인 모니터? (Monitor)
모니터는 세마포어와 같이 상호배제기능을 제공합니다. 세마포어와 같은 동시성 제어 기법입니다. 그러나 이에 더해 세마포어의 타이밍 오류를 해결해 개발 편의성을 보완한 기법입ㄴ디ㅏ.
세마포어는 모니터의 개념 근간이 됩니다. 모니터는 세마포어의 단점을 해결했습니다.
모니터의 구성
2개의 queue로 이루어졌고, Thread 한 개만 공유 자원 접근 함수 이용 가능합니다.
배타 큐, 조건 큐
'Thing about programming' 카테고리의 다른 글
Dynamic Programming 이란? (0) | 2023.02.06 |
---|---|
프로세스 동기화와 문맥교환 part 4 - (2) (0) | 2023.02.06 |
개발자의 기본기 | Git & GitHub, ESLint, Prettier, husky, Git hook, Agile (0) | 2022.08.25 |