[운영체제] Mutex와 세마포어 (Semaphore)

Peter·2021년 10월 4일
0

운영체제

목록 보기
20/22

Mutex

  • 임계구역에 하나의 스레드만 들어갈 수 있음

세마포어

  • 임계구역에 여러 스레드가 들어갈 수 있음
  • counter를 통해 동시에 접근할 수 있는 스레드 수를 설정

세마포어 원리

  • P: 검사(임계영역에 들어갈 때)
  • V: 증가(임계영역에 나올 때)
  • S: 세마포어 값(초기값만큼 스레드가 동시에 임계영역 접근 가능)
P(S): wait(S) {
			while S <= 0
    	S--
	}

V(S): signal(S){
		S++
	}

바쁜 대기

  • wait()는 S가 0이라면 임계영역에 들어가기 위해, 반복문 수행(바쁜 대기)

대기큐

wait(S){
		S->count--;
    if(S->count <= 0){
    	add this process to S->queue;
        block()
    }
}
  • S가 음수일 경우 대기큐에 들어감
signal(S){
		S->count--;
    if(S->count > 0){
    	remove a process P from S->queue;
        wakeup(P)
    }
}
  • S가 다시 음수가 되면 wakeup을 통해 프로세스 실행

주요 세마포어 함수(POSIX 세마포어)

  • sem_open(): 세마포어를 생성
  • sem_wait(): 임계영역 접근할때 세마포어를 잠그고, 이미 잠겨있다면 풀릴 때까지 대기
  • sem_post(): 공유자원에 대한 접근이 끝났을 때 세마포어 잠금을 해제
profile
컴퓨터가 좋아

0개의 댓글