프로세스와 스레드

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' 카테고리의 다른 글

자바 프로그램 실행 과정 및 기본 구조  (0) 2024.01.02
'CS' 카테고리의 다른 글
  • 자바 프로그램 실행 과정 및 기본 구조
빨주노초잠만보
빨주노초잠만보
  • 빨주노초잠만보
    과거의 나를 통해 미래의 나를 성장시키자
    빨주노초잠만보
  • 전체
    오늘
    어제
    • 분류 전체보기 (94)
      • TEKHIT ANDROID SCHOOL (4)
      • Android Architecture (7)
      • Android (40)
      • PROJECT (5)
      • KOTLIN (10)
        • 코루틴의 정석 (3)
      • BACK END (12)
      • CS (2)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    Repository Pattern
    sealed class
    ThrottleFirst
    android clean architecture
    kotlin interface abstract 차이
    STATEFLOW
    Throttle
    flow
    callbackflow
    value class
    의존성 주입
    Clean Architecture
    kotlin interface vs abstract
    kotlin abstract class
    MVI
    kotlin array
    DataSource
    kotlin interface
    Livedata
    saeled class enum class 차이
    android Room
    kotlin 타입 소거
    리사이클러뷰 풀
    orbit
    DI
    sealed class vs enum class
    코틀린 코루틴의 정석
    repository
    interface vs abstract
    Room
  • 최근 댓글

  • 최근 글

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

티스토리툴바