[운영체제] 4강 - 병행 프로세스(1)

2026. 3. 6. 12:45·방송통신대학교/⚙️운영체제

✅ 1. 병행 프로세스의 개요

(1) 병행성(concurrency) 및 병행 프로세스

  • 병행성: 다양한 프로세스 및 쓰레드가 동시에 수행되는 시스템 자체의 특성을 의미함.
  • 병행 프로세스: 동시에 수행되는 상태를 가지는 여러 개의 실제 프로세스 또는 쓰레드를 의미함.

(2) 병행 프로세스의 실행 형태

  • 1개의 CPU: CPU 자체가 하나이고, 싱글코어의 경우 인터리빙 방식을 통해 데이터를 병렬로 처리함.
  • **즉, 실제로는 완전 병렬처리는 못하고 병렬처리 처럼 보이도록 매우 빠르게 번갈아 처리(인터리빙)를 해줌.**
  • 여러 개의 CPU: 실제 CPU가 여러개 일수도 있지만, 보통은 멀티코어로 이루어진 CPU 한개이며, 내부적으로 실제로 병렬로 처리를 해줌. 즉, 코어당 하나의 프로세스 작업을 처리를 해줌.

  • 공유 메모리 구조: 실제 CPU 가 여러개 이거나, 1개의 CPU 코어가 여러개인 상태에서, 메모리가 하나인 경우에는 하나의 메모리를 여러 CPU가 공유를 하게 되는데, 이러한 구조를 의미함.
  • ** 또한, 공유 메모리 구조는 강하게 결합된 시스템이라고 하여, 강결합 시스템이라고 함. **
  • 해당 공유 메모리 구조는 메모리 하나를 공유하기 때문에 내부에서 여러 프로세스들이 데이터를 공유 할 수 있음.
  • 분산 메모리 구조: 실제로 메모리가 여러개인 상태를 의미하며, CPU 마다 메모리가 있을 수 있다는 느낌을 줌.
  • ** 또한, 분산 메모리 구조는 약하게 결합된 시스템이라고 하여, 약결합 시스템이라고 함. **
  • 프로세스간 데이터를 공유하기 위해서는 통신선(네트워크)를 통해서 데이터를 주고 받을 수 있음.

[ 정리 ]

  • 병행 프로세스는 CPU 여러개, 메모리 여러개 등의 하드웨어에 영향을 받아 어떤식으로 처리가 될 지 결정이 됨.
  • ** 즉, 운영체제가 프로세스를 병행성을 가지게 관리 할 때, 하드웨어 영향을 받아서 다양한 방식으로 처리를 한다는 의미임. **

(3) 프로세스 간의 관계

  • 독립 프로세스: 해당 프로세스 하나만 따로 독립적으로 수행이 되며, 데이터 및 상태를 다른 프로세스와 공유하지 않음.
  • ** 실행결과는 입력에 의해서만 결정이되며, 같은 입력에 대해 항상 동일한 실행결과가 나타남. **
  • ** 쉽게말해, 그냥 독립적인 프로세스로 내부적으로 자신의 자원만 사용하고 다른 프로세스와 상호작용이 일체 없음. **
  • 대표적으로 메모장, 계산기, 그림판 등이 있으며, 다른 프로세스와 전혀 상호작용을 하지 않음.

  • 협력 프로세스: 수행 중인 다른 프로세스와 영향을 주고 받으며, 데이터 및 상태를 다른 프로세스와 공유함.
  • ** 대표적으로 컴파일러가 있으며, 해당 컴파일러는 코드 분석 프로세스, 최적화 프로세스, 실행 파일 프로세스가 존재함. **
  • ** 또한, 웹 브라우저도 메인 프로세스가 네트워크 프로세스를 통해 데이터를 받아오고 렌더링 프로세스로 화면에 그림. **
  • 실행결과는 실행순서에 좌우되기 때문에 비결정적이며, 같은 입력에 대해 항상 동일한 실핼경과를 보장하지 않음.

✅ 2. 병행성 문제

  • 병행성 문제: 협력 프로세스인 경우 발생이 가능한 문제를 의미함.
  • ** 대표적으로 상호배제, 동기화 통신 문제가 존재함. **

(1) 상호배제

  • 상호배제: 2개 이상의 프로세스(협력 프로세스)가 동시에 임계영역을 수행하지 못하도록 하는 것을 의미함.
  • 임계영역: 2개 이상의 프로세스가 동시에 사용하면 안 되는 공유자원을 엑세스하는 프로그램 코드 영역을 의미함.
  • ** 또한, 임계영역은 공유자원에 접근할 때, 데이터 일관성을 깨뜨리지 않도록 보호하기 위해 설정한 코드 단위의 구역임. **
  • ** 쉽게말해, 공유자원에 두 프로세스가 접근 할 때 동시에 사용해서 데이터의 일관성을 해치는 문제를 방지하는 것임. **
  • ** 즉, 공유 자원이더라도 동시에 사용을 하게 되면, 데이터의 일관성을 해칠 수 있음. 즉, 원하는 동작을 못할 수도 있음. **
  • 이미지를 통해 보면, A의 임계영역이 모두 수행이 된 후 B의 임계영역이 수행되어야 일관성이 깨지지 않음.

(2) 동기화

  • 동기화: 두 개 이상의 개체가 동일한 정보를 가지도록 맞추는 작업을 의미함. ( 처리 순서를 맞추는게 핵심임 )
  • 프로세스 동기화: 2개 이상의 프로세스가 존재 할 때, 해당 프로세스에 대한 처리순서를 결정하는 것을 의미함.
  • 쉽게말해, 프로세스간 공유하는 데이터가 논리적으로 맞아 떨어지게끔 맞추는 일련의 작업을 의미함.
  • 즉, 여러 프로세스가 공유 자원을 사용할 때, 서로 충돌하지 않도록 실행 시점을 조율하는 것을 의미함.
  • (1) 계좌1: 50,000원 / 계좌2: 30,000 존재, 계좌1 -> 계좌2 1만원 계좌이체 진행.
  • (2) 출금 프로세스 A에 1만원 추가, 계좌1 에 1만원 마이너스
  • (3) 입금 프로세스 B에 1만원 추가, 계좌2 에 1만원 플러스 // 매우 정상적인 프로세스로 볼 수 있음.
  • ** 상호배제만 존재한다면, 프로세스간의 경쟁은 없지만, 어떤 프로세스가 먼저 들어갈지는 랜덤이라 이걸 해결하기 위해서 동기화를 통해서 어떤 프로세스가 먼저 쓰이고 나중에 쓰이는지 순서를 조율할 수 있는 것임. **

  • 하지만, 위와 같이 입금 프로세스가 먼저 작동해 1만원 출금전에 계좌2에 입금이 된다면 문제가 발생 할 수 있음.
  • ** 즉, 출금 프로세스 -> 입금 프로세스로 가는 방식이 일반적이며, 정상적인 프로세스로 볼 수 있음. **
  • ** 상호배제만 존재한다면, 프로세스간의 경쟁은 없지만, 어떤 프로세스가 먼저 들어갈지는 랜덤이라 이걸 해결하기 위해서 동기화를 통해서 어떤 프로세스가 먼저 쓰이고 나중에 쓰이는지 순서를 조율할 수 있는 것임. **

[ 정리 ]

  • 동기화는 여러 프로세스가 공동의 목표를 위해 서로 발을 맞추는 거대한 개념임.
  • 즉, 상호 배제는 동기화라는 목적을 달성하기 위한 핵심적인 규칙으로만 볼 수 있음.
  • ** 결론은 상호 배제는 "동시에 접근 안 돼!"라는 안전 장치이고, 동기화는 그 안전 장치를 포함해 프로세스들이 순서대로 잘 돌아가게 만드는 전체적인 시스템 관리라고 이해하면 됨. **

(3) 통신

  • 프로세스 간 통신(IPC): 서로 다른 프로세스가 데이터를 주고받을 때 사용하는 프로세스 간 통신 개념임.
  • 쉽게말해, 프로세스는 원래 메모리를 공유하지 않고 독립적인 메모리 공간을 사용하기 때문에, 프로세스 간에는 서로 접근을 할 수 없음. 하지만, 프로세스끼리 정보를 주고 받기 위해 IPC 라는 개념을 이용함.

[ IPC를 구현하는 대표적인 통신 방식 ]

  • 어떻게 프로세스간 데이터를 주고 받을 것이냐에 대한 내용임.
  • 하나의 변수 사용: 특정 변수를 CPU 여러개가 공유 하는 방식이며, 강결합 시스템에서 사용 할 수 있는 방법임.
  • 메시지를 서로 주고받음: 강결합 도는 약결합 둘 다 가능하며, 프로세스간 메시지를 통해서 통신을 하는 방법임.

(4) 병행성 문제 총 정리

  • 프로세스 간 통신(IPC) 를 구현한 통신을 통해서 데이터를 공유 할 수 있음.
  • IPC 를 통해서 프로세스 간에 데이터를 주고받거나 자원을 공유 할 때 여러 프로세스나 스레드가 동시에 공유 자원에 접근하면서 상호배제, 동기화와 같은 핵심 문제가 생김.
  • ** 즉, 여러 프로세스가 공유 자원에 동시 접근할 때 발생하는 문제를 안전하게 제어하는 것이 병행성 제어의 근본 목적임. **
  • ** 이러한 병행성 문제를 해결하기 위해서 운영체제는 내부적으로 세마포어, 뮤텍스 등으로 해결 하고 있음. **

✅ 3. 세마포어

(1) 세마포어(semaphore)

  • 세마포어: 상호배제 및 동기화 문제를 해결하기 위한 도구로 볼 수 있음.
  • ** 정확히는 복수의 프로세스나 스레드가 공유 자원에 동시에 접근하는 것을 제어하기 위해 사용하는 "동기화 기법"임. **
  • ** 쉽게 말해, 공유 자원에 동시에 접근하는 것을 제어하는 신호 장치 라고 보면 된다. **
  • 세마포어 목적: 여러 프로세스가 동시에 같은 자원에 접근 할 때 발생하는 문제를 접근 순서 제어 장치로써 처리를 해줌.
  • 세마포어 원리: 정수 값 하나를 가지고 자원의 접근을 제어함. ( 이 값은 사용 가능한 자원의 개수를 의미할 수 있음. )
  • 세마포어의 정수형 변수는 가용 자원의 개수 또는 잠김이나 풀림의 상태를 의미함.

  • P 연산: 자원을 사용하기 전에 호출함. 세마포어 값을 1 감소시키며, 만약 값이 0보다 작아지면 자원이 생길 때까지 대기함.
  • V 연산: 자원 사용을 마친 후 호출함. 세마포어 값을 1 증가시키며, 대기 중인 프로세스가 있다면 깨워서 자원을 사용하게 함.
  • ** P와 V연산은 인터럽트가 되지않고, 하나의 단위로 처리가 됨. 즉, 방해받지 않고 하나의 단위로 처리가 됨. **

[ P 연산 - 동작 원리 ]

  • ** 자원을 사용하기 전에 권한을 획득하는 과정임. **
  • (1) 세마포어 값(S)을 확인
  • (2) S가 0보다 크면: 값을 1 감소시키고 다음 코드를 실행함 (자원 점유)
  • (3) S가 0이면: 자원이 없으므로 값이 커질 때까지 기다림 (대기 상태)

[ V 연산 - 동작 원리 ]

  • ** 자원 사용을 마친 후 권한을 반납하는 과정임. **
  • (1) 세마포어 값(S)을 1증가 시킴.
  • (2) 만약 해당 자원을 기다리며 대기 중인 프로세스가 있다면, 그중 하나를 깨워 실행하게 됨.

[ 정리 ]

  • 세마포어 정수값 자체는 공유 자원에 대해서 일관성을 유지하기 위해 사용되는 상태 정수값을 나타냄.
  • 해당 정수값을 다루는 연산이 P연산과 V연산임.
  • 세마포어 정수값 0: 특정 프로세스가 해당 공유 자원을 사용중임 나타냄.
  • 세마포어 정수값 1: 아무 프로세스도 해당 공유 자원을 사용하지 않음을 나타냄.
  • P 연산을 통해서 자원을 사용하기 전에 세마포어의 값을 확인 후 0보다 크면 1 감소 시키면서 자원을 점유해 코드를 시행하며, 세마포어의 값이 0이면 대기 상태로 들어가게 된다.
  • V 연산을 통해서 자원을 다 사용한 뒤 세마포어 값을 1 증가시킴으로써, 다른 프로세스가 점유를 할 수 있도록 상태를 바꿈.
  • ** 프로세스 간의 자원 접근(IPC)에서 서로 독립된 메모리 공간을 가진 두 프로세스가 파일, 프린터 같은 시스템 자원을 동시에 쓰려고 할 때 해당 세마포어를 커널 내부에 두고, 프로세스들이 커널의 세마포어를 거쳐가게 함으로써 충돌을 막음 **
  • ** 또한, 프로그래밍에서 하나의 프로세스 안에 있는 여러 스레드는 힙영역이나 전역 변수를 공유하는데, 이때 프로그래머가 코드 내에서 세마포어를 선언하여 스레드들이 공유 변수를 안전하게 수정하도록 제어할 수 있음. ( OS 시스템 콜 ) **
  • **** 마지막으로 세마포어는 여러개 존재 할 수 있으며, 해당 세마포어에 대응이 되는 대기 큐가 필요함. ****

(2) 세마포어(semaphore) - 상호배제 해결

  • (1) 임계영역에 다른 프로세스가 진입하지 못하게 막아줘야함.
  • (2) 임계영역에 대한 수행을 완료 하면 다른 프로세스가 새로이 수행 될 수 있게 해줘야함.
  • (3) 무한정 대기를 막고 적절한 시간 내에 임계영역 수행을 시작할 수 있게 만들어줘야함.
  • ** 위와 같이 상호배제를 해결하기 위한 일반적인 요구사항이 3가지가 존재함. **

  • 상호배제를 해결하기 위한 요구사항 3가지를 "세마포어" 를 이용해서 해결 할 수 있을 것이라 판단.
  • 임계영역에 들어가지 못하도록 진입영역이 존재하며, 이후에 영역의 끝에 해제영역을 통해 끝을 알릴 수 있음.

  • 진입영역에는 P연산 해제영역에는 V연산을 넣음으로써 세마포어를 활용할 수 있음.
  • ** 1(점유하지 않은 상태), 0(특정 프로세스가 점유한 상태) **
  • V연산: 마지막에 1로 변경해주며, 다음 대기 프로세스를 임계영역에 넣어도 됨을 알림.

  • (1) 세마포어 mutex 초기값은 "1"
  • (2) 대기 큐에 A, B, C 순으로 존재할 때, A가 먼저 수행
  • (3) A 프로세스 수행 -> P연산을 통해 세마포어 mutex 값 0으로 변경 후 임계 영역 수행
  • (4) A 프로세스 수행 중 B, C 프로세스가 P연산에 들어오게 되면 mutex 값을 확인 후 "0" 인 경우 대기 큐에 등록됨.
  • (5) B, C 프로세스는 P연산에서 멈춰 있는 상태인 것임.
  • (6) A 프로세스 임계영역 수행 후 -> V연산을 통해서 세마포어 mutex 값 "1" 변경 후 대기 큐의 프로세스 들은 P 연산에서 대기 큐로 들어간 상태에서 끝났기 때문에 이후에 작업인 임계영역을 바로 수행
  • 2~6번 반복하면서 수행
  • mutex 0: 이미 임계영역 수행중인 프로세스가 존재하는 상태
  • mutex 1: 임계영역 수행중인 프로세스가 존재하지 않는 상태
  • ** 이렇듯 상호 배제의 문제인 임계영역에 대한 점유를 확실하게 해줌 **

(3) 세마포어(semaphore) - 동기화 해결

  • ** 동기화 문제의 논리적인 데이터 일치에 따른 실행 순서를 보장하기 위해서 세마포어는 P연산, V연산을 앞뒤로 배치했으며, 대기 큐를 통해 순서 및 효율을 보장하고 있음. *

[ 세마포어를 통한 동기화 해결에 대한 개인적인 견해 ]

  • TIP: "세마포어는 '상호배제'라는 강력한 잠금/대기 메커니즘을 제공하는 도구일 뿐이고, 이를 배치하여 '동기화(순서 제어)'라는 시나리오를 완성하는 것은 개발자의 설계(논리)다."

'방송통신대학교 > ⚙️운영체제' 카테고리의 다른 글

[운영체제] 6강 - 교착상태(1)  (0) 2026.03.20
[운영체제] 5강 - 병행 프로세스(2)  (0) 2026.03.18
[운영체제] 3강 - 프로세스 스케줄링  (0) 2026.02.27
[운영체제] 2강 - 프로세스와 쓰레드  (0) 2026.02.19
[운영체제] 1강 - 운영체제 소개  (0) 2026.02.18
'방송통신대학교/⚙️운영체제' 카테고리의 다른 글
  • [운영체제] 6강 - 교착상태(1)
  • [운영체제] 5강 - 병행 프로세스(2)
  • [운영체제] 3강 - 프로세스 스케줄링
  • [운영체제] 2강 - 프로세스와 쓰레드
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • 전체
    오늘
    어제
    • 전체보기 (233)
      • 방송통신대학교 (87)
        • ⚙️컴퓨터의 이해 (11)
        • 💻컴퓨터과학 개론 (15)
        • 🔢자료구조 (14)
        • 🧬알고리즘 (10)
        • ⚙️운영체제 (14)
        • 🕸️이산수학 (11)
        • 🌍유비쿼터스 컴퓨팅 (11)
        • 🖥️컴퓨터과학과 (1)
      • 공부 (72)
        • 📚백엔드 공부 (6)
        • ☕Java (23)
        • 🌳Spring (13)
        • ⚙️C (12)
        • ⚡Python (15)
        • JavaScript (1)
        • 🛢️Database (0)
        • Algorithm Problem Solving (2)
      • 네트워크 (7)
        • 📜HTTP (7)
      • 스파르타코딩클럽 (64)
      • 정보 (2)
      • 정리가 필요한 글 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    자바
    그래프
    Python
    방송통신대학교
    컴퓨터과학 개론
    이산수학
    Java
    운영체제
    배열
    방송대
    알고리즘
    유비쿼터스
    컴퓨터의 이해
    함수
    spring
    파이썬
    컴퓨터과학과
    C언어
    방통대
    자료구조
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
junbin2
[운영체제] 4강 - 병행 프로세스(1)
상단으로

티스토리툴바