Post

⚡ 운영체제 - 프로세스 동기화와 교착상태

⚡ 운영체제 - 프로세스 동기화와 교착상태

🔹 프로세스 동기화란?

  • 여러 프로세스나 스레드가 공유 자원을 동시에 사용할 때, 데이터의 일관성과 안정성을 유지하기 위해 필요한 기술이다.
  • 예를 들어, 두 개의 스레드가 동시에 같은 파일에 접근해서 수정하려 하면, 예기치 않은 결과가 발생할 수 있다.
  • 이를 막기 위해 동기화 메커니즘이 사용된다.

🔹 주요 동기화 메커니즘

▫️ 세마포어(Semaphore)

  • 정수 값을 기반으로 한 동기화 도구
  • 두 가지 기본 연산: wait(P)signal(V)
  • 카운터를 사용해 여러 프로세스의 접근을 제어할 수 있다
  • 바쁜 대기(Spinlock) 또는 블로킹 방식 사용 가능

▫️ 뮤텍스(Mutex)

  • Mutual Exclusion의 줄임말
  • 공유 자원에 하나의 스레드만 접근하도록 보장
  • 락을 획득한 스레드만 자원을 사용할 수 있으며, 나머지는 대기
  • 보통 쓰레드 단위의 동기화에 적합

▫️ 모니터(Monitor)

  • 고급 동기화 도구로, 언어나 시스템 수준에서 제공
  • 뮤텍스와 조건 변수(Condition Variable)를 함께 관리
  • 자바에서는 synchronized 키워드로 구현

🔹 세마포어 vs 뮤텍스

항목세마포어뮤텍스
구조정수 기반객체 기반
접근 제어여러 개 가능하나만 가능
용도프로세스 간 또는 스레드 간주로 스레드 간
잠금 해제다른 프로세스/스레드 가능락을 획득한 스레드만 가능

🔹 교착 상태(Deadlock)란?

  • 여러 프로세스가 자원을 획득한 상태에서, 서로 상대방의 자원을 기다리며 무한 대기하는 상황을 말한다.
  • 프로그램이 더 이상 진행되지 않고 멈춘다.

▫️ 교착 상태 발생 조건

  • 다음 4가지 조건이 동시에 만족될 때 교착상태가 발생할 수 있다.

▫️ 상호 배제 (Mutual Exclusion)

  • 자원은 한 번에 하나의 프로세스만 사용할 수 있다.

▫️ 점유와 대기 (Hold and Wait)

  • 자원을 점유한 프로세스가 다른 자원을 기다린다.

▫️ 비선점 (No Preemption)

  • 할당된 자원을 강제로 뺏을 수 없다.

▫️ 환형 대기 (Circular Wait)

  • 프로세스들이 자원을 순환적으로 기다린다. (A → B → C → A)

🔹 교착 상태 해결 전략

▫️ 예방 (Prevention)

  • 4가지 조건 중 하나라도 미리 제거해 교착 상태가 발생하지 않도록 설계
  • 자원을 한번에 모두 할당하거나, 순서를 정해 요청하도록 할 수 있다.

▫️ 회피 (Avoidance)

  • 실행 전 자원 상태를 분석해 교착 상태가 발생하지 않는 경로만 선택
  • 대표 알고리즘에는 Banker's Algorithm이 있다.

▫️ 탐지 (Detection)

  • 교착 상태가 발생했는지 감시하고, 발생 시 해결
  • 자원 할당 그래프를 사용해 주기적으로 탐지

▫️ 복구 (Recovery)

  • 교착상태 발생 후 자원 회수 또는 프로세스 종료 등으로 회복
  • 우선순위 낮은 프로세스 강제 종료하는 등의 처리를 할 수 있다.

🔹 마무리

  • 프로세스 동기화는 병렬 환경에서의 안정성과 성능을 위한 핵심 기술이며, 교착 상태는 그 과정에서 반드시 고려해야 할 문제다.
  • 동기화 메커니즘을 정확히 이해하고, 교착 상태의 조건과 해결 방법을 숙지하는 것이 운영체제 면접에서 매우 중요하다.
This post is licensed under CC BY 4.0 by the author.