운영체제

04강-병행 프로세스01

2026-03-12

병행 프로세스의 개념

  • 병행성은 여러 프로세스 또는 여러 스레드가 동시에 수행되는 시스템의 특성을 의미함
  • 병행 프로세스는 이러한 병행성 환경에서 동시에 수행 중인 프로세스들을 의미함
  • 여기서 동시에 수행된다는 말은 반드시 같은 순간에 물리적으로 함께 실행된다는 뜻만은 아님
  • 어떤 시점에 여러 프로세스가 모두 종료되지 않은 채 진행 중이라면 병행 수행으로 볼 수 있음

병행성에서의 동시 수행 의미

  • 하나의 프로세스는 생성 이후 종료될 때까지 수행 중인 상태로 볼 수 있음
  • CPU를 잠깐 사용하지 않는 준비 상태나 대기 상태도 전체 수행 구간 안에 포함됨
  • 따라서 특정 시점에 여러 프로세스가 모두 살아 있다면 동시에 수행 중이라고 볼 수 있음
  • 이런 의미에서 여러 프로세스가 함께 존재하고 진행되는 성질을 병행성이라고 함

인터리빙 방식의 병행 수행

  • CPU가 하나인 시스템에서는 여러 프로세스가 번갈아 가며 CPU를 사용함
  • 이를 인터리빙 방식이라고 함
  • 실제로는 한 시점에 CPU 하나만 동작하지만
  • 전체적으로 보면 여러 프로세스가 함께 진행되는 것처럼 보이게 됨

의미

  • A 실행
  • B 실행
  • C 실행
  • 다시 A 실행

이와 같이 CPU 사용이 교차되면서 병행 수행이 이루어짐


병렬 처리와 병행 처리의 관계

  • CPU가 여러 개라면 여러 프로세스를 정말 동시에 처리할 수 있음

  • 이런 방식은 병렬 처리라고 볼 수 있음

  • 인터리빙 방식이든 병렬 처리 방식이든

  • 여러 프로세스가 동시에 진행된다는 점에서는 모두 병행성에 해당함

  • CPU 하나면 인터리빙 방식의 병행 수행

  • CPU 여러 개면 병렬 방식의 병행 수행


강결합 시스템의 의미

  • CPU가 여러 개이고 메모리는 하나인 구조를 강결합 시스템이라고 함
  • 하나의 메모리를 여러 CPU가 함께 사용하므로 공유 메모리 구조라고 볼 수 있음
  • 이 경우 프로세스들은 같은 메모리 공간을 통해 데이터를 주고받을 수 있음

특징

  • 메모리 공유 가능
  • 데이터 전달 빠름
  • 프로세스 간 협력 처리에 유리함

약결합 시스템의 의미

  • CPU마다 메모리가 따로 존재하는 구조를 약결합 시스템이라고 함
  • 이 경우 메모리가 분리되어 있으므로 분산 메모리 구조라고 볼 수 있음
  • 프로세스 간 데이터 전달은 메모리 공유가 아니라 통신선을 통해 이루어짐

특징

  • 각 CPU가 독립적으로 동작함
  • 데이터 공유에는 메시지 전달 필요
  • 네트워크 기반 처리와 유사한 구조로 이해 가능함

독립 프로세스의 특징

  • 독립 프로세스는 다른 프로세스와 영향을 주고받지 않는 프로세스를 의미함
  • 데이터 공유 없음
  • 상태 공유 없음
  • 서로 간섭 없음

특징

  • 결정적 실행 - 실행결과는 입력에 의해서만 결정
  • 재생 가능 - 같은 입력에 대해 항상 동일한 실행결과

의미

  • 같은 입력이면 언제 실행해도 같은 결과가 나옴
  • 실행 순서나 다른 프로세스의 존재에 영향을 받지 않음

협력 프로세스의 특징

  • 협력 프로세스는 다른 프로세스와 영향을 주고받는 프로세스를 의미함
  • 데이터 공유 가능
  • 상태 공유 가능
  • 실행 순서에 따라 결과 달라질 수 있음

특징

  • 비결정적 실행 - 실행결과는 실행순서에 좌우됨
  • 재생 어려움 - 같은 입력에 대해 항상 동일한 실행결과를 보장하지 못함

의미

  • 같은 입력이라도 실행 순서에 따라 결과가 달라질 수 있음
  • 다른 프로세스의 동작이 현재 프로세스 결과에 영향을 줄 수 있음

병행성 문제의 종류

병행 프로세스에서는 다음과 같은 문제가 발생 가능함

  • 상호배제 문제
  • 동기화 문제
  • 통신 문제

상호배제의 의미

  • 상호배제는 두 개 이상의 프로세스가 임계 영역을 동시에 수행하지 못하게 하는 것을 의미함
  • 동시에 접근하면 안 되는 공유 자원을 보호하기 위한 개념임

핵심

  • 한 프로세스가 사용 중이면

  • 다른 프로세스는 기다려야 함

  • 공유 자원을 동시에 사용하는 상황을 막는 역할


임계 영역의 의미

  • 임계 영역은 두 개 이상의 프로세스가 동시에 실행하면 안 되는 코드 영역을 의미함
  • 보통 공유 자원을 읽거나 수정하는 코드 부분이 이에 해당함

  • 계좌 잔액 읽기
  • 잔액 계산
  • 최종 잔액 저장

이 과정이 한 덩어리로 안전하게 처리되어야 할 때 그 부분이 임계 영역이 됨


상호배제가 필요한 이유

  • 여러 프로세스가 같은 공유 자원을 동시에 수정하면 잘못된 결과가 나올 수 있음
  • 예를 들어 두 프로세스가 같은 계좌 잔액을 동시에 읽고 각각 값을 계산한 뒤 다시 저장하면
  • 최종 결과가 정상값과 달라질 수 있음

문제 원인

  • 공유 자원을 동시에 사용함
  • 읽기와 쓰기 사이에 다른 프로세스가 끼어듦
  • 순서가 꼬이면서 결과가 틀어짐

해결

  • 읽기, 계산, 저장 전체를 하나의 임계 영역으로 보호해야 함

상호배제에서 필요한 조건

상호배제가 제대로 이루어지려면 다음 조건이 필요함

  • 어떤 프로세스가 임계 영역 수행 중이면 다른 프로세스는 진입 불가 => 보호 필요
  • 임계 영역 수행이 끝나면 다른 프로세스가 진입 가능해야 함 => 해제 필요
  • 기다리는 프로세스는 무한정 대기하지 않아야 함 => 공정성 보장 필요

동기화의 의미

  • 동기화는 두 개 이상의 프로세스 사이의 처리 순서를 맞추는 것을 의미함
  • 어떤 작업이 먼저 끝난 뒤 다른 작업이 시작되어야 할 때 필요함
  • 순서 관계를 보장하는 역할

  • 출금 후 입금
  • 데이터 생성 후 사용
  • 선행 작업 후 후속 작업

동기화가 필요한 이유

  • 협력 프로세스에서는 작업 순서가 바뀌면 결과가 달라질 수 있음
  • 예를 들어 계좌 이체 상황에서 입금이 출금보다 먼저 처리되면
  • 전체 금액이 일시적으로 잘못 계산될 수 있음

정상 흐름

  • 출금 수행
  • 그 다음 입금 수행

비정상 흐름

  • 입금 먼저 수행
  • 출금 나중 수행

따라서 프로세스 간 순서를 보장하는 동기화가 필요함


통신 문제의 의미

  • 협력 프로세스는 서로 데이터를 주고받아야 할 수 있음
  • 이를 위해 프로세스 간 통신이 필요함
  • 병행성 환경에서는 이 통신 방식 역시 중요한 문제가 됨

통신 방식 예

  • 공유 변수 사용
  • 메시지 전달 사용

이 부분은 병행 프로세스의 협력 구조와 직접 연결됨


세마포어의 개념

  • 세마포어는 상호배제와 동기화 문제를 해결하기 위한 도구임

  • 여러 프로세스가 함께 사용할 수 있는 공유 변수

  • 정수형 값을 가짐

  • 항상 정해진 연산을 통해서만 접근 가능함

  • 단순 변수처럼 임의로 값을 바꾸는 것이 아니라

  • 정해진 방식으로만 사용해야 하는 동기화 도구임


세마포어 값의 의미

세마포어는 상황에 따라 다음과 같은 의미로 사용 가능함

  • 사용 가능한 자원의 개수
  • 잠금 상태 여부
  • 진입 가능 여부

  • 1이면 사용 가능
  • 0이면 사용 불가

또는

  • 남은 자원 수가 3이면 세마포어 값 3
  • 남은 자원 수가 0이면 세마포어 값 0

세마포어 초기화의 필요성

  • 세마포어는 사용 전에 반드시 초기화가 필요함
  • 초기값은 사용 목적에 따라 달라짐

  • 상호배제 목적이면 보통 1로 초기화
  • 어떤 작업 완료 신호를 기다리는 목적이면 0으로 초기화

즉 세마포어는

  • 0 또는 그 이상의 정수값으로 시작 가능
  • 초기값의 의미를 먼저 정한 뒤 사용해야 함

세마포어 연산 P의 역할

  • P 연산은 세마포어 값을 검사하고 감소시키는 역할을 함
  • 값이 0보다 크면 1 감소시키고 계속 진행함
  • 값이 0이면 현재 프로세스를 대기 상태로 보냄

의미

  • 자원이 있으면 사용 시작
  • 자원이 없으면 기다림

P 연산은 진입 가능 여부를 확인하는 연산으로 볼 수 있음


세마포어 연산 V의 역할

  • V 연산은 세마포어 값을 증가시키거나
  • 대기 중인 프로세스를 다시 진행시키는 역할을 함

동작

  • 대기 중인 프로세스가 없으면 세마포어 값 1 증가
  • 대기 중인 프로세스가 있으면 그 가운데 하나를 깨워서 진행시킴

의미

  • 사용 끝남
  • 다음 프로세스 진입 가능

V 연산은 자원 반납 또는 다음 프로세스 진행 허용 역할을 함


세마포어 연산의 특징

  • P와 V는 세마포어를 다루는 기본 연산임
  • 이 연산들은 중간에 끊기지 않고 하나의 단위로 처리되어야 함
  • 그래야 병행성 환경에서도 안전하게 동작 가능함

핵심

  • 검사 중간에 끊기면 안 됨
  • 감소 중간에 끊기면 안 됨
  • 증가 중간에 끊기면 안 됨

P와 V는 원자적 연산으로 이해 가능함


세마포어와 대기 큐의 관계

  • 세마포어를 사용할 때는 해당 세마포어와 연결된 대기 큐가 필요함
  • P 연산에서 진입하지 못한 프로세스는 이 대기 큐에서 기다리게 됨
  • V 연산이 실행되면 대기 큐에서 하나를 꺼내 다시 진행시킴

  • 세마포어 값 관리
  • 대기 프로세스 관리

두 기능이 함께 이루어짐


세마포어를 이용한 상호배제 처리

상호배제를 위해서는 다음 구조 사용 가능함

  • 진입 영역에서 P(뮤텍스) 사용

  • 임계 영역 수행

  • 해제 영역에서 V(뮤텍스) 사용

  • 뮤텍스 세마포어를 1로 초기화함

의미

  • 처음에는 한 프로세스 진입 가능
  • 이미 하나가 들어갔다면 값이 0이 되어 다른 프로세스는 대기
  • 나가면서 V 연산 수행 시 다음 프로세스 진입 가능

세마포어로 상호배제를 보장하는 원리

  • 첫 번째 프로세스가 P 연산 수행 시 세마포어 값 1에서 0으로 감소

  • 이 프로세스는 임계 영역 진입 가능

  • 이후 들어오는 다른 프로세스는 세마포어 값이 0이므로 대기 상태로 감

  • 임계 영역을 끝낸 프로세스가 V 연산 수행

  • 대기 중인 프로세스가 있으면 하나를 깨워 진입 가능하게 함


  • 임계 영역에는 항상 하나의 프로세스만 들어감
  • 이것이 상호배제 보장 원리임

세마포어를 이용한 동기화 처리

동기화 문제는 다음 구조로 해결 가능함

  • 먼저 수행되어야 할 코드 뒤에 V(Sync) 사용

  • 나중에 수행되어야 할 코드 앞에 P(Sync) 사용

  • Sync 세마포어를 0으로 초기화함

의미

  • 후속 작업은 처음에는 진행 불가
  • 선행 작업이 끝난 뒤 V 연산을 통해 후속 작업 진행 가능

  • 순서 관계를 세마포어로 강제 가능함

세마포어로 동기화를 보장하는 원리

  • 후속 프로세스가 먼저 P 연산에 도달하면 세마포어 값이 0이므로 대기 상태가 됨
  • 선행 프로세스가 작업을 끝내고 V 연산 수행
  • 그러면 대기하던 후속 프로세스가 다시 진행 가능해짐

결과

  • 선행 작업 먼저 수행
  • 후속 작업 나중 수행

  • 세마포어를 이용하면 프로세스 간 실행 순서를 안전하게 제어 가능함

병행 프로세스 정리

  • 병행성은 여러 프로세스 또는 스레드가 동시에 수행되는 특성을 의미함
  • 동시에 수행되는 여러 개의 프로세스 또는 쓰레드를 병행 프로세스라고 하며, 병행 프로세스는 프로세스 간의 관계에 따라 독립 프로세스 또는 협력 프로세스로 나뉨
  • 협력 프로세스에서는 상호배제, 동기화, 통신 문제가 발생 가능함
  • 임계영역은 2개 이상의 프로세스가 동시에 사용하면 안되는 공유자원을 액세스하는 프로그램 코드 영역을 의미
  • 상호배제는 2개 이상의 프로세스가 동시에 임계영역을 수행하지 못하도록 하는 것
  • 동기화는 2개 이상의 프로세스에 대한 처리순서를 결정
  • CPU 하나에서는 인터리빙 방식으로 병행 수행 가능함
  • CPU 여러 개에서는 병렬 방식의 병행 수행 가능함
  • 프로세스는 독립 프로세스와 협력 프로세스로 구분 가능함

세마포어 정리

  • 세마포어는 병행성 문제를 해결하기 위한 공유 정수 변수임
  • P 연산은 검사 및 대기 역할 수행
  • V 연산은 증가 및 재개 역할 수행
  • 상호배제 문제 해결 가능
  • 동기화 문제 해결 가능
  • 임계 영역 보호와 순서 제어에 모두 활용 가능함