본문 바로가기
CS/os

세마포어

by KJY 2021. 3. 28.

Mutex와 세마포어

  • Critical section(임계 구역)에대한 접근을 막기 위해 LOCKING 매커니즘 필요

    • Mutex(binary semaphore)

      → 임계구역에 하나의 스레드만 들어감

    • Semaphore

      → 임계구역에 여러 스레드가 들어갈 수 있음

세마포어 (Semaphore)

  • P : 검사 (임계영역에 달어갈 때)
  • V : 증가 (임계역역에서 나올 때)
  • S : 세마포어 값 (초기 값만큼 여러 프로세스가 동시 임계 영역 접근 가능)
P(S) : wait(S) {
                    while s <= 0;
            s--;
}

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

wait는 s가 0이라면, 반복문을 수행하는데 cpu 성능 낭비를 가져올 수 있음 바쁜대기

세마포어 (Semaphore) - 대기큐

  • S가 음수일 경우, 바쁜 대기 대신, 대기큐에 넣는다.
wait(S) {
        S->count--;
    if (S->count <=0) {
        add this process to S->queue;
        block()
    }
}

스레드를 블록 상태로 바꾼다.

  • wakeup() 함수를 통해 대기큐에 있는 프로세스를 재실행
signal(S) {
        s->count++;
    if (s->count > 0) {
        remove a process P from S->queue;
        wakeup(P)
    }
}

'CS > os' 카테고리의 다른 글

페이징  (0) 2021.04.04
가상메모리  (0) 2021.03.28
쓰레드  (0) 2021.03.21

댓글