동시다발적으로 실행되는 프로세스들 중에는 공통의 목적을 가지고 서로 협력하면서 실행되는 프로세스들이 존재한다.
예를 들어 워드 프로세스에는 사용자로부터 입력을 받는 프로세스와 입력한 내용을 화면에 출력해주는 프로세스 등이 있을 것이다.
이 프로세스들은 각기 다른 독립적인 프로세스들이지만 공동의 목표를 위해 서로 협력하는 존재이다.
이렇게 서로 협력하는 프로세스들을 올바르게 실행시키기 위해 필요한 것이 바로
프로세스 동기화 이다.
프로세스 동기화란 무엇일까?
국어 사전에 따르면 정보통신 분야에서의 동기화란 '작업들 사이의 수행 시기를 맞추는 것'을 의미한다고 한다.
다시 말해 프로세스 동기화는 여러 프로세스들의 실행 시기를 맞추는 것이다.
실행 시기를 맞추는것??
이 표현이 조금 추상적일 수 있다.
그렇다면 실행 시기를 맞춘다는 의미를 조금 더 깊게 파보면
이렇게 2가지를 의미한다고 볼 수 있다.
- 실행 순서를 제어: 프로세스들을 올바른 순서대로 실행하기
- 상호 배제: 동시에 접근해서는 안되는 자원을 한 프로세스만 접근할 수 있도록 하기
프로세스들의 실행 순서를 제어해야 하는 이유는 이전에 예시로 든 워드 프로그램의 실행 과정을 통해 설명해보겠다.
워드 프로세스는 사용자의 입력을 받는 프로세스, 입력받은 내용을 화면에 출력해주는 프로세스가 있을 것이다.
그런데 만약 입력받은 내용을 먼저 화면에 출력해주고 그 다음 사용자의 입력을 받는 프로세스를 실행한다면 워드 프로그램은 우리가 원하는대로 작동하지 않을 것이다.
상호 배제 앞에서도 잠깐 설명했지만 공유는 하지만 동시 사용을 피하기 위해 사용되는 개념이다.
그렇다면 또 상호 배제는 서로 협력하는 프로세스들을 실행시키기 위해 왜 필요한지 생각해보자.
상황 가정)
10만원이 들어있는 계좌에 5만원을 저축하는 프로세스A가 있고
현재 저축된 금액에서 2만원을 저축하는 프로세스B가 있다.
만약 동시에 이 프로세스들을 실행하면 어떻게 될까?
올바르게 10만원이 들어있던 계좌에 17만원이 저축될까?
이미 느꼈다시피 통장 잔액을 확인해보면 17만원이 들어있지 않다.
이런일이 발생하는 핵심적인 이유는 바로 프로세스A와 프로세스B는 계좌 잔액이라는 데이터를 동시에 사용하기 때문이다.
프로세스A의 실행이 끝나기도 전에 이미 프로세스B가 실행이 되었기 때문에 프로세스B가 실행됐을때 읽어들인 계좌 잔액은 15만원이 아닌 10만원으로 읽은 것이다.
그래서 이런 불상사를 방지하기 위해 상호 배제적인 프로세스 동기화가 필요하다.
좋은 글 감사합니다. 자주 올게요 :)