CS/[도서] 이것이 취업을 위한 컴퓨터 과학이다 with CS 기술 면접

[운영체제] 3-3. (1) 동기화와 교착 상태

annovation 2025. 7. 10. 08:12

공유 자원

 

 프로세스 간 통신이 이루어지는 상황에서, 프로세스 A가 공유 메모리 공간에 데이터를 쓰고, 프로세스 B가 해당 메모리 공간을 읽는 상황이 있다고 가정해보자. 두 프로세스가 공유 메모리 공간이라는 공유 자원을 통해 통신하는 것이다.

 동일한 프로세스 내 스레드 A와 B가 같은 파일을 수정하는 경우도 두 스레드는 파일 자원을 공유하고 있는 것이다. 이렇게 프로세스 혹은 스레드가 공유하는 자원을 공유 자원 (Shared Resource)이라고 한다.

 

💡공유 자원 (Shared Resource)

  • 두 개 이상의 프로세스 혹은 스레드가 공유하는 자원으로, 동시 접근 가능하다.
  • ex. 메모리, 파일, 전역 변수, 입출력 장치 등

다수의 프로세스 혹은 스레드가 동시에 공유 자원에 접근할 경우 문제가 발생할 수 있는데, 이 코드를 임계 구역 (Critical Section)이라고 한다.

 

💡임계 구역 (Critical Section)

  • 여러 프로세스나 스레드가 공유 자원에 동시에 접근하는 경우, 문제가 발생할 수 있는 코드

출처 : [OS] Lecture 6. Process Synchronization and Mutual Exclusion (1/7) - Introduction / 운영체제 강의

 

 상황 설명

  • 중앙에 공유 변수 sdata가 있다. sdata의 현재 값은 0이다.
  • 두 개의 프로세스 P_i와 P_j가 각자 sdata를 1 증가시키는 코드(sdata = sdata + 1)를 실행하려 한다.

 문제 발생 가능성

  1. Process-P_i sdata 값을 읽는다. (현재 0)
  2. Process-P_j도 거의 동시에 sdata 값을 읽는다. (여전히 0)

  → 두 프로세스 모두 자신이 읽은 0에 +1 연산을 수행한다.

  1. Process-P_i가 계산한 1을 sdata에 저장
  2. Process-P_j도 계산한 1을 sdata에 저장

 결과

  • 두 프로세스 모두 sdata를 +1 했다고 생각하지만,
  • 실제 최종 결과는 1만 증가한다.

  → 만약 두 프로세스가 순차적으로 실행되었다면, sdata는 2가 되었을 것이다.

 

 핵심 포인트

  • sdata = sdata + 1은 단순한 한 줄 코드처럼 보이지만, 실제로는
    1. 읽기 (Read)
    2. 계산 (Add 1)
    3. 쓰기 (Write)
    세 단계로 이루어진 작업이다.
  • 이러한 코드 실행 부분을 임계 구역(Critical Section) 이라고 한다.

 

💡레이스 컨디션 (Race Condition)

  • 둘 이상의 프로세스/스레드가 동시에 공유 자원에 접근하여 실행 결과가 매번 달라질 수 있는 상황
  • 예시 : 하나의 변수 shared_data를 한쪽은 증가시키고, 다른 한쪽은 감소시키면 결과가 불확정적

 

💡동기화 (Synchronization)

 

프로세스/스레드가 동시에 실행될 때 공유 자원을 안전하게 다루기 위해 필요한 기술

  • 레이스 컨디션(Race Condition)을 방지하기 위해 사용된다.
  • 실행 순서 제어 : 프로세스/스레드를 올바른 순서대로 실행
  • 상호 배제(Mutual Exclusion) : 동시에 접근하면 안 되는 자원에 하나의 프로세스/스레드만 접근 가능

동기화 기법

 

💡뮤텍스 락 (Mutex Lock)

  • 하나의 자원에 오직 한 프로세스/스레드만 접근하도록 보장하는 동기화 도구
  • lock(획득), unlock(해제) 방식으로 동작
  • 임계 구역(Critical Section)을 보호하는 데 사용됨
static Lock lock = new ReentrantLock();

lock.lock();
try {
    sharedData++;
} finally {
    lock.unlock();
}

 

💡세마포 (Semaphore)

  • 여러 개의 공유 자원을 관리할 수 있는 동기화 도구
  • 뮤텍스는 한 번에 하나만 접근 가능하지만, 세마포는 자원 개수에 따라 여러 스레드 동시 접근 허용
  • 철도 신호등처럼 동작: STOP(대기) / GO(진입)
  • 구성 요소
    • 변수 S: 사용 가능한 자원 개수
    • wait(): 자원 사용 전 호출 (S 감소, 0 미만이면 대기)
    • signal(): 자원 사용 후 호출 (S 증가, 대기 중인 프로세스 깨움)

출처

https://www.hanbit.co.kr/store/books/look.php?p_code=B3079890360

 

이것이 취업을 위한 컴퓨터 과학이다 with CS 기술 면접

기술 면접과 실무에 필요한 CS 지식, 한 권으로 끝내자!

www.hanbit.co.kr


이미지 출처

1. 임계 구역

[OS] Lecture 6. Process Synchronization and Mutual Exclusion (1/7) - Introduction / 운영체제 강의