운영체제 ‐ 프로세스 동기화 - dnwls16071/Backend_Study_TIL GitHub Wiki

📚 프로세스 동기화

  • 동시다발적으로 실행되는 프로세스들은 서로 협력하며 영향을 주고 받는다.
  • 이 과정에서 자원 일관성을 보장해야 한다.
  • 동기화 → 공유가 불가능한 자원의 동시 사용을 피하기 위한 동기화
  • 위와 같이 문맥 교환 시 기존 프로세스에서 작업한 내용을 미루고 다른 프로세스의 작업을 처리하면서 데이터의 유실이 발생하는 것을 알 수 있다.

📚 생산자 & 소비자 문제

  • Producer : 물건을 계속 생산하는 생산자
  • Consumer : 물건을 계속 소비하는 소비자
  • Shared Buffer : 생산자가 데이터를 넣고 소비자가 데이터를 꺼내는 제한된 크기의 공간

문제1 : 생산자와 소비자가 동시에 버퍼에 접근할 때 데이터 일관성을 유지해야 한다. 문제2 : 생산자와 소비자가 서로를 무한정 기다리는 상황(데드락)을 방지해야 한다. 문제3 : 버퍼가 찼을 경우는 생산자는 대기, 버퍼가 비었을 경우는 소비자가 대기해야 한다.

📚 공유 자원과 임계 구역⭐

  • 공유 자원 : 여러 프로세스 혹은 쓰레드가 공유하는 자원
  • 임계 구역 : 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역
  • 임계 구역에 진입하고자 하면 진입한 프로세스 이외에는 대기해야 한다.
  • 임계 구역에 동시에 접근하면 자원 일관성이 깨질 수 있는데 이를 경쟁 상태(Race Condition)라고 한다.
  • 경쟁 상태(Race Condition) != 교착 상태(DeadLock)

운영체제가 임계 구역 문제를 해결하는 3가지 원칙

  1. 상호 배제 - 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 들어올 수 없다.
  2. 진행 - 임계 구역에 어떤 프로세스도 진입하지 않았다면 진입하고자 하는 프로세스는 들어갈 수 있어야 한다.
  3. 유한 대기 - 한 프로세스가 임계 구역에 진입하고 싶다면 언젠가는 임계 구역에 들어올 수 있어야 한다. 임계 구역에 들어오기 위해 무한정 대기해선 안 된다는 것이다.

📚 동기화 기법