Process Memory (프로세스 메모리)

프로세스의 메모리 영역

Posted by Seohyun Park, Aileen on January 18, 2024 · 2 mins read
OS, PROCESS

프로세스 메모리 (Process Memory)

프로세스가 생성되면 커널 영역에 PCB가 생성된다. 그렇다면, 유저 영역에는 프로세스가 어떻게 배치되는지가 궁금할 것 이다.

하나의 프로세스는 유저 영역에 크게 코드영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉘어 저장된다.

IMG_A581B62AB62A-1


코드 영역 (Code Area)

코드 영역은 텍스트 영역이라고도 불리며, 이곳에는 프로그램의 코드가 저장된다. CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리한다. 코드 영역에는 데이터가 아닌 CPU가 직접 실행할 수 있는 명령어만 저장되기 때문에, 쓰기가 불가능하며, 읽기만 가능하다.


데이터 영역 (Data Area)

데이터 영역은 프로그램의 전역 변수와 정적 변수가 저장되는 영역이다. 데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다. 데이터 영역은 읽기와 쓰기가 모두 가능하다.

이러한 데이터로는 전역 변수, 정적 변수, 상수, 문자열 등이 있다.


코드 영역과 데이터 영역은 그 크기가 변하지 않는다. 그렇기 때문에, 정적 메모리 할당(Static Memory Allocation) 이라고도 불린다.


반면, 힙 영역과 스택 영역은 그 크기가 변할 수 있다. 그렇기 때문에, 동적 메모리 할당(Dynamic Memory Allocation) 이라고도 불린다.


힙 영역 (Heap Area)

힙 영역은 사용자가 직접 관리할 수 있는 영역이다. 프로그래밍 과정에서, 힙 영역에 메모리 공간을 할당했다면, 언젠가는 해당 공간을 꼭 반환해야 한다. 그렇지 않으면, 메모리 누수(Memory Leak) 가 발생한다.

힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당된다. 그렇기 때문에, 메모리의 낮은 주소에서 높은 주소의 방향으로 할당되는 상향식 할당(Ascending Allocation) 이라고도 불린다.

힙 영역은 읽기와 쓰기가 모두 가능하다.


스택 영역 (Stack Area)

스택 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역이다. 스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다. 스택 영역은 읽기와 쓰기가 모두 가능하다.

일시적으로 저장할 데이터는, 스택 영역에 PUSH 되고, 더 이상 필요하지 않은 데이터는 POP 됨으로써 스택 영역에서 사라진다.

스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당되는 하향식 할당(Descending Allocation) 이라고도 불린다.