본문 바로가기
CS/OS

[운영체제] 6. 프로세스 동기화 도구 : 세마포어 Semaphore

by DenverAlmighty 2024. 12. 11.
반응형

 

KOCW에서 제공하는 경성대학교  양희재 교수 운영체제 강의를 듣고 정리한 글 입니다. 


1. 세마포어

1) 세마포어 구조

class Semaphore {
    int value; // number of permits
    Semaphore(int value) {
        ...
    }
    void acquire() {
        ...
    }
    void release() {
        ...
    }
}


// acquire
void acquire() {
    value--;
    if (value < 0) {
    	// aquire 되면 세마포 큐에 들어가고, block 됨
        add this process / thread to list;
        block;
    }
}


// release
void release() {
    value++;
    if (value <= 0) {
    	
        remove a process P from list;
        wakeup P;
    }
}

value : number of permit

 

2) 세마포어 사용

(1) 상호 배타 mutual exclusion

: 오직 한 쓰레드만 진입

// value=1이면 Parent/Child 중 1개만 들어올 수 있음.
sem.value = 1;

sem.acquire();
//Critical-Section
sem.release();

 

(2) Ordering

특정 프로세스를 먼저 실행되도록 하는 경우

// S1을 S2보다 먼저 실행하고싶은 경우

sem.value = 0;

/*P2*/
sem.acquire();
//S2;
//-

/*P1*/
//-
//S1;
sem.release();

/*
(1) P1 먼저 실행 시 S1먼저 실행됨 (O)
(2) P2 먼저 실행 시 aquire() 때문에 block되어 S2실행 못함. 
시간 지나 P1으로 차례 넘어간 경우 S1실행, P2 release() 되어 S2 실행됨. (O)
*/

 

은행계좌 문제, 세마포어 자세히

https://almighty-denver.tistory.com/276

 

[운영체제] 은행 계좌 문제 (임계 구역 문제, 세마포어)

세마포어를 사용해 임계구역 문제를 상호 배타 방식으로 해결하고, 프로세스 실행 순서를 제어한다.  1. Critical Section 임계 구역 문제 1) 임계 구역 문제란?임계 구역 : 멀티 프로세스 환경에서

almighty-denver.tistory.com

 

728x90
반응형