리눅스/리눅스 응용

프로그램, 프로세스, 스레드의 개념

Linuxpia 2025. 8. 14. 01:54
반응형

프로그램, 프로세스, 스레드의 개념 정리

운영체제(Linux 포함)를 이해하려면 프로그램(Program), 프로세스(Process), 스레드(Thread) 개념을 명확히 구분할 필요가 있습니다.
이들은 모두 실행 단위와 관련 있지만, 메모리 사용 방식과 실행 상태에서 차이가 있습니다.


1. 프로그램(Program)

  • 정의: 디스크(저장 장치)에 저장된 실행 가능한 파일(Executable file)
  • 상태: 정적인(Static) 상태 — 실행되지 않은 코드와 데이터의 집합
  • 예시: /bin/ls, /usr/bin/vim, python3
  • 특징:
    • 실행되지 않으면 CPU, 메모리 자원을 사용하지 않음
    • 보통 바이너리 형태(ELF 형식) 또는 스크립트 형태

2. 프로세스(Process)

  • 정의: 실행 중인 프로그램
  • 상태: 동적인(Dynamic) 상태 — 메모리에 로드되어 CPU에서 실행 중
  • 구성 요소:
    1. 코드(Code): 프로그램 명령어
    2. 데이터(Data): 전역 변수, 초기화 값
    3. 힙(Heap): 동적 메모리 할당 영역
    4. 스택(Stack): 함수 호출, 지역 변수 저장
    5. 레지스터(Register) 상태
    6. 파일 디스크립터(File Descriptor)
  • 특징:
    • 운영체제는 각 프로세스에 PID(Process ID) 부여
    • 독립된 메모리 공간 보유
    • 한 프로그램에서 여러 프로세스 생성 가능
  • 예시:
  • # 'top' 실행 중인 상태 $ ps -ef | grep top user 1234 5678 0 10:12 pts/0 00:00:00 top

3. 스레드(Thread)

  • 정의: 프로세스 내에서 실행되는 실행 흐름의 최소 단위
  • 특징:
    • 같은 프로세스의 메모리 공간(코드, 데이터, 힙)을 공유
    • 스택(Stack)과 레지스터만 독립적으로 가짐
    • 프로세스보다 가볍고 생성 속도가 빠름
    • 멀티스레딩(Multi-threading)을 통해 병렬 처리 가능
  • 예시:
    • 웹 서버 프로세스가 여러 스레드를 생성하여 클라이언트 요청을 병렬 처리
    • 한 채팅 프로그램에서 UI 스레드, 메시지 수신 스레드, 파일 전송 스레드가 동시에 동작

4. 관계 비교

구분 프로그램 프로세스 스레드
상태 정적 동적 동적
메모리 없음(저장소에만 존재) 독립된 메모리 공간 프로세스 내 메모리 공유
실행 단위 아님 있음 있음
식별자 파일 경로/이름 PID TID(Thread ID)
생성 비용 없음 높음 낮음

5. 실행 흐름 예시

  1. 프로그램: /usr/bin/python3 — 디스크에 저장
  2. 실행 명령:
  3. python3 app.py
  4. 프로세스 생성: PID 3456
  5. 내부에서 스레드 여러 개 생성 (예: 메인 스레드, 백그라운드 작업 스레드)

6. 시각적 이해

프로그램 (저장 상태)
     ↓ 실행
프로세스 (독립된 메모리 공간)
     ├─ 스레드 1 (메인 실행 흐름)
     ├─ 스레드 2 (백그라운드 작업)
     └─ 스레드 3 (네트워크 요청)

정리

  • 프로그램: 실행되지 않은 코드와 데이터(정적 상태)
  • 프로세스: 실행 중인 프로그램(동적 상태, 독립된 메모리)
  • 스레드: 프로세스 내 실행 흐름의 최소 단위, 메모리 공유
  • 스레드는 가볍지만, 자원 공유로 인한 동기화 문제에 주의 필요