CS

프로세스(Process)와 스레드(Thread)

10Biliion 2025. 1. 21. 11:37

 

 

[ 프로세스란 무엇인가? ]

프로세스는 실행 중인 프로그램을 의미합니다. 운영 체제에서 메모리, CPU와 같은 시스템 자원을 할당받아 독립적으로 실행됩니다. 프로세스는 각자의 메모리 공간을 가지며, 다른 프로세스와 메모리 공간을 공유하지 않습니다.

프로세스의 주요 특징

  • 독립성: 각 프로세스는 고유의 메모리 영역(코드, 데이터, 힙, 스택)을 가지며, 다른 프로세스와 분리되어 실행됩니다.
  • 운영 체제의 관리: 프로세스는 운영 체제에 의해 생성, 관리, 종료됩니다.
  • 비용: 프로세스 간 문맥 전환(Context Switching)은 많은 시스템 자원을 소모합니다.

 

프로세스의 구성 요소

  • Code : 코드 자체를 구성하는 메모리 영역 (프로그램 명령)
  • Data : 전역 변수, 정적 변수, 배열 등
               초기화된 데이터는 Data 영역에 저장
               초기화되지 않은 데이터는 BSS 영역에 저장
  • Heap : 동적 할당 시 사용 (new(), malloc() 등)
  • Stack : 지역 변수, 매개 변수, 리턴 값 (임시 메모리 영역)

 

프로세스의 상태

  1. 생성(New): 프로세스가 생성 중인 상태.
  2. 준비(Ready): 실행 대기 중인 상태.
  3. 실행(Running): CPU를 점유하여 실행 중인 상태.
  4. 대기(Waiting): I/O 작업 등으로 인해 대기 중인 상태.
  5. 종료(Terminated): 실행이 끝난 상태.

 

멀티프로세스

하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 처리하도록 하는 것

 

  • 장점 : 안전성 (메모리 침범 문제를 OS 차원에서 해결)
  • 단점 : 각각 독립된 메모리를 갖고 있어 작업량이 많을수록 오버헤드 발생, Context Switching으로 인한 성능 저하

Context Switching 이란?
프로세스의 상태 정보를 저장하고 복원하는 일련의 과정

  • 동작 중인 프로세스가 대기하면서 해당 프로세스 상태를 보관
  • 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스 상태를 복구

문제점: 프로세스는 독립된 메모리 영역을 할당받으므로, 캐시 메모리 초기화와 같은 무거운 작업이 진행되면 오버헤드가 발생할 수 있음


[ 스레드란 무엇인가? ]

스레드는 프로세스 내에서 실행되는 작은 실행 단위입니다. 프로세스가 독립적인 메모리 공간을 가진다면, 스레드는 프로세스 내에서 메모리(코드, 데이터, 힙)를 공유하며 실행됩니다. 하나의 프로세스는 하나 이상의 스레드를 가질 수 있습니다.

스레드의 주요 특징

  • 경량성: 스레드는 프로세스보다 생성, 종료, 문맥 전환이 빠릅니다.
  • 자원 공유: 동일 프로세스 내의 스레드들은 메모리 공간(코드, 데이터, 힙)을 공유합니다.
  • 독립적인 실행 흐름: 각 스레드는 독립적인 스택과 프로그램 카운터를 가집니다.

 

스레드의 구성 요소

  1. 스택(Stack): 함수 호출 시 사용되는 지역 변수와 매개변수가 저장됩니다.
  2. 레지스터(Registers): 현재 실행 상태를 저장합니다.
  3. 프로그램 카운터(Program Counter): 현재 실행 중인 명령어의 주소를 저장합니다.

스레드는 Stack만 따로 할당받고 나머지 영역은 공유한다.
스레드는 독립적인 동작을 수행하기 위해 존재 = 독립적으로 함수를 호출할 수 있어야 함
함수의 매개 변수, 지역 변수 등을 저장하는 Stack 영역은 독립적으로 할당받아야 함

 

멀티스레드의 장점

  • 응답성(Response): 사용자 인터페이스가 빠르게 반응할 수 있습니다.
  • 자원 공유: 메모리를 공유하므로 자원 낭비를 줄일 수 있습니다.
  • 병렬성(Parallelism): 멀티코어 환경에서 작업을 병렬로 처리할 수 있습니다.

 

멀티스레드의 단점

  • 동기화 문제: 자원을 공유하기 때문에 데이터 동기화 문제가 발생할 수 있습니다.
  • 디버깅 난이도: 스레드 간의 복잡한 상호작용으로 인해 디버깅이 어렵습니다.

[ 프로세스와 스레드의 차이 ] 

특징 프로세스 스레드
정의 실행 중인 프로그램 프로세스 내의 실행 단위
메모리 공유 각자 독립적인 메모리 공간 동일 프로세스 내에서 메모리 공유
생성 비용 비교적 높음 비교적 낮음
문맥 전환 비용 높음 낮음
안정성 독립적이므로 상대적으로 안전 동기화 문제가 발생할 수 있음

[ 프로세스와 스레드의 관계 ]

하나의 프로세스는 최소 하나의 메인 스레드를 가집니다. 멀티스레드 프로세스에서는 여러 스레드가 프로세스의 자원을 공유하며 실행됩니다. 예를 들어, 웹 브라우저는 하나의 프로세스에서 렌더링, 네트워크 요청, 사용자 입력 처리를 각각의 스레드로 분리하여 실행합니다.


[ 프로세스와 스레드 예시 ]

프로세스 활용

  • 운영 체제에서 실행되는 애플리케이션(웹 서버, 데이터베이스 등)
  • 독립적인 작업이 필요한 경우(예: 서로 다른 사용자 요청 처리)

스레드 활용

  • UI 애플리케이션에서 사용자 입력과 백그라운드 작업을 분리
  • 네트워크 요청 처리(파일 다운로드, 스트리밍)
  • 병렬 데이터 처리(멀티코어 활용)

 

프로세스는 독립적으로 실행되며, 자원을 많이 소모하지만 안전성이 높습니다. 반면, 스레드는 가볍고 효율적이지만 동기화 문제가 발생할 수 있습니다.

'CS' 카테고리의 다른 글

해시 테이블(Hash Table) 이란?  (1) 2025.01.23
CPU 스케줄링 이란?  (3) 2025.01.21
Redis란? (고성능 인메모리 데이터 스토어)  (1) 2024.12.27
Blocking vs Non-Blocking  (0) 2024.12.26
클라우드 컴퓨팅과 AWS  (3) 2024.12.23