동기화
,공유 자원
,임계 구역
,상호 배제
운영체제의 프로세스 관리 서비스 중 가장 중요한 두 가지를 꼽자면 스케줄링과 동기화입니다. 지난 장에서 스케줄링을 학습했다면 이번에는 동기화에 대해 알아봅시다.
프로세스들은 협력적으로 실행되기 때문에 동기화(synchronization)
가 필요하다. 특히 프로세스 동기화
는 프로세스 사이의 시기를 맞추는 것을 의미하며 두 가지 목적이 있다.
동시에 실행하는 프로세스를 올바른 순서대로 실행하기 위한 동기화이다. 예를 들어, 특정 텍스트파일은 Write 프로세스가 진행된 후, Read 프로세스가 진행되어야 하므로 순서에 따라 실행이 일어난다.
상호 배제(mutual exclusion)
는 동시에 접근해서는 안 되는자원에 동시에 접근하지 못하게 하기 위한 동기화다. 예를 들어, A라는 계좌에서 B와 C라는 계좌에 각각 3만원 씩 송금할 때 B에 송금과 차액 동기화가 된 후에 C로 입금이 진행되어야만 거래가 의도대로 진행된다.
생산자와 소비자 문제는 물건을 계속해서 생산하는 프로세스인 생산자와 물건을 계속해서 소비하는 프로세스인 소비자로 이루어져 있다. 이들은 총합
이라는 데이터를 공유한다. 자세한 내용은 링크의 자료에서 알아보자.
두 개 이상의 프로세스를 동시에 실행하면 문제가 발생하는 자원을 공유 자원(shared resource)
라고 한다. 그리고 이런 공유 자원에 접근하는 코드 영역을 임계 구역(critical section)
이라고 한다.
두 개 이상의 프로세스가 임계 구역에 진입하고자 하면 둘 중 하나는 대기해야 하며 오류로 여러 프로세스가 동시 다발적으로 실행되는 경우를 레이스 컨디션(race condition)
이라고 한다. 이는 데이터의 일관성이 깨지는 문제를 발생한다.
운영체제는 이러한 임계 구역 문제를 방지하고자,상호 배제를 위한 동기화를 위해, 아래 세 가지 원칙을 지킨다.
상호 배제(mutual exclusion)
: 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 임계 구역에 들어올 수 없음진행(progress)
: 임계구역에 어떤 프로세스도 진입하지 않았다면 임계 구역에 진입하고자 하는 프로세스는 들어갈 수 있어야 함유한 대기(bounded waiting)
: 한 프로세스가 임계 구역에 진입하고 싶다면 그 프로세스는 언젠가는 임계 구역에 들어올 수 있어야 함