혼공컴운_CH12-1_동기화란

Today Jeeho Learned·2026년 2월 3일

프로세스 동기화 (Process Synchronization)

운영체제의 프로세스 관리 서비스 중 가장 중요한 두 가지 축은 스케줄링(Scheduling)동기화(Synchronization)입니다.

현대의 운영체제에서는 수많은 프로세스가 동시다발적으로 실행됩니다. 이들은 독립적으로 작동하기도 하지만, 공동의 목적을 위해 서로 협력하며 자원을 공유하기도 합니다. 이 과정에서 실행 순서의 질서를 잡고 자원의 일관성을 보장하기 위해 반드시 필요한 것이 바로 동기화입니다.

1. 동기화의 의미

동기화의 사전적 의미는 '작업들 사이의 수행 시기를 맞추는 것'입니다. 프로세스 관리 측면에서 동기화는 크게 두 가지 목적을 가집니다.

  1. 실행 순서 제어 (Execution Order Control)
  2. 상호 배제 (Mutual Exclusion)

1) 실행 순서 제어를 위한 동기화

프로세스가 올바른 순서대로 실행되도록 조정하는 것입니다. 데이터가 준비되지 않았는데 읽으려 하거나, 처리가 끝나지 않았는데 다음 작업을 수행하면 오류가 발생합니다.

예시: Reader & Writer

  • Writer 프로세스: Book.txt 파일에 값을 저장합니다.
  • Reader 프로세스: Book.txt 파일의 내용을 읽습니다.
  • 동기화: 반드시 Writer가 값을 다 저장한 후에 Reader가 읽어야 올바른 정보를 얻을 수 있습니다.

2) 상호 배제를 위한 동기화

공유가 불가능한 자원에 동시에 접근하는 것을 막는 것입니다.

예시: 은행 계좌 잔액 문제

  • 현재 잔액: 10만 원
  • 프로세스 A: 2만 원 입금 (읽기 → 더하기 → 쓰기)
  • 프로세스 B: 5만 원 입금 (읽기 → 더하기 → 쓰기)
  • 기대 결과: 17만 원
  • 동기화 실패 시: A와 B가 잔액 '10만 원'을 동시에 읽어가서 각자 계산 후 저장하면, 최종 잔액이 12만 원이나 15만 원이 되는 오류가 발생할 수 있습니다.

2. 주요 개념: 공유 자원과 임계 구역

동기화 문제를 이해하기 위해서는 다음의 핵심 용어들을 이해해야 합니다.

공유 자원 (Shared Resource)

여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일, 입출력 장치 등을 말합니다.

  • 예: 전역 변수(잔액, 총합), 하드디스크 파일 등

임계 구역 (Critical Section)

공유 자원 중에서도 두 개 이상의 프로세스가 동시에 접근하면 문제가 발생하는 자원에 접근하는 코드 영역을 말합니다.

  • 한 프로세스가 임계 구역에 진입해 있다면, 다른 프로세스는 대기해야 합니다.

레이스 컨디션 (Race Condition)

잘못된 동기화로 인해 여러 프로세스가 동시다발적으로 임계 구역의 코드를 실행하여, 데이터의 일관성이 깨지는 문제 상황을 의미합니다.

⚠️ 레이스 컨디션은 왜 발생하는가? (저급 언어 관점)

고급 언어(C, Java, Python 등)의 한 줄 코드는 컴퓨터 내부에서 여러 줄의 저급 언어(기계어/어셈블리어)로 변환되어 실행됩니다.

  • 상황: 총합을 1 증가시키는 코드 (count++)
  • 실제 실행 과정:
    1. 메모리에서 count 값을 레지스터로 가져옴 (LOAD)
    2. 레지스터 값을 1 증가시킴 (ADD)
    3. 증가된 값을 다시 메모리에 저장 (STORE)

이 3단계 과정 중간에 문맥 교환(Context Switch)이 일어나 다른 프로세스가 개입하게 되면, 계산 중간의 덮어씌워지지 않은 값을 읽어가면서 데이터 정합성이 깨지게 됩니다.


3. 임계 구역 문제 해결의 3대 원칙

운영체제는 임계 구역 문제를 해결하고 올바른 동기화를 달성하기 위해 다음 세 가지 원칙을 반드시 충족해야 합니다.

원칙설명
1. 상호 배제
(Mutual Exclusion)
한 프로세스가 임계 구역에 진입했다면, 다른 어떤 프로세스도 임계 구역에 들어올 수 없다. (자물쇠 역할)
2. 진행
(Progress)
임계 구역에 어떤 프로세스도 진입하지 않은 상태라면, 진입하고자 하는 프로세스는 즉시 들어갈 수 있어야 한다.
3. 유한 대기
(Bounded Waiting)
한 프로세스가 임계 구역에 진입하고 싶다면, 언젠가는 들어갈 수 있어야 한다. (무한정 대기 금지, 기아 현상 방지)
profile
기록해야 (살아)남는다 !

0개의 댓글