본문 바로가기

CS/운영체제

프로세스와 쓰레드 개념 정리

프로세스와 쓰레드 개념 정리 – 운영체제 핵심 지식

 

백엔드 개발자라면 한 번쯤 면접에서 “프로세스와 쓰레드의 차이” 질문을 받아본 경험이 있을 것입니다.

이 글에서는 프로세스와 쓰레드의 개념부터 메모리 구조, 운영체제 관점의 관리 방식까지 정리했습니다.

 

 

프로세스(Process)란?

 

프로세스의 정의

  • 프로세스: 실행 중인 프로그램 (동작하는 능동적 개체)
  • 프로그램: 실행되지 않는 정적, 수동적 개체
  • PID(Process ID): 프로세스를 구분하기 위해 할당된 고유 

 

운영체제로부터 자원 할당

운영체제는 프로세스가 동작할 수 있도록 필요한 자원을 할당합니다.

  • 자원: CPU, 메모리, 입출력 장치, 파일 등
  • 동작: CPU가 프로세스 명령어를 실행

 

운영체제가 하는 작업

  • 프로세스 생성 및 종료 관리
  • 프로세스 실행을 위한 스케줄링
  • 프로세스 상태 관리 (대기, 실행 등)

프로세스의 구성

메모리 구조

프로그램 실행에 필요한 코드와 데이터로 구성됩니다.

 

 구분                                        설명

코드 영역 프로그램 자체 (명령어 코드)
데이터 영역 상수, 변수 값 등 (정적 데이터 영역 / 스택 영역 / 힙 영역)

 

 

프로세스 제어 블록(PCB)

운영체제가 각 프로세스를 관리하기 위해 유지하는 정보입니다.

프로세스가 번갈아 실행될 때 PCB의 정보가 활용됩니다.

 

항목                                                                       설명

프로세스 번호 (PID) 고유 식별자
프로세스 상태 실행, 대기, 준비 상태 등
프로그램 카운터(PC) 다음 실행할 명령어의 메모리 위치
레지스터 CPU 자원을 잠시 넘길 때 필요한 정보 저장
메모리 관리 정보 메모리 사용에 대한 정보
프로세스 우선순위 스케줄링 시 우선순위 결정
회계 정보 사용한 CPU 시간, 실행 시간 등 관리

 

프로세스 상태

  • 생성: 시스템에 작업이 등록된 상태
  • 준비: 실행 준비 완료, CPU 할당 대기
  • 실행: 프로세스가 CPU에서 처리 중
  • 대기: I/O 작업 등으로 대기 상태
  • 종료: 실행 종료

 

프로세스 상태 변화

생성 → 준비 ↔ 실행 → 대기 → 준비 → 실행 → 종료

 

  • 생성된 프로세스는 준비 큐에 들어감
  • 준비 상태에서 디스패치(Dispatch)를 통해 실행 상태로 전환
  • 실행 도중 I/O 요청 등으로 대기 상태 진입
  • 대기 상태에서 이벤트 완료 후 다시 준비 상태로 이동
  • 더 이상 실행할 작업이 없거나 종료 신호를 받으면 종료

 

프로세스 생성 방법

  • 사용자가 프로그램을 직접 실행
  • 한 프로세스가 다른 프로세스를 생성
  • 프로세스 생성 시스템 호출 이용

 

주요 시스템 호출

OS시스템 호출설명

UNIX, Linux fork() 부모 프로세스 복제본 생성
UNIX, Linux exec() 새로운 프로그램으로 자식 프로세스 실행
Windows CreateProcess() 새로운 프로그램으로 자식 프로세스 생성

 

부모 프로세스와 자식 프로세스

PID = 10 PID = 25
데이터 영역 공유 여부 없음 데이터 영역 공유 여부 없음
메모리 구조 독립 메모리 구조 독립
독립적인 PCB 독립적인 PCB

 

프로세스 종료 방법

  • 모든 작업 완료 시 정상 종료
  • 부모 프로세스가 자식 프로세스를 강제 종료
    • 종료 시스템 호출 이용
    • 자식 PID를 사용해 종료 명령
  • 부모 프로세스 종료 시 운영체제가 자식 프로세스도 종료

쓰레드(Thread)란?

전통적인 프로세스

  • 하나의 프로그램 실행 단위
  • 자원 소유의 단위 (메모리 독립)
  • 하나의 제어 흐름
  • 프로세스 내 다중 처리 불가능

 

쓰레드의 등장

  • 프로세스 내 다중 처리를 위해 제안된 개념
  • 디스패칭(실행)의 단위
  • 자원 소유의 단위는 프로세스가 유지
  • 하나의 프로세스 내 여러 쓰레드 존재 가능

쓰레드 특징

  • 실행에 필요한 최소 정보만 유지
    • 프로그램 카운터(PC)
    • 레지스터 값
    • 스택 영역
  • 코드, 데이터, 힙 영역은 같은 프로세스 내 다른 쓰레드와 공유

 

전통적인 프로세스 vs 쓰레드 기반 프로세스

항목전통적인 프로세스쓰레드 기반 프로세스

자원 공유 없음 (각 프로세스 메모리 독립) 동일 프로세스 내 자원 공유
실행 흐름 하나 여러 실행 흐름
컨텍스트 스위칭 비용 높음 낮음
병렬 처리 불가능 가능 (멀티코어, 멀티 CPU 환경)

 

다중 쓰레드 프로세스

  • 멀티코어 시스템에서 병렬 처리 가능
  • 쓰레드 구성을 잘 하면 효율적
    • 계산용 쓰레드
    • 입력용 쓰레드
    • 백업용 쓰레드 등

결론

  • 프로세스: 자원 소유 및 실행의 단위
  • 쓰레드: 프로세스 내 실행 흐름의 단위
  • 실무 중요도: 멀티코어 환경, 서버 최적화, 병목 제거 등에서 핵심 개념