운영체제/프로세스와 스레드

프로세스와 스레드

iOS Developer 2025. 1. 19. 14:02

프로세스와 스레드

운영체제에서 프로세스는 실행 중인 프로그램을 의미하며, 스레드는 그러한 프로세스 내부에서 실행 흐름을 담당하는 단위다. 전통적으로 하나의 프로세스는 하나의 실행 흐름(단일 스레드)을 가졌지만, 스레드 개념이 도입되면서 하나의 프로세스가 여러 스레드를 만들어 동시에 여러 작업을 처리할 수 있게 되었다. 이 글에서는 프로세스와 스레드의 개념, 멀티 프로세스와 멀티 스레드의 차이점, 그리고 프로세스 간 통신(IPC)에 대해 살펴본다.

 


1. 스레드란 무엇인가?

스레드(Thread)프로세스를 구성하는 실행의 흐름 단위이다.

  • 프로세스에 여러 스레드가 존재할 수 있으며, 각 스레드는 독립적인 실행을 진행한다.
  • CPU 스케줄러는 스레드 단위로 CPU를 할당하기도 하여, 동시에 여러 스레드가(멀티 코어 환경에서) 병렬로 실행될 수 있다.

Image

(그림 출처: 혼자 공부하는 컴퓨터 구조 + 운영체제)

1.1 프로세스와 스레드의 관계

과거에는 하나의 프로세스가 단 하나의 실행 흐름만 가진다고 가정했다. 하지만 스레드를 도입함으로써, 한 프로세스여러 실행 흐름(스레드)을 동시에 운용할 수 있게 되었다.

Image

단일 스레드 프로세스

Image

멀티 스레드 프로세스

 


2. 스레드의 구조

스레드는 다음과 같은 요소를 자체적으로 관리한다.

  1. 스레드 ID
    • 각 스레드마다 고유한 식별자를 가진다.
  2. 프로그램 카운터(PC)레지스터 상태
    • 어떤 명령을 다음에 실행할지, CPU 레지스터에는 어떤 데이터가 들어있는지 등이 스레드마다 다르다.
  3. 스택 영역
    • 함수 호출 시 사용하는 스택은 스레드마다 분리되어 있어, 독립적인 함수 호출 체인을 유지한다.

코드(Code), 데이터(Data), 힙(Heap) 영역프로세스 자원스레드 간에 공유한다.

  • 이는 스레드가 프로세스의 자원을 함께 쓰면서, 개별 실행 흐름에 필요한 최소한의 정보만 따로 관리하기 때문이다.

Image

(그림 출처: 혼자 공부하는 컴퓨터 구조 + 운영체제)

 


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

3.1 멀티 프로세스(Multi Process)

  • 컴퓨터가 여러 프로세스동시에(병행) 실행하는 환경.
  • 각 프로세스는 독립된 메모리 공간(코드, 데이터, 힙, 스택 등)을 사용한다.
  • fork() 등을 통해 프로세스를 복제하면, OS는 프로세스의 자원을 통째로 복사한다(Copy-on-Write 최적화가 동원되기도 함).

3.2 멀티 스레드(Multi Thread)

  • 하나의 프로세스여러 스레드를 갖고, 이 스레드들이 동시에(또는 병행으로) 실행되는 환경.
  • 모든 스레드는 프로세스의 코드, 데이터, 힙 등을 공유한다.
  • 각 스레드는 고유한 스택레지스터를 사용하여 독립된 실행 흐름을 유지한다.

 


4. 멀티 프로세스 vs. 멀티 스레드

4.1 자원 공유

  • 멀티 프로세스: 프로세스끼리는 기본적으로 자원을 독립해서 사용한다(코드/데이터/힙이 복제됨). 다른 프로세스와 자원을 공유하려면 IPC(프로세스 간 통신) 기법을 써야 한다.
  • 멀티 스레드: 모든 스레드는 동일 프로세스 자원(코드, 데이터, 힙, 열린 파일 등)을 그대로 공유한다. 통신과 협력이 수월하지만, 한 스레드에 문제가 생기면 프로세스 전체가 영향을 받기 쉽다.

Image

(그림 출처: 혼자 공부하는 컴퓨터 구조 + 운영체제)

4.2 메모리 사용 효율

  • 멀티 프로세스: 같은 프로그램을 여러 프로세스로 띄우면 메모리에 중복된 영역이 많이 존재할 수 있다.
  • 멀티 스레드: 코드, 데이터, 힙 등을 공통으로 사용하므로, 메모리 오버헤드가 줄고 더 가볍게 병행 처리가 가능하다.

4.3 안정성

  • 멀티 프로세스: 한 프로세스가 문제를 일으켜도 다른 프로세스에 미치는 영향이 적다(메모리와 자원이 분리되어 있으므로).
  • 멀티 스레드: 한 스레드가 공유 자원(데이터 영역 등)을 잘못 다루면 프로세스 전체가 크래시 날 수 있다.

Image

(그림 출처: 혼자 공부하는 컴퓨터 구조 + 운영체제)

 


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

프로세스는 기본적으로 서로 독립된 자원을 사용하지만, 필요하다면 통신을 통해 데이터를 교환할 수 있다. 이를 프로세스 간 통신(IPC; Inter-Process Communication) 이라고 부른다.

5.1 IPC 방식 예시

  1. 파일(File)
    • 하나의 프로세스가 파일에 데이터를 쓰고, 다른 프로세스가 해당 파일을 읽어 정보를 주고받는다.
  2. 공유 메모리(Shared Memory)
    • 특정 메모리 영역을 두 개 이상의 프로세스가 공유하여, 전역 변수나 버퍼를 통해 직접 데이터를 교환한다.
  3. 소켓(Socket)
    • 네트워크 기반 통신이나, 로컬 소켓을 통해 프로세스 간 메시지를 주고받는다.
  4. 파이프(Pipe)
    • 단방향·양방향으로 데이터를 전송할 수 있는 커널 버퍼를 활용한다.
  5. 메시지 큐(Message Queue)
    • 운영체제가 제공하는 자료구조를 이용해, 메시지를 송·수신한다.

Image

(그림 출처: 혼자 공부하는 컴퓨터 구조 + 운영체제)

 


6. 요약

  1. 프로세스는 운영체제에서 실행 중인 프로그램의 개념이고, 스레드는 한 프로세스 내부의 실행 흐름 단위다.
  2. 멀티 프로세스는 프로세스 간 자원을 독립적으로 운용하여 안정성이 높지만, 자원 공유와 통신이 어렵다.
  3. 멀티 스레드는 같은 자원을 공유하여 협업이 쉽고 메모리 효율이 좋지만, 한 스레드 문제로 프로세스 전체가 영향을 받을 위험이 있다.
  4. IPC(Inter-Process Communication) 를 통해, 프로세스들 간에도 데이터를 교환할 수 있다. 파일, 공유 메모리, 소켓, 파이프, 메시지 큐 등이 대표적 기법이다.

 


참고 자료

  • 혼자 공부하는 컴퓨터 구조 + 운영체제
  • Operating System Concepts (A. Silberschatz, P.B. Galvin, G. Gagne)
  • Modern Operating Systems (A.S. Tanenbaum, H. Bos)