프로세스와 스레드

2023. 12. 31. 16:13·CS

📌 프로세스(Process)란?

 

프로세스란 하나의 실행 중인 프로그램을 뜻합니다.

  • 먼저 MS Word 프로그램을 실행한다고 가정해 보겠습니다. 프로그램을 실행하면 운영체제의 프로세서가 하나의 인스턴스를 생성하는데 이 것을 Process라고 하며 이 일련의 과정을 하나의 Task라고 표현합니다.
  • 이때 다수의 Task를 수행하는 것을 Multi Tasking이라고 합니다.

Multi Tasking

  • 프로세스는 독립적으로 실행되고 커널로부터 자원을 할당받습니다.
  • 각각의 고유한 프로세스 아이디(PID)를 가집니다.

📌 프로세스(Process)의 구조

프로세스를 실행하기 위해선 코드 데이터를 메모리에 올려 실행시켜야 합니다.

프로세스마다 고유한 가상 메모리 공간을 가지고 있는데 이 공간은 4개로 나눌 수 있습니다.

STACK 영역

  • 함수, 지역 변수, 매개 변수, RETURN 주소 등을 저장합니다.
  • 함수 호출 시에 stack 공간이 생성되며 함수가 종료되면 제거됩니다.
  • 함수를 재귀적으로 호출하면 크기가 동적으로 늘어날 수 있는데, 이때 힙과 스택의 메미리 영역이 겹치면 안 되기 때문에 사이 공간을 비워 놓습니다.

HEAP 영역

  • 동적으로 생성되는 데이터 구조나 객체를 저장합니다. 
  • 힙은 동적으로 할당되는 메모리 영역으로 프로세스가 실행 중에 동적으로 메모리를 할당받고 해제하는 데 사용됩니다.

CODE 영역

  • 프로그램 코드가 저장되는 공간으로 complie 되어 0과 1로 이루어진 기계어로 저장됩니다.

DATA 영역

  • 코드에 선언된 전역 변수, 정적 변수, 상수 저장
  • 프로그램 시작 시 초기화되 프로세스가 종료될 때까지 유지
  • BSS 영역 : 초기화되지 않은 변수가 0으로 초기화되어 저장
  • Data 영역 : 0이 아닌 다른 값으로 할당된 변수 저장 

📌 스레드(Thread) 란?

프로세스의 실행 가능한 가장 작은 단위로 프로세스는 여러 개의 스레드를 가질 수 있습니다.

프로세스의 구조 중 스택을 제외한 힙, 코드, 데이터는 스레드끼리 서로 공유합니다.

 

스레드는 각자 고유한 TLS(Thread Local Storage)를 갖고 있으며 운영 체제가 제공한 프로세스 수준의 공간으로 영역을 제한합니다.

 

🚨2024.03.18 수정

😮스레드의 내부 구조를 좀 더 직관적으로 살펴보겠습니다.

스레드는 프로세스 내에서 독립된 Stack을 할당받고 Code, Data, Heap 영역은 다른 스레드와 공유합니다. 이 말은 한 스레드가 프로세스 내의 공유 자원을 변경하면 프로세스 내부의 다른 스레드도 즉시 변경 결과를 확인할 수 있습니다.

💡 Stack을 개별로 가지는 이유

가장 큰 이유는 스레드의 안정성과 독립성을 유지하기 위함입니다.

  • 각 스레드가 서로 다른 함수 호출 및 반환 시퀀스를 가질 수 있기 때문에 각 스레드는 자체적인 스택을 유지하여 함수 호출 및 반환에 필요한 정보를 저장합니다
  • 멀티스레드 환경에서 데이터 무결성과 안정성을 유지하기 위해 스택을 가짐으로써 다른 스레드 간의 데이터가 충돌하지 않습니다.

📖데몬 스레드(Demon Thread)

  • garbage collection, 요청 처리, 리소스 청소, resource cleanup와 같은 백그라운드 태스크를 실행하며 낮은 우선순위 low priority를 가지고 있습니다.
  • 일반 스레드를 보조하기 때문에, 데몬 스레드는 일반 스레드가 실행 중일 때에만 동작하며 일반 쓰레드가 종료되면 데몬 스레드는 강제 종료됩니다.

'CS' 카테고리의 다른 글

Context Swtching을 통해 이해하는 프로세스와 스레드, 코루틴의 차이  (0) 2026.01.20
프로세스와 스레드, 코루틴의 Context Switching의 차이  (1) 2025.12.20
자바 프로그램 실행 과정 및 기본 구조  (1) 2024.01.02
'CS' 카테고리의 다른 글
  • Context Swtching을 통해 이해하는 프로세스와 스레드, 코루틴의 차이
  • 프로세스와 스레드, 코루틴의 Context Switching의 차이
  • 자바 프로그램 실행 과정 및 기본 구조
빨주노초잠만보
빨주노초잠만보
  • 빨주노초잠만보
    과거의 나를 통해 미래의 나를 성장시키자
    빨주노초잠만보
  • 전체
    오늘
    어제
    • 분류 전체보기 (108)
      • 우아한테크코스 (6)
      • TEKHIT ANDROID SCHOOL (4)
      • Android Architecture (8)
      • Android (38)
      • PROJECT (11)
      • KOTLIN (10)
        • 코루틴의 정석 (3)
      • BACK END (12)
      • CS (4)
      • 컨퍼런스 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Room
    Throttle
    Clean Architecture
    MVI
    value class
    ThrottleFirst
    android Room
    process Context Switching
    sealed class
    coroutine Context Switching
    Compose Typography
    Repository Pattern
    DataSource
    STATEFLOW
    orbit
    컴포즈 디자인 시스템
    Two pass process
    DI
    flow
    thread Context Switching
    android view lifecylce
    view 생명주기
    android clean architecture
    retrofit call
    repository
    callbackflow
    코틀린 코루틴의 정석
    의존성 주입
    2025 우아콘 후기
    안드로이드 디자인 시스템
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
빨주노초잠만보
프로세스와 스레드
상단으로

티스토리툴바