운영체제에서는 올바른 작업 수행을 위해 프로세스 실행 순서, 상호 배제를 하여 프로세스를 동기화 해줘야한다.
프로세스 동기화 방법 중에 대표적인 것으로 뮤텍스 락과 세마포어가 있다.
뮤텍스
뮤텍스 락(mutex lock)은 하나의 공유자원에 하나의 스레드 or 프로세스만 접근가능한 동기화 기법이다.
뮤텍스 락은 주로 탈의실 or 화장실에 비유하곤 한다.
- A가 탈의실을 사용하기 위해 key를 들고 탈의실을 이용한다.
- B가 탈의실을 사용하기 위해 탈의실 앞에 왔지만 key가 없기때문에 대기한다.
- A가 탈의실을 사용하고 나와서 key를 반납한다.
- B는 key를 들고 탈의실을 이용한다.
여기서 탈의실은 공유자원이고 사람 A, B는 스레드 or 프로세스라고 볼 수 있다. 여기서 핵심은 key를 사용해서 자원에 접근한다는 것이며, 코드로 구현하면 이렇게 구현할 수 있다.
세마포어
세마포어(semaphore)는 여러개의 공유자원에 여러개의 스레드 or 프로세스가 접근가능하도록 하는 동기화 기법이다.
뮤텍스 락이 key가 있는 1개의 탈의실이라면 세마포어는 여러개의 탈의실이 있고 사용가능한 탈의실 수를 알려준다. 자라나 에잇세컨즈등의 피팅룸을 생각해보자
피팅룸에는 5개의 탈의실이 있고 하나의 방에는 한명만 들어가서 이용할 수 있다.
- A가 피팅룸을 이용하기 위해 피팅룸 앞으로 왔다. 아무도 사용하는 인원이 없으므로 사용 가능 탈의실은 5개이고 A가 입장하고 사용 가능 탈의실은 4개가 된다.
- B가 피팅룸을 이용하기 위해 피팅룸으로 왔고 사용 가능 탈의실은 4개이므로 사용 가능하다. B가 입장하고 사용 가능 탈의실은 3개가 된다.
- C, D, E가 피팅룸을 이용한다. 사용 가능 탈의실은 0개가 된다.
- F가 피팅룸을 이용하기 위해 피팅룸으로 왔지만 사용 가능 탈의실이 0개이므로 대기한다.
- A가 피팅룸을 이용하고 나와서 사용 가능 탈의실이 1개가 된다.
- F가 피팅룸을 이용하고 사용 가능 탈의실은 0개가 된다.
이를 카운팅 세마포어라 한다.
뮤텍스와 세마포어
사실 세마포어는 뮤텍스를 일반적인 상황으로 확장한 개념이며 뮤텍스는 세마포어의 일부라고 생각해도된다. OS에서 프로세스를 동기화 하는 기본 방법이며, 파이썬의 GIL 같은 lock들이 뮤텍스를 기반으로 만들어져 있다.
참고
'기타' 카테고리의 다른 글
[Kafka] Kafka Producer Basic (0) | 2025.03.30 |
---|---|
GraphQL DataLoader로 N + 1문제 해결하기 (0) | 2024.07.28 |
Redis maxmemory와 eviction정책 (1) | 2024.06.19 |
Lambda@Edge + Typscript로 이미지 리사이징 적용하기 (1) | 2024.06.05 |
계층형 모델 테이블 설계(인접 모델, MPTT) (0) | 2024.04.27 |