📌 프로세스(Process)란?
프로세스란 하나의 실행 중인 프로그램을 뜻합니다.
- 먼저 MS Word 프로그램을 실행한다고 가정해 보겠습니다. 프로그램을 실행하면 운영체제의 프로세서가 하나의 인스턴스를 생성하는데 이 것을 Process라고 하며 이 일련의 과정을 하나의 Task라고 표현합니다.
- 이때 다수의 Task를 수행하는 것을 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 |
---|