다섯 살도 알 수 있게 · 시스템SW
프로세스 동기화가 뭐예요?
세마포어·뮤텍스·모니터를, 리프트 열쇠를 나눠주는 규칙 이야기로 풀어봤어요.
정비사 둘이 같은 리프트를 동시에 건드려요.서로 상대가 쓰려는 줄 모르고 같이 손을 대요.
확인과 사용 사이의 틈에서 사고가 나요.이 틈에서 나는 사고를 경쟁 상태(race condition)라고 해요.
동기화 = 열쇠를 가진 사람만 리프트를 쓰게 하는 규칙이에요.열쇠를 돌려줘야 다음 사람이 올라가요.
뮤텍스열쇠가 딱 1개예요
세마포어열쇠가 N개, N명까지 가능
모니터대기실 딸린 방 하나
임계구역열쇠 쥔 동안의 작업 구간
도구마다 동시에 쓸 수 있는 인원이 달라요.뮤텍스는 N=1인 세마포어와 비슷하지만, 잠근 쪽만 풀 수 있어요.
열쇠를 안 돌려주면 다음 정비사가 멈춰 서요.열쇠를 쥔 채 서로 다른 열쇠를 기다리면 교착상태로 이어질 수 있어요.
한 줄로
프로세스 동기화 = 리프트 같은 공유 자원을 여러 작업이 한 번에 하나씩만(세마포어는 N개까지) 건드리게 만드는 규칙.
여러 프로세스/스레드가 같은 자원(변수·파일·메모리)에 동시에 접근하면 경쟁 상태(race condition)가 생겨요. Mutex(상호배제)는 임계구역(critical section)에 한 번에 하나만 들어가게 하고, Semaphore는 카운터로 N개까지 허용하며, Monitor는 락과 조건변수(condition variable)를 언어 차원에서 묶어 대기·신호를 안전하게 처리해요.
어른들은 이렇게 불러요
- 경쟁 상태
Race Condition - 확인과 사용 사이의 틈에서 나는 사고. 순서가 꼬이면 결과가 매번 달라져요.
- 뮤텍스
Mutex - 열쇠가 딱 1개뿐인 잠금. 한 번에 한 작업만 들어가요.
- 세마포어
Semaphore - 열쇠가 N개 있는 잠금. N명까지는 동시에 들어갈 수 있어요.
- 모니터
Monitor - 대기실 딸린 방. 락과 조건변수를 한 세트로 묶어줘요.
- 교착상태
Deadlock - 서로의 열쇠를 기다리며 영원히 멈춤. 열쇠를 쥔 채 서로의 열쇠를 기다리면 이 문제가 생겨요. → 서로의 열쇠를 기다리며 멈춘 정비공장
- 프로세스/스레드
Process/Thread - 같은 차를 같이 고치는 여러 손. 동기화는 특히 '같은 차 공유'인 스레드에서 자주 필요해요. → 같은 차, 여러 손
- CPU 스케줄링
CPU Scheduling - 순서판에 적힌 차 순서. '누가 먼저'가 스케줄링이면, 동기화는 '동시에 건드리지 않기'예요. → 리프트에 누가 먼저 올라갈까
- 캐시 메모리
Cache Memory - 자주 쓰는 공구만 담는 작은 공구함. 여러 코어가 같은 캐시 줄을 동시에 쓸 때도 비슷한 조율이 필요해요. → 바로 옆에 놓아둔 공구함
다음 이야기
바로 옆에 놓아둔 공구함 →