프로세스 메모리 구조

김태희·2021년 1월 9일
0
post-custom-banner

메모리 구조


CPU -> 레지스터 -> CPU캐시 -> 메인메모리 -> 보조기억장치 -> 외부기억장치

CPU로부터 멀어질수록 데이터를 저장하는 용량이 커지고, 접근하는 속도는 느려진다.


가상 메모리


실제 물리적인 메모리 크기에 상관없이 가상 메모리 공간을 프로세스에게 제공한다.

이런 가상 메모리 공간은 프로세스 전체를 메모리에 적재하지 않아도 프로세스의 실행이 가능하도록 한다.

메인 메모리의 크기가 한정되어 있으므로 물리적인 메모리 크기보다 크기가 큰 프로세스를 실행시킬 수 없다.

예를들어, 100MB 메인 메모리에서 200MB 크기의 프로세스를 실행할 수 없게 되는 것이다.

그렇다면 메인 메모리보다 크기가 큰 프로세스를 실행시키고 싶으면 어떻게 해야 할까?

단순히 메인 메모리가 더 큰 컴퓨터를 사용해야하는가?

이런 방법은 매우 비효율적일 것이다.

그래서 나온 방법이 바로 가상 메모리이다.

프로세스의 모든 코드는 항상 필요한 것이 아니다.

오류 처리하는 부분이나 필요 없는 배열 부분은 실제로 프로세스가 잘 동작한다면 필요 없는 부분이 된다.

따라서 프로세스는 필요한 부분(페이지)만 메모리(프레임)에 올림으로서 메인 메모리에 올라가는 프로세스의 크기를 줄인다.

프로세스 전체를 메모리에 올릴 필요가 없는 것이다.

이러한 가상 메모리 방식은 페이지 교체 알고리즘을 통해 각 시점에 필요한 페이지만 메모리(프레임)에 올려, 전체 프로세스를 실행시킬 수 있는 것이다.


메모리 구조


UNIX 시스템은 프로세스에게 4GB의 가상 메모리 공간을 할당한다.

상위 1GB는 커널이, 하위 3GB는 사용자 프로그램이 차지한다.

하위 3GB의 사용자 프로그램 영역은 Stack, Heap, Bss, Data, Code 영역으로 구분된다.

  • Stack 영역

    • 프로그램이 사용하는 임시 메모리 영역.
    • 지역변수, 매개변수, 리턴 값 등이 잠시 사용했다가 반환하는 메모리 영역.
    • 함수 호출 시 할당되고, 함수 실행이 끝나면 반환된다.
  • Heap 영역

    • 동적 메모리를 할당할 때 사용하는 메모리 영역.
  • Data 영역

    • 프로그램이 실행될 때 생성되고, 프로그램이 종료되면 반환되는 메모리 영역.
    • 전역변수, 정적변수, 배열, 구조체 등이 저장된다.
    • 초기화 된 데이터는 Data 영역에 저장되고, 초기화되지 않은 데이터는 BSS(Block Stated Symbol) 영역에 저장된다.
  • Code 영역

    • 코드 자체를 저장하는 메모리 영역.
    • Hex 또는 Bin 파일 메모리이다.
    • 프로그램 명령이 위치하는 곳으로, 기계어로 제어되는 메모리 영역이다.

Code, Data, BSS 영역은 컴파일 시 크기가 결정되고, Heap, Stack 영역은 런타임 시 크기가 결정된다.


참조
https://recorda.tistory.com/entry/20160503%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
https://copycode.tistory.com/113

profile
Web Back-End (Spring, JPA, AWS)
post-custom-banner

0개의 댓글