[Operating System] 동기화

최민우·2024년 9월 22일

운영체제

목록 보기
6/10

동시다발적으로 실행되는 많은 프로세스는 공동의 목적을 올바르게 수행하기 위해 협력하며 실행될 수 있습니다. 이렇게 협력적으로 실행되는 프로세스들은 아무렇게나 마구 동시에 실행해서는 안 됩니다. 올바른 실행을 위해서는 동기화가 필수입니다.

프로세스 동기화

프로세스 동기화는 프로세스들 사이에 수행 시기를 맞추는 것을 의미합니다. 실행 흐름을 갖는 모든 것은 동기화의 대상입니다. 즉, 스레드도 동기화의 대상입니다.

  • 실행 순서 제어: 프로세스를 올바른 순서대로 실행하기
  • 상호 배제: 공유가 불가능한 자원에 하나의 프로세스만 접근하기

공유 자원

공유 자원(Shared Resource)은 공동으로 사용하는 자원으로, 전역 변수, 메모리, 파일 등이 있습니다. 공유 자원은 여러 프로세스가 함께 사용하기 때문에, 누가 언제 데이터를 읽고 쓰느냐에 따라 결과가 달라질 수 있습니다. 즉, 프로세스들의 공유 자원 접근 순서를 조정하여, 예상치 못한 문제가 발생하지 않도록 해야 합니다.

임계 구역

임계 구역(Critical Section)은 공유 자원에 접근하는 코드 중 동시에 실행하면 문제가 발생하는 코드 영역입니다. 임계 구역에 진입한 프로세스가 있다면, 다른 프로세스는 임계 구역 밖에서 기다려야 합니다.

레이스 컨디션

여러 프로세스들이 동시에 임계 구역에 접근하는 상황에서, 잘못된 실행으로 여러 프로세스가 동시다발적으로 임계 구역에 코드를 실행하는 레이스 컨디션(Race Condition)이 발생할 수 있습니다. 레이스 컨디션이 발생하면, 데이터의 일관성이 깨지는 문제가 발생합니다.

상호 배제

상호배제(Mutual Exclusion)는 한 프로세스가 임계 구역에서 작업 중일 때, 다른 프로세스가 그 임계 구역에 들어가지 못하도록 관리합니다. 상호 배제는 레이스 컨디션을 해결하기 위한 3가지 조건을 반드시 지켜야만 합니다.

  • 상호 배제: 한 프로세스가 임계 구역에 진입했다면, 다른 프로세스는 임계 구역에 들어갈 수 없습니다.
  • 진행: 임계 구역에 어떤 프로세스도 진입하지 않았다면, 임계 구역에 들어가고자 하는 프로세스는 들어갈 수 있어야 합니다.
  • 유한 대기: 한 프로세스가 임계 구역에 진입하고 싶다면, 언젠가는 임계 구역에 들어가야 합니다.

동기화 기법

프로세스를 동기화하지 않으면, 겉보기에 아무런 문제 없어 보이는 코드도 예기치 못하게 작동할 수 있습니다. 동기화를 위한 대표적인 도구는 뮤텍스, 세마포, 모니터가 있습니다.

뮤텍스

뮤텍스(Mutex)는 상호 배제(Mutual Exclusion)의 약자이며, 락(lock)과 언락(unlock)을 이용하여 임계 영역에 접근하는 동기화 도구입니다. 임계 구역에 진입하는 프로세스는 "내가 지금 임계 구역에 있음"을 알리기 위해 뮤텍스 락을 사용합니다. 뮤텍스 락은 임계 구역을 잠구는 역할을 하며, 다른 프로세스는 임계 구역이 잠겨 있다면 기다리고, 잠겨 있지 않다면 임계 구역에 진입할 수 있습니다.

세마포

뮤텍스는 하나의 공유 자원에 접근하는 방식이지만, 세마포(Semaphore)는 여러 개의 공유 자원에 접근하는 동기화 도구입니다. 세마포는 동시에 실행되는 프로세스를 제어할 수 있습니다.

모니터

모니터(Monitor)는 세마포에 비하면, 사용자가 사용하기에 훨씬 편리한 도구입니다. 모니터는 공유 자원과 공유 자원에 접근하기 위한 인터페이스(통로)를 묶어 관리합니다. 그리고 프로세스는 반드시 인터페이스를 통해서만 공유 자원에 접근해야 합니다. 모니터는 공유 자원을 다루는 인터페이스에 접근하기 위한 큐를 만들고, 프로세스는 큐에 삽입된 순서대로 하나씩 공유 자원을 이용할 수 있습니다.

참고

[운영체제] 프로세스 동기화
[Operating System] 공유 자원과 임계 영역
[OS] 공유 자원과 임계구역
[OS] 동시성 (1) - 임계구역
스핀락(Spinlock) vs 뮤텍스(Mutex) vs 세마포어(Semaphore)
[운영체제] 세마포어(semaphore) 뮤텍스(mutex) 모니터(Monitor)
Shared Resource 사진
Race Condition 사진
혼자 공부하는 컴퓨터구조+운영체제

profile
I'm Backend Developer

0개의 댓글