[CS] 동기화란

정은아·2024년 1월 29일
post-thumbnail

운영체제의 프로세스 관리 서비스 중 가장 중요한 두 가지를 꼽자면 스케줄링과 동기화이다. 이번에는 동기화에 대해 알아보자!

동기화의 의미

  • 프로세스 사이의 수행 시기를 맞추는 것을 프로세스 동기화(synchronization)라고 한다.
  • 프로세스뿐 아니라 스레드 또한 동기화의 대상이다.
  • 동기화는 특정 자원에 접근할 때 한 개의 프로세스만 접근하게 하거나, 프로세스를 올바른 순서대로 실행하게 하는것을 의미한다.
  • 프로세스들 사이의 수행 시기를 맞추는 것은 2가지로 정의할 수 있다.
    • 실행 순서 제어 : 프로세스를 올바른 순서대로 실행하기
    • 상호 배제 : 동시에 접근해서는 안되는 자원에 하나의 프로세스만 접근하게 하기

1. 실행 순서 제어를 위한 동기화

  • 동시에 실행되는 프로세스를 올바른 순서대로 실행하는 것을 말한다.
  • 프로세스들에 따라서 아무 순서대로 실행되어선 안되는 프로세스가 있다. 특정 조건이 만족되어야만 실행을 이어나갈 수 있기도 하다.

2. 상호 배제(mutual exclusion)를 위한 동기화

  • 동시에 접근하지 못하게 하는 것을 상호 배제를 위한 동기화이다.
  • 공유가 불가능한 자원의 동시 사용을 피하기 위해 사용하는 알고리즘이다.

+) 생산자와 소비자 문제

  • 상호 배제를 위한 동기화의 유명한 문제이다. 아래와 같이 알아보자.

- 생산자와 소비자,

총합 = 10;

생산자()
{
	버퍼에 데이터 삽입
	'총합' 변수 1 증가
}

소비자()
{
	버퍼에서 데이터 빼내기
	'총합' 변수 1 감소
}
  • 이를 동시에 실행하면 언뜻 보기에는 코드에 아무런 문제가 없어 보이지만, 막상 실행해보면 예상치 못한 결과를 얻을 수 있다.
  • 이는 두 프로세스가 제대로 동기화되지 않았기 때문에 발생한 문제이다. 동시에 접근해서는 안되는 자원에 동시에 접근했기 때문에 발생한 문제라고 볼 수 있다.

공유 자원과 임계 구역

그렇다면 동시에 접근해서는 안되는 자원이라는게 뭘까?

  • 프로세스에서 공동으로 접근할 수 있는 자원을 공유 자원(shared resource)라고 한다.
    • ex. 전역 변수, 파일, 입출력장치, 보조기억장치 등
  • 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역을 임계 구역(critical section)라고 한다.
  • 두 개 이상의 프로세스가 임계 구역에 진입하려 하면 둘 중 하나는 대기해야한다.
  • 임계 구역에 먼저 진입한 프로세스의 작업이 마무리 되면 그제서야 다른 프로세스가 임계 구역에 진입할 수 있다.
  • 여러 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하는 경우를 레이스 컨디션(race condition)라고 한다.
  • 레이스 컨디션이 발생하면 데이터의 일관성이 깨지는 문제가 발생한다.
  • 컴퓨터는 고급 언어가 아닌 저급 언어를 실행하기 때문에 여러 줄의 저급 언어로 변환된 고급 언어 한 줄을 실행하는 과정에서 문맥 교환이 일어나며 문제가 생길 수 있다. 상호 배제를 위한 동기화는 이와 같은 일이 발생하지 않도록 관리한다.

임계 구역 문제를 해결하기 위한 세 가지 원칙

    1. 상호 배제(mutual exclusion) : 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 임계 구역에 들어올 수 없다.
    1. 진행(progress) : 임계 구역에 어떤 프로세스도 진입하지 않았다면 임계 구역에 진입하고자 하는 프로세스는 들어갈 수 있어야 한다.
    1. 유한 대기(bounded waiting) : 한 프로세스가 임계 구역에 진입하고 싶다면 그 프로세스는 언젠가는 임계 구역에 들어올 수 있어야 한다.
profile
꾸준함의 가치를 믿는 개발자

0개의 댓글