본문 바로가기

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