세마포어
설명 영상 세마포어 (Semaphore) · 2:50
왜 배우는가: 세마포어는 공유 자원 접근과 태스크 간 순서를 제어하는 가장 기본적인 동기화 도구이며, 운영체제·임베디드·멀티스레드 프로그래밍 전반에서 쓰인다. 교착 상태, 우선순위 역전 등 동기화 문제의 출발점이라 시험에서 개념 정의와 P·V 연산을 묻는 문제로 반복 출제된다.
출제 이력: 제132회 1교시 4번, 제126회 1교시 9번, 제108회 3교시 4번
1. 한 줄 정의와 핵심 키워드
세마포어는 정수형 공유 변수 S와 원자적 연산 P(wait), V(signal)로 공유 자원 접근을 제어하는 동기화 기법이다.
- 세마포어(Semaphore)
- P연산(wait)
- V연산(signal)
- 원자적 연산(atomic operation)
- 카운팅 세마포어(Counting Semaphore)
- 이진 세마포어(Binary Semaphore)
- 임계구역(Critical Section)
- 상호배제(Mutual Exclusion)
2. 개념 풀이
세마포어는 열쇠 개수를 세는 계수기에 비유할 수 있다. 사용 가능한 열쇠가 남아 있으면 들어가고, 없으면 밖에서 기다린다. 열쇠를 반납하면 기다리던 사람 한 명이 들어간다.
세마포어는 다익스트라(Dijkstra)가 제안한 동기화 기법이다. 하나의 정수 변수 S와 이 변수를 조작하는 두 연산으로 구성된다. 변수 S는 자원 사용 가능 수를 나타내며, 초기값은 시스템에서 허용하는 동시 접근 수로 정한다. 세마포어 변수는 초기화 연산과 P, V 연산으로만 접근한다.
P연산(wait) 은 자원을 얻으려는 연산이다. S값이 0보다 크면 S를 1 감소시키고 임계구역에 진입한다. S값이 0 이하이면 호출한 프로세스를 블록(block)하여 대기 큐에 넣는다.
V연산(signal) 은 자원을 반납하는 연산이다. S값을 1 증가시키고, 대기 큐에 프로세스가 있으면 하나를 깨워 자원을 넘긴다.
원자적 연산(atomic operation) 은 P와 V가 중간에 끼어들 수 없이 한 번에 실행된다는 뜻이다. 이 조건이 깨지면 S값 갱신에서 경쟁 조건이 생긴다. 그래서 P와 V 자체가 동기화되어야 세마포어가 성립한다.
카운팅 세마포어(Counting Semaphore) 는 S가 0 이상의 임의 정수를 가질 수 있는 형태다. 자원이 여러 개인 경우, 예를 들어 DB 연결 풀이나 스레드 풀에 쓴다. 이진 세마포어(Binary Semaphore) 는 S가 0 또는 1만 갖는다. 이 경우 상호배제 용도로 쓰이며, 뮤텍스와 비슷한 역할을 한다. 이진 세마포어로 계수 세마포어를 구현할 수도 있다.
임계구역(Critical Section) 은 여러 프로세스가 공유하는 자원을 접근하는 코드 영역이다. 세마포어는 이 영역에 한 번에 들어갈 수 있는 프로세스 수를 제한한다.
3. 등장 배경과 필요성
멀티프로그래밍 환경에서 여러 프로세스나 스레드가 같은 데이터를 동시에 갱신하면 결과가 실행 순서에 따라 달라진다. 이를 경쟁 조건(race condition)이라 한다. 공유 자원을 보호하려면 한 시점에 하나의 프로세스만 임계구역에 들어가도록 제어해야 한다.
초기 방법으로 소프트웨어 해법이 제시되었으나 구현이 복잡하고 하드웨어 명령에 의존했다. 세마포어는 정수 변수와 두 연산만으로 상호배제, 자원 개수 관리, 실행 순서 제어를 모두 표현할 수 있게 했다. 그래서 운영체제 커널과 실시간 운영체제에서 기본 동기화 도구로 자리 잡았다.
이어지는 내용
- 4. 구성요소·원리·절차
- 5. 관련 법령·기준·표준
- 6. 유형과 비교
- 7. 장단점·한계와 개선 방향
- 8. 사례 또는 계산 예제
- 9. 최근 동향과 쟁점
- 10. 흔한 실수와 채점 포인트
- 11. 암기 정리
- 12. 답안 구성 예시
- 13. 예상 변형 문항
로그인하면 하루 5페이지까지 무료로 전체를 읽을 수 있습니다.
앱에서 이 단원 읽기