본문 바로가기
IT기술노트/컴퓨터구조 및 운영체제

세마포어 (Semaphore)

by 비트코기 2022. 7. 28.

I. 상호배제를 이용한 동기화 기법, 세마포어의 개념

- 멀티프로그래밍 환경에서 공유 자원 사용을 위한 경쟁 시 정적 변수를 사용하여 공유 자원에 대한 접근을 제한하는 기법

- 특징 : 동시성 제어, 정적 변수 사용


II. 세마포어의 유형 및 동작원리

가. 세마포어의 유형

유형 설명
이진 세마포어
(Binary)
- 정적변수는 0 또는 1 의 값만 할당 가능한 세마포어
- 구현이 간단하고, Test and Set 등 하드웨어가 지원하는 기능을 이용하여 구현 가능
계수형 세마포어
(Counter)
- 사용 가능한 자원의 수로 초기값 설정
- 세마포어 값의 범위 미결정

- 세마포어의 정적변수 범위에 따라 이진 세마포어와 계수형 세마포어로 구분

나. 세마포어의 동작원리

동작 설명
변수 초기화 - 사용가능한 자원의 수만큼 정적변수 S 를 초기화
P 연산 - 잠금을 수행하는 코드로 S 가 0 보다 크면 1 만큼 감소 시키고 임계영역 진입
- S 가 0 보다 작으면 0 보다 커질때까지 대기
V 연산 - 잠금 해제와 동기화를 같이 수행하는 코드로 S 값을 1 증가
- 세마포어에서 대기 중인 프로세스에게 임계영역에 진입하도록 신호 전달

- 세마포어는 타이밍 문제가 발생 가능하며 이를 해결하기 위해 모니터 기법을 사용

 

III. 세마포어와 모니터의 상호관계 및 비교

가. 세마포어와 모니터의 상호관계

- 세마포어는 모니터에 이론적 기반을 제공하고, 모니터는 세마포어의 타이밍 문제를 해결

나. 세마포어와 모니터의 비교

구분 세마포어 모니터
주체 - 운영체제, 개발자 주체의 동시성 지원 - 프로그래밍 언어 수준의 동시성 제어
상호작용 - 모니터의 이론적 기반 제공 - 세마포어의 타이밍 문제해결
연산방식 - P 연산, V 연산 - wait 연산, signal 연산
접근방식 - 직접 공유자원 접근처리를 구현 - 캡슐화된 함수를 호출하여 공유자원 접근
특징 - 이진, 계수형 세마포어로 구분
- 부정확하게 사용시 타이밍 오류 발생
- 상호배제 위반, 교착상태 발생 가능 존재
- 하나의 프로세스만 모니터 내부에서 수행
- 프로그래밍 언어의 일부로 구현 (캡슐화)
- 컴파일러에서 모니터 기능을 제공해야 사용

- 세마포어와 모니터는 동시성 제어를 수행하는 기법이라는 공통점을 갖고 있음

반응형

댓글