세마포어 : Semaphore

뮤텍스 : Mutex

- 여러 쓰레드들은 자원을 공유하고 프로세스간 메시지를 전송하면서 문제가 발생됨

-> 공유된 자원에 여러 프로세스, 쓰레드가 동시에 접근하면서 발생

- 공유된 자원 속 하나의 데이터는 한 번에 하나의 프로세스만 접근할 수 있도록 제한해 두어야함

 

세마포어

- 공유된 자원의 데이터를 여러 프로세스가 접근하는 것을 막는 것

- 리소스 상태를 나타내는 간단한 카운터

- 운영체제의 리소스를 경쟁적으로 사용하는 다중 프로세스에서 행동을 조정하거나 동기화 시키는 기술

struct semaphore {
    int count;
    queueType queue;
};

void semWait (semaphore s) {
    s.count--;
    if (s.count <= 0) {
    	// 락이 걸리고 공유 자원에 접근할 수 없음
    }
} 

void semSignal (semaphore s) {
    s.count++;
    if (s.count <= 0) {
    	// 아직 락에 걸려 대기중인 프로세스가 있음
    }
}

 

뮤텍스

- 상호배제

- 공유된 자원의 데이터를 여러 쓰레드가 접근하는 것을 막는 것

- 다중 프로세스들의 공유 리소스에 대한 접근을 조율하기 위한 locking과 unlocking을 사용

- 두 쓰레드가 동시에 사용할 수 없음

wait (mutex);
…..
Critical Section
…..
signal (mutex);

 


공유데이터를 여러 프로세스가 동시에 엑세스하면 시간적인 차이 때문에 잘못된 결과를 만들 수 있음

-> 한 프로세스가 위험부분을 수행하고 있을 때, (공유데이터를 엑세스) 다른 프로세스들은 절대로 그 데이터를 접근할 수 없도록 해야함

 

정리

- 세마포어는 뮤텍스가 될 수 있지만, 뮤텍스는 세마포어가 될 수 없음

- 세마포어는 파일시스템 상 파일형태로 존재

- 뮤텍스는 프로세스 범위

- 프로세스가 사라질 때 뮤텍스는 clean up

- 세마포어는 소유할 수 없는 반면, 뮤텍스는 소유 가능

 

- 뮤텍스 경우, 뮤텍스를 소유하고 있는 쓰레드가 뮤텍스를 해제할 수 있음

- 세마포어 경우, 세마포어를 소유하고 있지 않은 쓰레드도 세마포어를 해제할 수 있음

반응형

'전산 > OS' 카테고리의 다른 글

logrotate  (0) 2021.02.16
crontab vs cronjob  (0) 2021.02.16
Crontab 명령어  (0) 2021.02.16
chmod 명령어  (1) 2021.02.15
멀티 쓰레딩과 멀티 프로세싱의 차이  (0) 2021.02.06
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기