cs

프로세스의 메모리 구조

ssoonn 2024. 7. 30. 17:59

 

시스템은 프로그램을 실행할 때 해당 프로그램을 메모리에 로드한다.

 

프로세스

실행되고 있는 프로그램으로, 프로세스는 각 메모리 공간을 시스템으로부터 할당받는다.

 

프로세스의 메모리 영역

메모리는 코드, 데이터, 힙, 스택 영역으로 구성되어 있다.

 

Code 영역

  • 실행할 프로그램의 코드가 저장된다.
  • CPU는 코드 영역에서 명령어를 하나씩 가져와 처리하게 된다.
  • 컴파일 타임에 결정된다.
  • 중간에 코드 변경이 불가하도록 Read-Only로 되어있다.

Data 영역

  • 전역변수와 정적변수 등 프로그램이 사용하는 데이터를 저장한다.
  • 이 변수들을 참조한 코드는 컴파일이 완료될 시 data 영역의 주소값을 가르키도록 바뀐다.
  • 변수가 변경될 수 있기 때문에, Read-Write로 되어있다.

 

  • Data 영역은 다시 BSS 영역과 Data(GVAR) 영역으로 나누어짐
    • 초기화된 데이터는 Data 영역에 저장
      • -> 비휘발성 메모리인 ROM에 저장됨
    • 초기화되지 않은 데이터는 BSS 영역에 저장
      • RAM에 저장됨
    • 영역 구분 이유:
      • ROM에 저장할 시 비용이 많이 들기 때문에, RAM에 저장될 부분과 구분하기 위함

Stack 영역

  • 지연변수, 매개변수, 리턴값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역이다.
  • 함수 호출 시 할당되고 함수 반환 시 소멸된다.
  • 로드 시(컴파일 타임) 크기가 결정 -> 런타임 시 stack 사이즈 변경 불가
  • 메모리의 높은 주소에서 낮은 주소의 방향으로 할당
메커니즘: 자료구조(stack)의 LIFO(Last In First Out)
컴파일 시 stack 영역의 크기가 결정되기 때문에 무한정 할당 불가.
따라서 재귀함수가 반복해서 호출되거나 함수가 지역변수를 메모리를 초과할 정도로 너무 많이 가지고 있다면stack overflow가 발생한다.

Heap 영역

  • 동적 데이터 영역 (필요에 의해 메모리를 동적으로 할당할 때 사용하는 메모리 영역)
  • 메모리 주소 값에 의해서만 참조되고 사용되는 영역 -> 프로그램 동작 시(런타임)에 크기가 결정된다.
    • ex. stack에서 pointer 변수를 할당 -> pointer가 가리키는 heap 영역의 임의의 공간부터 원하는 크기만큼 할당, 사용
  • 메모리의 낮은 주소에서 높은 주소의 방향으로 할당

 

  • stack과 heap영역은 사실 같은 공간을 공유: heap이 메모리의 낮은 주소부터 할당되면 stack은 높은 주소부터 할당되는 식
  • 각 영역이 상대 공간을 침범하는 일이 발생할 수 있는데 이를 각각 stack overflow, heap overflow라고 부른다.

 

ref.

https://velog.io/@cchloe2311/운영체제-프로세스-메모리-구조

 

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

시스템은 프로그램을 실행할 때 해당 프로그램을 메모리에 로드합니다. 그 메모리 구조에 대해 알아보겠습니다!실행되고 있는 프로그램으로, 프로세스는 각 메모리 공간을 시스템으로부터 할

velog.io

https://zangzangs.tistory.com/107

 

[OS] 프로세스 메모리 구조 (코드, 데이터, 스텍, 힙)

프로세스 메모리 구조 (코드, 데이터, 스텍, 힙) 프로그램의 실행 프로그램의 실행은 두가지 중요한 의미를 가진다. 파일 시스템에 존재하던 실행파일이 메모리에 적재된다는 의미 프로그램이 CP

zangzangs.tistory.com

https://velog.io/@iamgroot1231/프로세스-메모리-구조

 

프로세스 메모리 구조

프로세스 메모리 구조

velog.io