프로세스 주소 공간(Process Address Space)

이진호·2022년 8월 31일
0

OS

목록 보기
2/2
post-thumbnail

메모리 영역

프로그램(Program)이 실행되면 OS는 실행 파일의 명령들을 읽어 프로세스(Process)를 생성하고 메모리를 할당하게 되는데 이를 프로세스 주소 공간(Process Address Space)라고 합니다.

프로세스 주소 공간(Process Address Space)은 효율적인 데이터 공유와 메모리 사용을 위하여 아래와 같이 메모리 영역을 나누어 실행됩니다.

메모리 영역

Code(Text)

  • 작실행할 프로그램의 코드를 저장하는 영역으로 Code 또는 Text 영역이라고 부릅니다.
  • CPU는 코드 영역에 저장된 명령어를 하나 하나 씩 가져가서 처리하는데, 이러한 코드 영역은 Hex파일이나 Bin파일로 이루어져 있습니다.

Data

  • 프로그램의 전역변수(global), 정적변수(static), 배열(array), 구조체(structure) 등이 저장되는 영역입니다.
  • 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸됩니다.
  • 초기화 된 데이터는 data 영역에 저장되고, 초기화 되지 않은 데이터는 BSS (Block Stated Symbol) 영역에 저장 됩니다.
  • 함수 내부에 선언된 Static 변수는 프로그램이 실행 될 때 공간만 할당되고, 그 함수가 실행 될 때 초기화 됩니다.
  • 전역변수, static 값을 참조한 코드는 컴파일 후 Data 영역의 주소값을 가르키도록 변경됩니다.

Stack

  • 프로그램이 자동으로 사용하는 임시 메모리 영역이며, 지역(local) 변수, 매개변수(parameter), 리턴 값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역입니다.
  • 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸됩니다. 이렇게 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame) 이라고 합니다.
  • 원시타입의 데이터가 값과 함께 할당됩니다.
  • Heap 영역에 생성된 Object 타입의 데이터 참조값이 할당됩니다.
  • 힙 영역과 반대로 메모리의 상위 주소에서 하위 주소 방향으로 추가 할당됩니다.
  • 컴파일 타임에 크기가 결정되어 무한히 할당 할 수 없습니다. 재귀함수가 너무 깊게 호출되거나 함수가 지역변수를 너무 많이 가지고 있어 stack 영역을 초과하면 stack overflow 에러가 발생합니다.

Heap

  • 사용자에 의해 메모리 공간이 동적으로 할당되고 해제되는 영역입니다.
  • 스택 영역과는 반대로 메모리의 하위 주소에서 상위 주소 방향으로 추가 할당됩니다.
  • 클래스, 클로저와 같은 참조형의 데이터 값이 저장됩니다.
  • 스택 영역과 반대로 메모리의 하위 주소에서 상위 주소 방향으로 추가 할당됩니다.
  • 런타임에 크기가 결정됩니다.

출처

0개의 댓글