Blog For Me

[운영체제]프로세스(process) 메모리 구조 본문

컴퓨터과학/운영체제

[운영체제]프로세스(process) 메모리 구조

PureStack 2021. 10. 28. 22:34

1. Text 영역

실행 가능한 코드가 들어있다. CPU에서는 이 영역에서 명령어를 하나씩 가져와 처리한다.

2. Data 영역

전역 변수, 정적 변수가 저장된다. 이 변수들은 프로그램 시작 시 할당되어 프로그램이 종료될때 소멸된다.

3. Heap 영역

  • 프로그램 실행 중에 동적으로 할당할 수 있는 영역이다.
  • Heap 영역은 런타임에 결정되며, 프로그래머가 필요할 때마다 사용하는 영역이다.
  • stack 영역과는 반대로 낮은 주소에서 높은 주소 순으로 할당한다.
  • Java에서는 객체가 Heap 영역에 생성되고 GC(Garbage Collection)에 의해 수거된다.
  • Heap 영역에서의 할당은 요청되는 양, 현재 메모리 상황 등 다양한 요소를 고려해야 하므로 더 많은 CPU Instruction이 필요하여 Stack보다 할당 속도가 더 느리다.

4. Stack 영역

  • 프로그램이 자동으로 사용하는 임시 메모리 영역이다.
  • 지역 변수, 매개 변수, 리턴값, 복귀할 주소 등을 임시로 저장하는 공간이다. 이 데이터들은 함수 호출 시에 생성되었다가 함수의 수행이 완료되면 사라진다.
  • 메모리의 높은 주소부터 낮은 주소 순으로 할당된다.
  • 컴파일 시 stack 영역의 크기는 한정되어 있으므로 무한정 할당할 수 없고, 재귀함수가 반복해서 호출되거나 함수가 지역변수를 메모리 초과할 정도로 많이 갖고 있으면 stack overflow가 발생하게 된다.
  • Stack 영역에서의 할당은 이미 생성된 공간에 대해 포인터의 위치만 바꿔주는 단순한 CPU Instruction이므로 할당 속도가 빠르다.

Stack 영역과 Heap 영역

  • Stack 영역과 Heap 영역은 같은 공간을 사용한다. 따라서 Stack 영역이 클수록 Heap 영역은 작아지고, Heap 영역이 클수록 Stack 영역은 작아진다.
  • Stack 영역은 높은 주소에서 낮은 주소 순으로, Heap 영역은 낮은 주소에서 높은 주소 순으로 할당되기 때문에 서로 자신의 영역을 침범하는 일이 벌어질 수 있다. Stack Overflow는 Stack이 Heap 영역을 침범하는 현상이고, Heap Overflow는 Heap이 Stack영역을 침범하는 현상이다.
Comments