동시다발적으로 실행되는 많은 프로세스는 서로 데이터를 주고받으며 협력하며 실행될 수 있습니다.

예를 들어, 워드 프로세서에 사용자로부터 입력을 받는 프로세스와 입력한 내용을 화면에 출력해 주는 프로세스 등이 존재하는데, 이 프로세스들은 각기 다른 독립적인 프로세스지만 공동의 목표를 위해 서로 협력하는 존재입니다.

이렇게 협력적으로 실행되는 프로세스들은 아무렇게나 마구 동시에 실행해서는 안됩니다. 올바른 실행을 위해 동기화(Synchronization)가 필수입니다.

그래서 프로세스 동기화라는 것은 여러 프로세스가 공유하는 자원의 일관성을 유지하는 것입니다. 여러 프로세스가 동시에 하나의 공유된 자원에 접근하려고 할 때 이 프로세스들의 순서를 정하여 데이터의 일관성을 유지시켜주어야 합니다.

공유 자원과 임계 구역

공유 자원공동으로 이용하는 변수, 파일, 장치 등의 자원을 의미합니다. 그리고 이러한 공유 자원에 접근하는 코드 중 동시에 실행하면 문제가 발생하는 코드 영역임계 구역이라고 합니다.

두 개 이상의 프로세스가 임계 구역에 진입하고자 할 때, 둘 중 하나는 대기해야 합니다.

임계 구역은 두 개 이상의 프로세스가 동시에 실행되면 안 되는 영역이지만, 잘못된 실행으로 인해 여러 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하여 문제가 발생하는 경우가 있습니다. 이를 경쟁 상태(Race Condition)라고 합니다.

경쟁 상태에 대해서 더 정확히 설명하자면, 공유 자원에 대해 여러 프로세스가 동시에 접근할 때, 결과값에 영향을 줘서 데이터의 일관성이 깨지는 결과가 나타나는 상태를 말합니다.

임계구역을 해결하기 위해서는 다음과 같은 조건이 만족해야 합니다.

  • 상호 배제(Mutual Exclusion) : 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 임계 구역에 들어올 수 없습니다.

  • 진행(Progress) : 임계 구역에 어떤 프로세스도 진입하지 않았다면 임계 구역에 진입하고자 하는 프로세스는 들어갈 수 있어야 합니다.

  • 유한 대기(Bounded Waiting) : 임계 구역으로 진입하기 위해 대기하는 모든 프로세스는 유한 시간 이내에 해당 임계 구역으로 진입할 수 있어야 합니다.

이상으로 프로세스 동기화에 대해서 간단히 알아봤습니다.

참고

  • KOCW - 운영체제, 양희재 교수님
  • 혼자 공부하는 컴퓨터구조 + 운영체제
profile
꾸준함으로 성장하는 개발자 지망생

0개의 댓글