세마포어

GGOMG·2022년 10월 5일
0

Computer Science

목록 보기
13/19
post-custom-banner

세마포어란?

데이스트라가 고안한, 두 개의 원자적 함수로 조작되는 정수 변수
멀티프로그래밍 환경에서 공유 자원에 대한 접근을 제한하는 방법
모든 교착상태를 해결하지는 못한다.

  • 세마포어 S는 정수값을 가지는 변수
    P, S 명령에 의해서만 접근할 수 있다.
  • P는 임계구역에 들어가기 전에 수행되고, V는 임계구역에서 나올 때 수행된다
  • 변수 값을 수정하는 연산은 원자성을 만족해야 한다.
    한 프로세스(스레드)에서 세마포어 값을 변경하는 동안 다른 프로세스가 동시에 이 값을 변경할 수 없다.

방법 1. 바쁜 대기

def P(S):
    while S<=0:
        pass
    S-=1
    
def V(S):
	S+=1
  • 최초로 제시된 방법. 임계구역에 들어갈 때 까지 반복문을 계속 수행하기 때문에 효율이 떨어진다.
  • 대기중인 프로세스 들 중 어느 것을 먼저 임계구역에 진입시킬지를 결정할 수 없다.

방법 2. 재움 큐

def P(S):
    S-=1
    if S<0:
        queue.add(process)

def V(S):
    S+=1
    if S<=0
        queue.remove(process)
  • 방법 1을 보완, 큐를 활용하여 프로세스를 재운다.
post-custom-banner

0개의 댓글