Search
Duplicate
⚙️

프로세스 주소 공간

생성일
2023/02/23 01:15
태그
OS

프로세스 주소 공간

프로세스는 자원을 할당받아 프로그램이 실행되고 있는 상태 인스턴스이다.
프로세스는 독립된 메모리 영역을 할당받고, 효율적으로 사용할 수 있도록 구조화하여 관리한다.
이를 프로세스 주소 공간 이라고 한다.

프로세스 주소 공간 구조

할당된 메모리 영역은 아래와 같이 Code , Data, Heap, Stack 영역으로 구분된다.

텍스트(Text) 영역 (코드 영역)

코드를 실행하기 위한 영역으로 프로그램을 실행시키기 위한 구성인 명령문들이 저장된다.
제어문 , 함수 , 상수 들이 포함된다.
CPU가 해석 가능한 기계어로 저장되고, 프로그램이 수정되면 안되므로 ReadOnly 상태로 저장되어 있다.

데이터(Data) 영역

코드의 전역변수, 정적변수 등이 저장되는 공간이다.
Stack에 저장되는 변수들과 비교하면, main 함수가 실행되는 동안 메모리 상에 남아있는 변수들을 저장한다는 차이점이 있다.
데이터 영역은 크게 초기화된 데이터 영역(initialized data segment)초기화 되지 않은 데이터 영역(uninitialized data segment) 로 나뉜다.

힙(Heap) 영역

사용자에 의해 공간이 동적으로 할당 및 해제되는 동적 메모리 할당 영역이다.
따라서 런타임에 크기가 결정된다.
언어마다 차이가 있지만, 주로 참조형 데이터(Class 등)의 데이터가 할당된다.
낮은 주소에서 높은 주소로 적재된다.
Heap 메모리 영역을 넘어서 할당하면 Heap Overflow 가 발생한다.

스택(Stack) 영역

스레드의 함수, 지역변수, 매개변수들이 저장된다.
그리고 함수가 종료되면, 해당 함수에 할당된 변수들은 메모리에서 해제된다.
높은 주소에서 낮은 주소로 할당된다.
Stack 메모리 영역을 넘어서 할당하면 Stack Overflos 가 발생한다.
각 영역은 저장하는 데이터의 특성에 따라 효율적으로 관리하기 위해 구분되었음을 알 수 있다.
Code 영역의 경우 변경되지 않는 기계어 코드를 Read-Only 상태로 저장해야 한다.
Data 영역Stack 영역을 구분한 이유는,
Data 영역에 전역변수의 자원을 따로 저장하고, Thread들이 공유하도록하여 효율성을 높이고,
함수와 지역 변수 등은 각 스레드마다 공간을 할당한 Stack 구조로, 사용이 종료됨에 따라 해제하는 등의 제어에 용이하다.
프로세서는 Code , Data, Heap, Stack 의 메모리 영역을 독립적으로 할당 받지만, 그에 속해있는 프로세스는 Stack만을 각각 할당받고, 다른 영역은 공유한다고 했다.
그림으로 살펴보면

ref)