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

2025. 5. 22. 20:19·Software Engineering/Software Development Principles

컴퓨터에 조금이라도 관심이 있다면 들어볼법한 단어인 프로세스와 스레드는 컴퓨터 운영 체제에서 중요하게 사용되고 있습니다. 여기서 한가지 더 `.exe` 확장자로 되어 실행하는 파일을 프로그램이라고 부르기도 하는데 이 3가지 개념에 대해서 정리해보겠습니다.,


Program

프로그램은 흔히 말해 컴퓨터에서 실행 할 수 있는 파일을 말하며 일상 생활에도 많이 사용되는 카카오톡이나, 엑셀과 같은 파일들을 프로그램이라고 불리고 있습니다. 프로그램은 실행 가능한 정적인 코드를 가지고 있는 파일이라고 볼 수 있으며 (예: `.exe`,`.out`) 보통 디스크에 저장된 파일이라고 보시면 됩니다. 프로그램은 실행은 가능하지만 아직 실행전 상태인 파일들 이며 완성된 프로그램은 쉽게 말해 거대한 코드 덩어리라고 볼 수도 있습니다.


Process

이제 프로세스는 프로그램과 다르게 프로그램이 실행중인 상태를 말하며 실행 중이기에 메모리에 적재된 상태입니다. 즉, 프로그램과 프로세스의 차이는 간단하게 실행 중이냐, 아니냐 로 볼 수 있고 다르게 말하면 메모리를 사용중이냐? 혹은 디스크나 메모리에 적재되어 있나? 로 차이를 둘 수 있겠습니다. 

프로세스는 고유의 메모리 공간을 가지게 되며 프로세스 내부에는 최소 하나의 스레드(Thread)를 가지고 있습니다. 또한 운영체제에 의해서 PCB(Process Control Block) 관리를 하게됩니다.

 

PCB(Process Control Block)

PCB란 운영체제가 프로세스를 식별하고 관리하기 위한 구조체나 정보의 묶음이라고 볼 수 있습니다. PCB는 이미 CPU를 사용중인 상태의 다른 프로세스가 CPU를 사용하기 위해 이전 프로세스의 상태를 저장하고 새로운 프로세스의 상태를 CPU에게 적재하는 문맥교환(Context Switch)를 통해 생성되고 제거 됩니다.

항목 설명
Process ID 프로세스 고유 식별자
Process State 현재 상태(예: 실행 중, 준비 상태, 대기 상태 등)
Program Counter 다음에 실행할 명령어의 주소
CPU Registers 실행 도중 저장된 레지스터 값들(문맥 전환시 복구용)
메모리 정보 코드 영역, 데이터 영역, 힙, 스택 등의 메모리 정보
스케줄링 정보 우선 순위, 스케중링 큐 포인터 등
I/O 정보 연관된 입출력 장치 및 버퍼 정보
보안/권한 정보 사용자 ID,  그룹 ID, 접근 권한 등
링크 정보  부모/자식 프로세스, 스레드 그룹 등 연결정보

문맥교환 (Context Switch)

CPU가 동시에 여러개의 프로세스를 실행시키는 것처럼 보이지만, 사실은 CPU가 재빠르게 여러 프로세스를 번갈아가며 실행하고 관리하고 있는 것입니다. 이때 프로세스가 번갈아가면서 처리하는것을 문맥교환(Context Switching) 이라고 합니다. 문맥교환에는 비용이 발생하며 프로세스를 처리하는것보다 프로세스를 교체하는 과정이 더 오래 걸린다면 부하가 발생하여 Context Switching Overhead가 걸리게 되며 해당 현상의 처리 방법으로는 쓰레드 수 제한, 코루틴 도입, 우선순위 기반 스케줄링 등이 있습니다.


스레드(Thread)

스레드는 프로세스 내에서 실행되는 흐름의 단위 즉, 프로세스의 일부로서 CPU에서 실행되는 단위로 볼 수 있습니다. 하나의 프로세스 안에서 여러가지 작업들 흐름이 동시에 진행되며 이러한 흐름을 스레드라고 하고 여러개가 있다면 멀티(다중) 스레드라고 부릅니다. 일반적으로 하나의 프로그램은 하나 이상의 프로세스, 하나의 프로세스는 반드시 하나 이상의 스레드를 가지게 되며 스레드가 하나 밖에 없다면 메인 스레드(Main Thread)가 있어야 실행이 됩니다.

스레드의 특징

항목 설명
실행 흐름 하나의 스레드는 하나의 작업 흐름을 가짐
프로세스 공유 동일 프로세스 내 다른 스레드들과 메모리 공간 공유
독립 자원 스택, 레지스터, 프로그램 카운터는 각 스레드가 독립적으로 가짐
경량 프로세스보다 생성, 제거, 전환이 빠름
동시성 처리 적합 한 프로세스 내 여러 스레드가 동시에 작업 수행 가능

자원 공유

스레드는 프로세스가 할당 받은 자원을 이용하는 실행 단위로서, 스레드끼리 프로세스의 자원을 공유 하기에 동시 작업이 가능합니다. 그 중에 같은 포르세스 안의 스레드 끼리 공유하는 자원으로는 아래와 같습니다.

  • 코드 영역: 실행할 프로그램 코드
  • 데이터 영역: 전역 변수 등
  • 힙 영역: 동적 메모리 영역(malloc, new등)
  • 파일 디스크립터: 열려 있는 파일, 소켓 등

또한 스레드 마다 개별로 존재하는 독립 자원도 존재합니다.

  • 스택: 함수 호출, 지역 변수 등 저장
  • 레지스터: 계산용 임시 저장소
  • 프로그램 카운터: 현재 실행 중인 명령어 주소
  • TCB: 스레드 관리 정보

정도가 독립적 자원으로 볼 수 있습니다. 스레드가 자원 공유를 하는 이유는 불필요한 복사 없이 여러 스레드가 동시에 접근이 가능하게 하여 메모리의 효율을 올리며, 스레드 간 데이터 전달이 간단하고, 메모리 복사 없이 바로 작업이 가능하기에 처리 속도도 향상 됩니다.

'Software Engineering > Software Development Principles' 카테고리의 다른 글

Dead Lock ( 교착 상태 )  (0) 2025.05.27
Hash Code (해시 코드)  (0) 2025.05.26
Callback Function (콜백 함수)  (0) 2025.05.21
큐 (Queue)  (0) 2025.05.19
Virtual Memory ( 가상 메모리 )  (0) 2025.05.16
'Software Engineering/Software Development Principles' 카테고리의 다른 글
  • Dead Lock ( 교착 상태 )
  • Hash Code (해시 코드)
  • Callback Function (콜백 함수)
  • 큐 (Queue)
Mr.Vulpes
Mr.Vulpes
여우비가 내리는 시간입니다.
  • Mr.Vulpes
    여우비 개발실
    Mr.Vulpes
  • 전체
    오늘
    어제
    • Browse All Categories (42) N
      • Unreal (10)
        • Core Concepts (7)
        • Unreal For C++ (3)
      • C++ Programming (3) N
        • C Basic (3) N
      • DirectX (4) N
        • Basic (2) N
        • DirectX - Class (1) N
      • Math & Physics (3)
        • Vectors (3)
      • Software Engineering (22) N
        • Software Development Princi.. (18) N
        • Design Pattern (3)
  • hELLO· Designed By정상우.v4.10.3
Mr.Vulpes
Process & Thread(프로세스 & 스레드)
상단으로

티스토리툴바