[Operating System] 동기화(Synchronization)

권영태·2025년 4월 28일

Operating System

목록 보기
9/20

동기화(Synchronization)

프로세스는 동시 또는 병렬적으로 수행이 가능하다. 동시성 또는 병렬성이 있을 때 여러 프로세스가 공유 데이터를 다루면서 데이터 무결성 문제가 발생할 수 있다. 이 문제를 동기화를 통해 해결한다.

경쟁 상태(Race Condition)

여러 프로세스가 동시에 공유 자원(데이터)를 읽거나 수정할 때 실행 순서에 따라 결과가 달라지는 상황을 말한다.

커널 영역의 Race Condition

두 스레드가 동시에 하나의 공유 자원에 접근하는 경우 발생한다. 예시로 커널에는 파일 목록을 관리하는 파일 리스트 공유 자원이 존재하는데, 두 스레드가 동시에 파일을 열거나 닫으려고 파일 리스트에 접근할 때 발생할 수 있다.

  • 비선점형 커널은 한 번에 하나의 스레드만 접근할 수 있어 Race Condition이 일어나지 않는다.
  • 선점형 커널은 Race Condition이 일어날 수 있지만 그럼에도 불구하고 뛰어난 반응성을 위해서 사용한다.

임계 영역(Ciritical Section)

공유 자원이 존재해 이를 읽거나 수정할 수 있는 공간으로, 여러 프로세스가 동시에 접근할 수 없는 구역을 말한다.

임계영역 문제

프로세스들이 공유 자원을 협력적으로 사용하도록 동기화하기 위해서 프로토콜을 설계하는 문제

피터슨 알고리즘

피터슨이 임계 영역 문제를 해결하기 위해 제시한 고전적인 소프트웨어 방법

  • 두 프로세스가 있을 때 다음과 같은 두 공유 데이터를 통해 임계 영역에 들어갈 차례를 결정한다.
    int turn;
    boolean flag[2];
  • 하지만 현대 CPU에서는 loadstore 같은 명령어는 순서를 바꿔서 실행(==명령어 재배열)할 수 있다.
    싱글 스레드 환경에서는 문제되지 않지만 멀티 스레드 환경에서 명령어 재배열에 의해서 두 프로세스가 동시에 임계 영역에 들어갈 수 있다.
  • 즉, 피터슨 알고리즘으로 충분히 해결할 수 없으며 적절한 동기화 기법(CAS.. 등)을 함께 사용해야 한다.

Thread Safe

동시성 작업 환경에서 데이터의 정확성을 보장할 때 Thread Safe하다고 한다.

Thread Safe 보장

Thread Safe를 보장하기 위한 기본적인 방법 중 하나는 상태를 공유하지 않는 것이다.
불변 객채 등을 통해서 상태를 공유하지 않으면 동기화가 필요 없어, 성능 저하 없이 Thread Safe를 보장할 수 있다.

트랜잭션 메모리

  • Thread Safe를 구현하는 방법 중 하나
  • 트랜잭션 내의 모든 작업이 완료되면 메모리 트랜잭션을 커밋한다.
  • 트랜잭션 내의 작업 중 하나라도 중단되면 메모리 트랜잭션을 롤백한다.
  • 이 방법은 락을 쓰지 않아서 DeadLock이 발생하지 않는다.

학습하며 정리한 글이기 때문에 혼용된 표현 또는 잘못된 내용이 있을 수 있습니다.
만약, 발견하신 경우 댓글을 통해 알려주신다면 진심으로 감사드립니다.

profile
GitHub : https://github.com/dudxo

0개의 댓글