[학습정리] 프로세스 메모리 구조

김정현·2024년 7월 18일

프로그램의 실행 및 메모리 할당

사용자가 프로그램을 실행하면, 운영체제는 해당 프로그램의 실행 파일을 찾는다.
운영체제는 해당 프로그램을 실행하기 위해 새로운 프로세스를 실행한다.
이때, 프로세스는 실행 중인 프로그램의 인스턴스를 말한다.
운영체제는 새로운 프로세스에 대해 메모리 공간을 할당한다. -> 프로세스 메모리 구조

프로세스 메모리 구조


프로세스의 메모리 구조는 스택(stack), 힙(heap), BSS, GVAR, TEXT 영역으로 나뉜다.

할당되는 시점

프로그램 실행될 때

  • 프로그램이 실행될 때 TEXT, DATA, BSS 영역이 할당된다.

프로그램 실행중

  • 함수 호출시에 STACK영역에 스택 프레임이 추가된다.
  • 동적 메모리 할당 요청시, HEAP 영역에서 메모리가 할당된다.

TEXT 영역

❗ 프로그램 카운터

  • CPU의 중요한 레지스터 중 하나로, 현재 실행중인 명령어의 주소를 저장하고 다음에 실행할 명령어의 주소를 가리키는 역할
  • CPU가 프로그램의 명령어를 순차적으로 실행하기 위해 필수적인 요소
  • 프로그램의 실행코드(기계어 명령어)가 저장되는 메모리 영역
  • 읽기 전용으로 설정되어 있어 코드의 무결성을 보호한다.
  • 프로그램 카운터가 TEXT영역의 시작주소로 초기화된다.
  • 명령어가 실행된 후, 프로그램 카운터는 다음 명령어 주소로 업데이트

Stack

❗ 스택 포인터

  • 현재 스택의 최상단(가장 최근에 추가된 데이터)를 가리키는 레지스터
  • 함수 호출과 반환, 지역 변수 할당 시 동적으로 변한다.

❗ 스택프레임

  • 함수 호출 시마다 스택에 생성되는 데이터 블록
  • 함수의 실행 컨텍스트를 저장하며, 함수가 종료될 때 스택에서 제거된다.

❗ 프레임 포인터

  • 각 스택 프레임마다 하나의 프레임 포인터가 존재하며, 해당 함수의 스택 프레임의 기준 주소 역할
  • 스택 프레임의 시작 지점을 가리키며, 함수 실행중에는 변경되지 않고 고정
  • 주로 함수 호출과 관련된 데이터(매개변수, 지역변수, 반환 주소등)를 저장하는데 사용된다.
  • 함수 호출 시 스택 프레임이 자동으로 할당되고, 함수가 종료되면 해당 스택 프레임이 자동으로 해제된다(이전 함수의 FP 값으로 복원).
  • 각 스레드는 자신만의 스택을 가지며, 이를 통해 스레드 간의 간섭 없이 독립적으로 실행

Heap

❗ 힙 영역 관리

  • 프리 리스트(Free List)관리를 통해 할당되지 않은 메모리 블록을 추적하고 새로운 메모리 할당 요청이 들어오면 프리 리스트에서 적절한 크기의 블록을 찾아 할당한다.

❗ 가비지 컬렉션

  • 힙 메모리를 자동으로 관리하는 가비지 컬렉션 시스템을 사용
  • 참조되고 있는 객체를 추적하고 더 이상 참조되지 않는 객체를 자동으로 해제하여 메모리 누수를 방지
  • 힙은 런타임(프로그램 실행중)동안 동적으로 메모리를 할당 받고 해제할 수 있다.
  • 동적으로 메모리를 할당하면, 힙에서 메모리 블록이 할당되고 해당 메모리 블록의 첫번째 주소가 포인터 변수에 저장되어 스택프레임에 저장된다.
  • 비선형 데이터 구조를 가지고 있어, 메모리 할당과 해제 순서가 자유로워 할당된 메모리 블록이 불연속적으로 위치
  • 힙 메모리는 명시적으로 할당하고 해제해야한다.
profile
안녕하세요 반갑습니다

0개의 댓글