IT지식/Computer Science

프로세스의 메모리 할당 구조 및 역할

맨땅에헤딩개발자 2025. 1. 30. 10:22

프로세스(process)란?

 

기계어로 이루어진 .exe파일을 우리는 프로그램이라 하고 실행을 위해 메모리위에서 재구성 하는 것을 프로세스라 한다.

 

운영체제가 제공하는 메모리 공간은 크게 4가지로 나뉜다.

1. Text(code)영역

2. Data영역(BSS,GVAR)

3. Stack영역

4. Heap영역

 

 

- Stack영역

 

* 프로그램이 자동으로 사용하는 메모리 영역으로 함수 호출과 관계되는 지역변수와 매개변수가 저장된다.

* 함수 호출 시 생성되며 함수가 종료되면 메모리 영역이 사라집니다.

* 명령 실행 시 자동으로 증가  또는 감소하기 때문에 보통 메모리의 마지막 번지를 지정한다.(후입선출, LIFO방식)

* 스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다.

* 커널 영역을 가장 최상위 메모리 주소에 할당하고 그 밑에 스택영역을 할당하는 방법으로 커널 영역에 대한 침범을 방지

 

 

- Heap영역

 

* 필요에 의해 메모리를 동적으로 할당할 때 사용하는 메모리 영역으로 동적 메모리 영역이라 부른다.

* 메모리의 힙(heap) 영역은 사용자가 직접 관리할 수 있는 '그리고 해야만 하는' 메모리 영역이다.

   (스위프트를 통해 ARC기법으로 관리해줌)

* 힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당된다.

* 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다.

 

** 위의 스택과 힙은 같은 공간을 공유합니다. heap이 메모리의 낮은 주소부터 할당되면 stack은 높은 주소부터 할당됩니다. 그래서 각 영역이 상대 공간을 침범하는 일이 발생할 수 있는데 이를 각각 stack overflow, heap overflow라 합니다.

 

 

- Data영역

 

* 프로그램이 실행될 때 생성 및 종료 시 반환되며, 전역변수, 정적변수, 배열, 구조체 등이 저장된다.

* Data영역은 다시 BSS영역과 DATA(GVAR)영역으로 나눠지는데, 초기화된 데이터는 DATA(GVAR) 영역

   초기화되지 않은 데이터는 BSS영역에 저장됩니다.

 

** BSS영역, DATA(GVAR)영역을 구분하는 이유?

 초기화된 데이터는 초기 값을 저장해야 하므로 DATA 영역에 저장되어 ROM에 저장된다. 하지만 초기화되지 않은

 데이터까지 ROM에 저장되면 큰 사이즈의 ROM이 필요하므로 분리함(초기화되지 않은 데이터는 RAM에 저장됨)

 

 

- Text영역

 

* 텍스트 영역은 실행 명령을 포함하는 코드들이 들어가는 부분이다.

* 프로그램을 시작할 때 컴파일한 프로그램(기계어 모음)이 저장되어 있고, 읽기 전용 영역이기에 프로세스가

  함부러 변경할 수 없으며 변경 시 오류를 발생시킨다.

* 코드 자체를 구성하는 메모리 영역으로 Hex파일이나 Bin파일 메모리이다.

* 프로그램 명령이 위치하는 곳으로  기계어로 제어되는 메모리영역이다.

 

 

 

 

출처 - https://velog.io/@iamgroot1231/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B5%AC%EC%A1%B0