CS/운영체제

[운영체제] 동기화 문제(synchronization problem)

Heeyeon Choi 2024. 10. 31. 12:00
728x90
다중 프로세스나다중 스레드 환경에서 공유 자원에 접근할 때 발생하는 문제입니다. 동기화 문제는 여러 프로세스나 스레드가 공유 자원에 동시에 접근하려고 할 때 발생합니다.

동기화 문제의 주요 원인

  • 경쟁 상태(Race Condition): 두 개 이상의 스레드가 동시에 공유 자원에 접근해 작업을 수행할 때 발생합니다. 어떤 스레드가 먼저 작업을 완료하느냐에 따라 최종 결과가 달라질 수 있습니다.
  • 원자성(Atomicity) 부족: 특정 작업이 분리된 여러 단계로 이루어져 있고, 이 작업을 중간에 다른 프로세스가 간섭할 경우 예상치 못한 결과가 발생합니다.
  • 데이터 불일치: 여러 스레드가 공유 자원에 접근하여 데이터를 변경할 때, 동기화되지 않으면 최종 결과가 일관되지 않거나 데이터 무결성이 깨질 수 있습니다.

동기화 문제의 예시

  1. 은행 계좌 입출금 문제: 두 개의 스레드가 동시에 동일한 계좌에 입금 또는 출금 작업을 수행하면, 데이터가 불일치하거나 예상치 못한 결과를 초래할 수 있습니다.
  2. 생산자-소비자 문제: 하나의 버퍼를 공유하는 생산자와 소비자가 있을 때, 버퍼에 데이터가 가득 차거나 비어 있는 상황에서 동기화가 되지 않으면 데이터의 손실 또는 무한 대기 상태가 발생할 수 있습니다.
  3. 독자-저자 문제: 파일이나 데이터베이스에 접근하는 독자(읽기)와 저자(쓰기)가 동시에 접근하려 할 때, 동기화되지 않으면 데이터 일관성에 문제가 생길 수 있습니다.

동기화 문제 해결 기법

동기화 문제를 해결하기 위해 동기화 기법이 사용되며, 주로 임계 구역(Critical Section) 보호를 통해 문제를 방지합니다. 주요 동기화 기법은 다음과 같습니다.

  1. 뮤텍스(Mutex): 상호 배제(Mutual Exclusion)를 통해 하나의 스레드만 임계 구역에 접근할 수 있도록 잠금을 제공합니다.
  2. 세마포어(Semaphore): 여러 스레드가 자원을 사용할 수 있게 하되, 동시에 접근할 수 있는 스레드 수를 제한합니다.
  3. 모니터(Monitor): 뮤텍스와 비슷하지만, 동기화 객체를 통해 임계 구역을 관리하며 자동으로 잠금과 해제를 수행합니다.
  4. 락(Lock): 특정 자원을 사용하기 전에 잠금을 걸고 사용한 후 잠금을 해제하는 방식으로, 뮤텍스와 유사합니다.

동기화 문제 해결 시 고려사항

  • 데드락(Deadlock) 방지: 두 개 이상의 프로세스가 서로 잠금을 기다리며 영원히 대기하는 상태를 피해야 합니다.
  • 공정성(Fairness): 모든 스레드가 공유 자원에 공평하게 접근할 수 있어야 합니다.
  • 성능 저하 방지: 지나친 동기화는 병목을 초래할 수 있으므로 적절한 수준의 동기화가 필요합니다.
728x90