세마포어 : 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 |
최근댓글