프로세스의 구조
프로세스는 크게 4가지 영역으로 구성이 되어있다.

Code(Text) 영역
- 프로그램의 소스를 컴파일하여 CPU가 해석 가능한 기계어가 저장되는 곳이다.
Data(data, bss) 영역
- 프로그램의 코드 중에서 전역(global) 변수나 정적(static) 변수, 상수(const)가 저장되는 곳.
- 초기화된 데이터는 Data 영역에 저장되고, 초기화 되지 않은 데이터는 BSS 영역에 저장된다.
Stack 영역
- 함수와 지역변수가 저장되는 곳으로, 임시적으로 데이터를 저장하는 공간이다.
- 함수의 호출과 함께 할당되며, 호출이 완료되면 소멸된다.
- 메모리의 높은 주소부터 낮은 주소 방향으로 할당된다.
Heap 영역
- 생성자, 인스턴스와 같이 동적으로 할당되는 데이터가 저장되는 곳이다. 이 공간으로 사용자에 의해 메모리 공간이 할당되거나 해제된다.
- 메모리의 낮은 주소부터 높은 주소 방향으로 할당된다.
***)
Stack 영역과 Heap 영역은 같은 공간을 사용한다.
따라서 우리가 흔히 아는 overflow는 각 영역이 할당을 많이하여 반대 영역을 침범하는 상황인 것이다.
stackoverflow : stack 영역이 heap 범위를 침범
heap overflow : heap 영역이 stack영역을 침범
아래 그림을 통해 정리하자면,
프로그램이 실행되면 운영체제는 메모리 공간을 할당해주어 프로세스 형태로 메모리에 적재가 된다.
이 프로세스는 앞서 설명한대로, 4개 영역(Code, Data, Stack, Heap) 영역으로 구분된다.

이런식으로 프로세스가 구성이 되면 CPU가 메모리를 읽으며 실행이 된다.
Reference
https://dev-ahn.tistory.com/15
https://watermelon-sugar.tistory.com/37
https://inpa.tistory.com/entry/👩%E2%80%8D💻-프로세스-⚔%EF%B8%8F-쓰레드-차이#
'운영체제' 카테고리의 다른 글
| 자바의 T 메모리 구조에 대해 알아보자. (0) | 2024.10.24 |
|---|---|
| 프로그램들은 어떻게 동시에(?) 실행될까? (0) | 2024.03.04 |
| Process 와 Thread의 자원 공유 (0) | 2024.02.26 |
| Process와 Thread란 무엇일까? (0) | 2024.01.31 |