다섯 살도 알 수 있게 · 시스템SW

프로세스 동기화가 뭐예요?

세마포어·뮤텍스·모니터를, 리프트 열쇠를 나눠주는 규칙 이야기로 풀어봤어요.

정비사 둘 다 "지금 비었다"고 보고 동시에 차를 올려요리프트는 한 대뿐인데, 서로 상대가 쓰려는 줄 모르고 같이 손을 대요

정비사 둘이 같은 리프트를 동시에 건드려요.서로 상대가 쓰려는 줄 모르고 같이 손을 대요.

"비었네?" 확인하고 돌아서는 순간나도 "비었네?" — 둘 다 올라타요"확인하기"와 "쓰기" 사이의 틈에서 사고가 나요(경쟁 상태)

확인과 사용 사이의 틈에서 사고가 나요.이 틈에서 나는 사고를 경쟁 상태(race condition)라고 해요.

열쇠가 없으면 기다려요동기화 = 리프트 열쇠를 가진 사람만 리프트를 쓰게 하는 규칙열쇠를 든 사람이 끝내고 돌려줘야 다음 사람이 올라가요

동기화 = 열쇠를 가진 사람만 리프트를 쓰게 하는 규칙이에요.열쇠를 돌려줘야 다음 사람이 올라가요.

뮤텍스열쇠가 딱 1개예요
세마포어열쇠가 N개, N명까지 가능
모니터대기실 딸린 방 하나
임계구역열쇠 쥔 동안의 작업 구간
동기화 도구Mutex: 열쇠 딱 1개Semaphore: 열쇠 N개Monitor: 대기실 딸린 방임계구역: 열쇠 쥐고 하는 작업도구마다 동시에 쓸 수 있는 인원이 달라요뮤텍스는 N=1인 세마포어와 비슷하지만, 잠근 쪽만 풀 수 있어요

도구마다 동시에 쓸 수 있는 인원이 달라요.뮤텍스는 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
자주 쓰는 공구만 담는 작은 공구함. 여러 코어가 같은 캐시 줄을 동시에 쓸 때도 비슷한 조율이 필요해요. → 바로 옆에 놓아둔 공구함
다음 이야기
바로 옆에 놓아둔 공구함 →
다른 용어도 그림책으로 보고 싶다면 요청하기 →