cs study/운영체제

2.운영체제 : 프로세스와 스레드

지그농 2026. 4. 7. 16:57

해당 내용은 이것이 컴퓨터 과학이다 with CS 기술면접을 학습한 기록입니다.

 

목차
1. 프로세스란 ?
2. 멀티 프로세스와 멀티 스레드
3. 프로세스 간 통신 (IPC)

 

 

운영 체제에 있어 프로세스와 스레드는 가장 핵심 개념이 된다. 

해당 학습 글에서 프로세스의 이해부터 멀티 프로세스와 멀티 스레드의 차이, 그리고 프로세스 간 통신까지 흐름을 정리하였다.


1. 프로세스(Process)란?

1-1. 프로세스의 개념과 메모리 구조

프로세스는 실행 중인 프로그램을 의미한다. 메모리에는 컴퓨터가 실행되는 순간부터 다양한 프로세스들이 적재되어 실행된다. 

 

프로세스의 유형을 막론하고 하나의 프로세스를 구성하는 메모리 내의 정보는 다음과 같이 구성된다. 

 

프로세스 메모리 구성 (출처 : 생성형 AI로 제작)

  • 커널 영역 : PCB
  • 사용자 영역 : Stack, Heap, Data, Code

 

사용자 영역에 저장되는 메모리 영역은 두 가지로 정적 할당 영역과 동적 할당 영역으로 구분할 수 있다.

  1. 정적 할당 영역 : 프로그램 실행 시 크기가 결정되고, 실행 동안 변하지 않는 영역
    • 코드 영역 (Code) : 실행할 명령어가 저장되어 있는 공간 (텍스트 영역), 쓰기가 금지된 읽기 전용 공간
    • 데이터 영역 (Data) : 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간, 정적 변수와 전역 변수가 대표적
  2. 동적 할당 영역 : 프로그램 실행 중 필요에 따라 크기가 변하는 영역 
    • 힙 영역 (Heap) : 사용자(개발자)가 직접 메모리에 할당/반환이 가능한 저장 공간, 메모리 누수 문제 발생 가능, 가비지 컬렉션 기능 활용 
    • 스택 영역 (Stack) : 데이터 영역에 저장된 값과 달리 일시적으로 사용할 값들이 저장되는 공간, 함수 호출 시 자동으로 생성되고 사라지는 매개변수, 지역 변수, 함수 복귀 주소 등이 대표적

1-2. PCB (Process Control Block)

PCB는 운영체제가 프로세스를 식별하고 관리하기 위해 사용하는 커널 영역의 핵심 자료구조이다.

 

프로세스가 생성될 때 커널 영역에 함께 생성되며, 프로세스 실행이 종료되면 함께 제거된다.

즉, 운영체제는 PCB를 통해 각 프로세스의 상태를 추적하고 제어한다.

 

운영체제마다 차이가 있지만 기본적으로 다음과 같이 구성되어 있다.

  • 프로세스 ID (PID): 각 프로세스를 고유하게 식별하는 값
  • 프로세스 상태: 실행, 대기, 준비 등의 현재 상태
  • 프로그램 카운터 (PC): 다음에 실행할 명령어의 주소
  • CPU 레지스터 값: 프로세스 실행 중 사용되던 레지스터 정보
  • 스케줄링 정보: CPU 할당 우선순위 및 스케줄링 관련 데이터

 

여러 PCB들은 커널 내에 프로세스 테이블(Process Table)의 형태로 관리한다. 

PCB Table

 

이미지 출처 : https://yoongrammer.tistory.com/52

 

프로세스 제어 블록 (PCB: Process Control Block) 알아보기

프로세스 제어 블록 (PCB: Process Control Block) 알아보기 PCB(Process Control Bolock)는 운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳으로, 프로세스의 상태 정보를 저장하는 자료구조입니

yoongrammer.tistory.com

 

 

 

운영체제는 이 테이블을 기반으로 '어떤 프로세스'를 실행할지 결정하고, 현재 상태를 전환하며 자원을 할당한다.

프로세스의 CPU 사용 시간은 타이머 인터럽트에 의해 제한되는데, PCB는 이 때 문맥 교환의 핵심 역할을 한다.

 

문맥 교환 (Context Switching)이란 PCB에서 문맥을 복구하여 새로운 프로세스를 실행하는 것을 의미하며, 프로세스 A에서 프로세스 B로 문맥이 전환되는 과정을 도식화 하면 다음과 같다.

[프로세스 A 실행]
   ↓ (타이머 인터럽트 발생)
[PCB A에 상태 저장]
   ↓
[PCB B에서 상태 복원]
   ↓
[프로세스 B 실행]
   ↓ (타이머 인터럽트 발생)

 

 

운영체제는 타이머 인터럽트를 통해 일정 시간마다 CPU 제어권을 강제로 회수한다.

이 과정에서 (1) 현재 실행 중인 프로세스의 상태를 PCB에 저장하고 (2) 다음에 실행할 프로세스를 선택한 뒤 (3) 해당 프로세스의 상태를 복원하여 실행한다. 

 

이처럼 문맥 교환을 통해 여러 프로세스가 끊임없이 빠르게 번갈아가며 수행되는데, 너무 빈도가 잦아지면 그만큼 저장, 복원 비용이 발생하기 때문에 비효율적이며 나아가 캐시미스와 오버헤드가 발생할 가능성이 높아진다. 


1-3. 프로세스의 상태

문맥 교환 과정에서 상태를 저장하고 복원한다고 했는데, 프로세스는 실행 과정에서 다음과 같은 상태를 가진다.

 

프로세스의 5가지 상태 (출처: 이것이 취업을 위한 컴퓨터 과학이다.)

 

  • 생성 상태 (New) : 프로세스 생성 중인 상태, 즉 메모리에 적재되어 PCB를 할당받은 상태. 생성이 완료되면 준비 상태로 이동한다.
  • 준비 상태 (Ready) : CPU 할당을 대기하고 있는 상태. CPU가 할당되면 즉시 실행 상태로 전환되며, 이 과정을 디스패치(Dispatch)라고 한다.
  • 실행 상태 (Running): CPU를 할당받아 실제로 명령어를 수행하는 상태이다. 타이머 인터럽트가 발생하여 시간을 모두 사용하면 다시 준비 상태가 되고, 실행 도중 입출력장치를 사용하면 해당 작업이 끝날 때 까지 대기 상태가 된다.
  • 대기 상태 (Waiting) : 프로세스가 입출력 작업을 요청하거나 바로 확보할 수 없는 자원을 요청하는 등 실행이 바로 불가능할 경우 대기 상태가 된다. 해당 작업이 완료되면 다시 준비 상태가 된다.
  • 종료 상태 (Terminated) : 프로세스가 종료된 상태로, 운영체제는 PCB와 사용한 메모리를 정리한다.

 

프로세스 상태는 단순한 개념이 아니라, 문맥 교환이 언제 발생하는지를 설명하는 기준이 된다. 

즉, 운영체제는 이러한 상태 전이를 기반으로 프로세스를 스케쥴링하고 CPU를 효율적으로 사용한다.

 


2. 멀티 프로세스와 멀티 스레드

2-1. 멀티 프로세스 (Multi-Process)

여러 개의 프로세스를 동시에 실행하는 방식을 말한다. 

각 프로세스들은 기본적으로 자원을 공유하지 않고, 독립적인 메모리 공간을 사용하여 실행된다.

 

따라서 프로세스들은 서로에 직접적인 영향을 끼치지 않아 높은 안정성을 확보할 수 있으나, 문맥 교환 비용과 프로세스 생성 비용이 발생할 수 있다. 

 


2-2. 멀티 스레드 (Multi-Thread)

스레드는 프로세스를 구성하는 실행 단위로, 프로세스가 할당받은 자원을 이용해 프로세스의 작업을 수행하며

프로세스를 동시에 실행하는 여러 스레드를 멀티 스레드라고 한다.

멀티 스레드 구조

 

이미지 출처 : https://medium.com/@niingg/process-vs-thread-3b47f1ed3e3f

 

Process vs Thread

Process Each process provides the resources needed to execute a program. A process has a virtual address space, executable code, open…

medium.com

 

 

하나의 스레드는 각각의 스레드 ID, 레지스터 값, 스택을 가지고 있기 때문에 스레드마다 다음에 실행할 주소를 가질 수 있고, 연산 과정의 임시 저장값을 가질 수 있다. 

 

위의 그림과 같이 스레드는 같은 프로세스에 속하기 때문에 프로세스의 코드 영역, 데이터 영역, 힙 영역을 공유할 수 있다.


2-3. 멀티 프로세스 VS 멀티 스레드 

멀티 프로세스와 멀티 스레드의 가장 큰 차이는 자원 공유 여부에 있다. 

서로 다른 프로세스들은 자원을 공유하지 않기 때문에 독립적으로 실행되는 반면, 같은 프로세스를 실행하는 여러 스레드들은 프로세스의 자원을 공유한다.

 

따라서 멀티 스레드 환경에서는 쉽게 협력하고 통신할 수 있게 되는데, 한 스레드에 문제가 발생할 경우 프로세스 전체의 문제가 될 수 있는 안정성 문제가 발생할 수 있다. 반면에 멀티 프로세스 환경에서는 서로에게 거의 영향을 끼치지 않기 때문에 멀티 스레드 환경에 비교하면 안정적이다.

 

표로 비교하면 다음과 같다.

항목 멀티 프로세스 멀티 스레드
메모리 독립 공유
안정성 높음 낮음
생성 비용 작음
문맥 교환 느림 빠름

 


3. 프로세스 간 통신 (IPC)

3-1. IPC가 필요한 이유

프로세스는 기본적으로 자원을 공유하지 않고, 서로 독립적인 메모리를 사용하기 때문에 별도의 통신 방법이 필요하다. 이를 프로세스 간 통신, IPC (Inter-Process Communication)이라고 부르며 '공유 메모리', '메시지 전달'로 크게 2 가지 유형이 있다.


3-2. 공유 메모리 (Shared Memory)

공유 메모리 방식

이미지 출처 : https://www.geeksforgeeks.org/operating-systems/ipc-shared-memory/

 

IPC through shared memory - GeeksforGeeks

Your All-in-One Learning Portal: GeeksforGeeks is a comprehensive educational platform that empowers learners across domains-spanning computer science and programming, school education, upskilling, commerce, software tools, competitive exams, and more.

www.geeksforgeeks.org

 

 

공유 메모리 기반 IPC는 프로세스 간에 공유하는 메모리 영역을 설정하여 데이터를 주고 받는 통신 방식이다.

 

여러 프로세스가 공유 메모리를 통해 변수나 파일을 활용할 수 있어, 마치 자신의 메모리 영역 처럼 읽고 쓰는 것이 가능해 커널의 개입이 거의 없다.

따라서 통신 속도가 빠르지만, 서로 공유 메모리 영역을 동시에 읽고 쓸 경우 데이터의 일관성이 훼손되는 레이스 컨디션 문제가 발생할 수 있다.


3-3. 메시지 전달 (Message Passing)

이미지 출처 : https://www.geeksforgeeks.org/operating-systems/inter-process-communication-ipc/

 

메시지 전달 IPC는 프로세스 간 데이터를 커널을 통해 주고받는 통신 방식이다.

공유 메모리 방식과 달리, 프로세스 간 직접적인 메모리 공유 없이 운영체제가 중간에서 데이터를 전달해주는 구조를 가진다.

 

[프로세스 A] → (send) → [커널] → (recv) → [프로세스 B]

 

메시지를 보내는 시스템 콜 send(), 메시지를 받는 시스템콜 recv()가 정해져 있으며 각 프로세스는 두 시스템 콜을 호출하며 메시지를 송수신할 수 있다.

 

해당 과정을 통해 커널이 통신을 관리하기 때문에  공유 메모리 기반 IPC에 비해 레이스 컨디션, 동기화 등의 문제가 발생할 가능성이 적어 안정성이 높지만 그만큼 통신 속도는 상대적으로 느리다. 

 

메시지 전달 기반 IPC는 대표적으로 파이프, 시그널, 소켓, 원격 프로시저 호출 (RPC) 등이 있다.

  • 파이프 (pipe) : 단방향 프로세스 간의 통신 도구
  • 시그널 (signal) : 프로세스에게 특정 이벤트가 발생했음을 알리는 비동기적인 신호. 시그널이 발생하면 인터럽트 처리 과정과 유사하게, 시그널 처리를 위한 시그널 핸들러를 실행한 뒤 실행을 재개한다. 

26.04.07 기준 필기 시험 복기 후 추가 (리눅스 OS에서의 시그널 정리)

더보기
* 리눅스 운영체제의 대표적인 시그널 예시. 

시그널 설명 기본 동작
SIGCHLD 자식 프로세스 종료 무시
SIGILL 허용하지 않은 명령어 실행 코어 덤프 생성 후 종료
SUGINT 키보드 인터럽트 (Ctrl + C) 종료
SIGKILL 프로세스 종료 (핸들러 재정의 불가능) 종료
SIGSEGV 잘못된 메모리 접근 코어 덤프 생성 후 종료
SIGTERM 프로세스 종료 (핸들러 재정의 가능) 종료
SIGUSR1 사용자 정의 시그널 종료
SIGUSR2

** 코어 덤프 (core dump) 

비정상적으로 프로세스가 종료되는 경우 생성되는 파일로, 특정 시점에 작업하던 메모리 상태가 기록되어 있어 디버깅 용도로 사용할 수 있다.
  • 원격 프로시처 호출(RPC) : 원격에 있는 프로세스의 함수를 호출하는 방식의 IPC 기술, 프로그래밍 언어나 플랫폼과 무관하게 성능 저하를 최소화 하고, 메시지 송수신이 가능하기 때문에 대규모 트래픽 처리 환경, 서버 간 통신환경에서 사용하는 경우가 많다.
  • 소켓 : 네트워크를 통해 프로세스 간 통신을 가능하게 하는 방식으로, 다른 시스템 간 통신에도 사용된다.