All'alba vincerò

At dawn, I will win!

CS/운영체제

공유 자원과 임계 구역

나디아 Nadia 2025. 5. 15. 11:09

공유 자원 (Shared Resource)

: 프로세스 간 통신 시 공동으로 사용하는 변수나 파일

  • 공유 자원은 여러 프로세스가 공유하고 있기 때문에 각 프로세스의 접근 순서에 따라 결과가 달라질 수 있음
  • 운영체제는 시분할 방식으로 프로세스를 번갈아 실행하기 때문에, 프로세스의 정확한 실행 순서를 예측하기 어려움
    → 이로 인해 연산 결과도 예측하기 어려운 현상 발생
    ⇒ 이를 동기화 문제(Synchronization Problem) 라고 함

 

 

 

동기화 문제 예시

게임에서 캐릭터 총 체력은 100, 현재 체력은 20인 상황(20/100)에서 적의 공격을 받는 중이고, 동시에 물약을 마시는 중

  • 공격 받는 코드 (먼저 실행)
    int currentHealth = GetHealth(); // 1 → 이후 컨텍스트 스위칭 발생(물약 코드로 이동)
    
    health = currentHealth - 10; // 4
    // health = 10
  • 물약 먹는 코드
    int currentHealth = GetHealth(); // 2
    
    health = currentHealth + 50;     // 3 → 이후 컨텍스트 스위칭 발생 (공격 코드로 이동)
    // health = 70

 

기대 결과: 20 (현재 체력) + 50(물약) - 10(공격) = 60

실제 결과: 10 (예상치 못한 실행 순서로 인해 연산 덮어쓰기 발생)
⇒ health라는 공유 자원을 여러 프로세스가 동시에 사용한 것이 원인

 

 

 


임계 구역 (Critical Section)

: 여러 프로세스가 동시에 사용하면 안 되는 코드 영역

  • 경쟁 조건(Race Condition)
    : 둘 이상의 프로세스가 동시에 공유 자원에 접근하면서 충돌이 발생하는 현상
  • 임계 구역 문제를 해결하기 위해서는 상호 배제(Mutual Exclusion) 메커니즘이 필요함

 

 

 

상호 배제 메커니즘(mutual exclusion mechanism)

: 하나의 공유 자원에 동시에 여러 프로세스나 스레드가 접근하지 못하게 막는 방법

 

 

 

상호 배제의 요구사항

  1. 임계 구역엔 동시에 하나의 프로세스만 접근한다.
    • 주어진 시간에 항상 하나의 프로세스만 임계 구역에 접근할 수 있어야 함
  2. 동시에 여러 개의 요청이 있더라도 하나의 프로세스의 접근만 허용한다.
    • 여러 프로세스가 동시에 진입하려고 해도, 하나만 허용됨
  3. 임계 구역에 들어간 프로세스는 빠르게 나와야 한다.
    • 그렇지 않으면 다른 프로세스들이 오래 기다려야 함

 

이런 원리를 기반으로 실제 프로그래밍에서는 뮤텍스(Mutex), 세마포어(Semaphore), 모니터(Monitor) 등의 동기화 도구를 사용하여 임계 구역 문제를 해결한다.