[Site Map]  [운영체제 및 구조 목차]

 

연관토픽

  1. [상위] 동기화 기법
  2. [상위] 상호배제(Mutual Exclusive)
  3. [연관] 모니터(Monitor)
  4. [연관] 스핀락(Read/Write Spin Lock)
  5. [연관] 뮤텍스(Mutex)

 

 

 

기출문제

회차 문제
응용132-1 4. 세마포어(Semaphore)의 개념과 주요 연산(P 연산, V 연산)
관리122-1 1. 세마포어(Semaphore)와 모니터(Monitor)
응용108-3 4. 세마포어(Semaphore)를 이용한 리소스 공유 방법과 태스크간 동기화 방법에 대하여 설명하시오.

 

 

 

개념

  • 다중 프로세서의 공유자원 경쟁시, 공유자원 접근제어를 통해 상호배제, 동기화 지원 메커니즘
  • 다중프로세스 환경에서 공유 자원에 대한 소유권을 표시, 해제(자원 접근제한)하는 자원 동기화 기법
  • 1965년 다익스트라가 제안, 세마포어는 상호배제 + 다양한 연산 순서 제공

 

 

 

세마포어의 유형

구분 설명
이진(binary) 변수가 0/1 값을 가짐, 상호배제/프로세스 동기화에 사용, 프로세스 간 순서 제어 가능
계수형(counter) 변수가 0 이상의 정수 값, 자원 Pool 할당, 초기값=자원 수, 생산자/소비자 문제 해결

 

 

 

세마포어 연산

P 연산(wait) V 연산(Signal)
WHILE S <= 0 Do skip
//다른 프로세스가 사용 중(S<=0)이면 기다림

S = S-1;
//다른 프로세스가 사용 끝내면 이 코드로 진입,

내가 쓰겠다고 알림
S=S+1. // 자원 사용이 끝났음을 알림
- 프로세스를 대기하게 하는 wait 동작
- 프로세스 진입 결정(임계영역에 진입하는 연산)
- 대기 중 프로세스 깨우려고 신호를 보내는 signal 동작
- wake up(임계영역에서 나오는 연산) 
  • P와 V 연산을 종료할 때까지는 다른 프로세스가 두 연산을 수행하지 않도록 조정
  • 세마포어는 모든 프로세스가 1 로 초기화한 세마포어를 공유하고, 임계 영역 진입하기 전에 Signal 연산을 실행한 후 Wait 연산을 실행해야 하는데, 순서를 따르지 않을 경우 두 프로세스가 동시에 임계 영역에 존재할 수 있어 상호배제를 위반하거나 교착 상태가 발생할 수 있는 취약점이 발생, 모니터는 이런 단점을 극복

 

 

 

세마포어를 이용한 리소스 공유 메커니즘

  • N개의 TaskM개의 Resource를 공유할 때, 세마포어(계수형) 초기값을 N개로 설정

  • Task 가 세마포어를 획득하여도 Mutex 를 획득해야 리소스 접근 가능

 

 

 

세마포어를 이용한 태스크 간 동기화 방법

  • 태스크 간 동기화는 여러 태스크가 공유 자원에 접근할 경우 동일한 값을 얻을 수 있도록 조정(Sync)
  • 계수형 세마포어의 경우 태스크A 전처리 결과에 따라 계수 증가, 태스크는 누적된 계수만큼 처리
  1. Task A가 동기화 전처리 시작
  2. Task B는 동기화 세마포어가 POST 시그널 줄 때까지 wait
  3. Task A가 동기화 전처리 완료
  4. Task A, Task B 동기화 완료

 

 

 

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

  • 세마포어는 모니터에 이론적 기반을 제공하고, 모니터는 세마포어의 타이밍 문제를 보완하여 동시성 제어를 위한 상호작용을 지원함

 

 

 

세마포어 vs. 모니터

구분 세마포어 모니터
주체 운영체제, 개발자 주체의 동시성 지원 프로그래밍 언어 수준의 동시성 지원
상호작용 모니터의 이론적 기반 제공 세마포어의 단점인 타이밍 오류 문제 해결
특징 S의 타입에 따라 Binary/Couinting 세마포어로 구분 한 시점에 하나의 프로세스만 모니터 내부에서 수행
구현방법 Semaphores S;
P (S) ; // 검사역할, S-- 

임계구역 ()
V (S); // 증가역할, S++
Monitor monitor-name 
{ //지역변수선언
Public entry p1(...) { } 

Public entry p2(...) { }
}
연산방식 P, V연산 X.Wait, Y.Signal 연산
공유자원 접근 직접 키의 해제와 공유자원 접근처리를 구현 공유자원 접근할 수 있는 키의 획득과 해제를 모두 처리
실행재개 V연산으로 사용자가 지연 없이 실행을 재개 - Signal연산으로 모니터의 잠금을 해제할 때만 다시 시작
- 병렬 프로그래밍에서 세마포어보다 더 오류가 적고 쉽게 작성의 장점 존재
단점 - 부정확하게 사용시 탐지 곤란한 타이밍 오류 발생
- 상호배제를 위반하거나 교착 상태가 발생할 수 있는 취약점 존재 (하나의 오류가 전체 시스템에 악영향 가능)
- 프로그래밍 언어의 일부로 구현하고, 컴파일러가 그 코드를 생성해야 함. 이는 컴파일러가 병행 프로세스에서 임계 영역에 접근을 제어할 수 있는 운영체제를 이해 해야 하는 부담 
- 자바,C#,비주얼베이직,에이다등 언어만 지원
  • 세마포어는 모니터에 이론적 기반을 제공하고, 모니터는 세마포어의 타이밍 문제를 보완하여 동시성 제어를 위한 상호작용 지원

 

 

 

모범답안

  1. [답안] 세마포어 vs. 뮤텍스(1교시)

 

 

+ Recent posts