iuboost

5. 메모리와 주소2 본문

공부 정리

5. 메모리와 주소2

iuboost 2024. 12. 21. 17:48

1. 가상 메모리의 정의와 개념

가상 메모리는 프로그램이 사용하는 논리적 메모리 주소 공간을 운영체제가 물리적 메모리 주소 공간과 분리하여 관리하는 방식입니다.
프로그램은 가상 주소(Virtual Address)를 사용하며, 실제 데이터는 필요할 때만 물리적 메모리에 로드됩니다.

가상 메모리의 핵심 원리

  1. 페이지(Page):
    • 가상 메모리와 물리 메모리는 고정 크기의 단위(페이지)로 나뉩니다.
    • 일반적으로 4KB 또는 8KB 단위로 관리됩니다.
  2. 페이지 테이블(Page Table):
    • 가상 주소를 물리 주소로 매핑하는 데 사용됩니다.
    • 각 페이지는 페이지 테이블의 도움으로 물리적 메모리의 특정 위치에 저장됩니다.
  3. 주소 변환(Address Translation):
    • CPU는 프로그램의 가상 주소를 참조합니다.
    • 운영체제와MMU(Memory Management Unit)가 이를 물리 주소로 변환합니다.

2. 가상 메모리의 장점

1) 프로그램 크기의 제약 완화

  • 가상 메모리는 프로그램이 사용하는 메모리 크기가 물리적 메모리(RAM) 크기를 초과하더라도 실행할 수 있도록 지원합니다.
  • 예를 들어, 4GB의 물리적 메모리만 있어도 8GB 크기의 프로그램을 실행할 수 있습니다.

2) 메모리 보호

  • 각 프로세스는 독립된 가상 주소 공간을 가지므로, 다른 프로세스의 메모리를 침범할 수 없습니다.
  • 메모리 보호를 통해 안정성보안성이 강화됩니다.

3) 다중 작업 지원

  • 여러 프로그램이 동시에 실행될 때, 각 프로그램은 자신의 가상 주소 공간을 사용하므로 충돌이 방지됩니다.

4) 효율적인 메모리 사용

  • 자주 사용되지 않는 데이터는 물리 메모리에서 제거하고, 디스크 스왑 공간(Swap Space)에 저장하여 물리 메모리를 효율적으로 사용합니다.

3. 가상 메모리의 동작 방식

1) 페이지 폴트(Page Fault)

  • 프로그램이 접근하려는 가상 메모리 페이지가 물리적 메모리에 없는 경우 발생합니다.
  • 운영체제는 다음 작업을 수행하여 페이지 폴트를 처리합니다:
    1. 디스크에서 해당 페이지를 읽어 물리 메모리에 로드합니다.
    2. 페이지 테이블을 업데이트합니다.
    3. 프로그램 실행을 재개합니다.

2) 스왑(Swap)

  • 물리 메모리가 부족할 경우, 사용 빈도가 낮은 페이지를 디스크의 스왑 공간(Swap Space)에 저장하여 물리 메모리를 확보합니다.
  • 스왑은 메모리 관리의 유연성을 높이지만, 디스크 입출력 속도가 느리기 때문에 과도한 스왑은 성능 저하를 초래합니다.

4. 가상 메모리의 구성 요소

1) 페이지 테이블 (Page Table)

  • 가상 주소와 물리 주소 간의 매핑 정보를 저장합니다.
  • 페이지 테이블은 페이지 번호(Page Number)페이지 프레임 번호(Page Frame Number)를 사용합니다.

2) TLB (Translation Lookaside Buffer)

  • 페이지 테이블 조회 속도를 향상시키기 위한 CPU의 캐시 메모리입니다.
  • 자주 참조되는 페이지의 매핑 정보를 저장하여 주소 변환 속도를 높입니다.

3) 스왑 공간 (Swap Space)

  • 물리 메모리가 부족할 때, 디스크의 특정 공간을 사용하여 가상 메모리 데이터를 저장합니다.

5. 가상 메모리 주소 변환 과정

  1. CPU는 프로그램 실행 중 가상 주소를 생성합니다.
  2. 페이지 테이블을 사용해 가상 주소를 물리 주소로 변환합니다.
  3. 변환된 물리 주소를 통해 메모리에서 데이터를 읽거나 씁니다.
  4. 변환 속도를 높이기 위해 TLB가 사용됩니다.

6. 가상 메모리의 단점과 한계

1) 성능 저하

  • 페이지 폴트가 자주 발생하거나 스왑이 과도하면 디스크 입출력(I/O)로 인해 성능이 저하될 수 있습니다. 이를 스래싱(Thrashing)이라고 합니다.

2) 추가 메모리 요구

  • 페이지 테이블과 TLB 관리에는 추가적인 메모리가 필요합니다.

3) 하드웨어 요구 사항상 메모리는 MMU와 같은 하드웨어 지원이 필요합니다.


7. 가상 메모리의 예시

C 언어에서 가상 메모리와 스택/힙 사용

#include <stdio.h>
#include <stdlib.h>

int global_var = 10; // 데이터 영역

int main() 
{
    int local_var = 20; // 스택 영역
    int *heap_var = (int*)malloc(sizeof(int)); // 힙 영역
    *heap_var = 30;

    printf("글로벌 변수 주소: %p\n", (void*)&global_var);
    printf("지역 변수 주소: %p\n", (void*)&local_var);
    printf("힙 변수 주소: %p\n", (void*)heap_var);

    free(heap_var); // 힙 메모리 해제
    return 0;
}

출력 예시 (주소는 시스템에 따라 다릅니다):

글로벌 변수 주소: 0x600000
지역 변수 주소: 0x7ffd9e12
힙 변수 주소: 0x800000

8. 가상 메모리와 현대 운영체제

  • Windows: 가상 메모리를 기반으로 프로그램마다 고유한 4GB의 가상 주소 공간을 제공합니다(32비트 기준).
  • Linux: 각 프로세스가 독립된 가상 메모리 공간을 가지며, /proc 파일 시스템을 통해 메모리 상태를 확인할 수 있습니다.
  • MacOS: 가상 메모리와 함께 메모리 압축(memory compression) 기능을 제공하여 효율성을 높입니다.

9. 가상 메모리 요약

장점 메모리 효율성, 다중 작업 지원, 메모리 보호
단점 성능 저하 가능성(스래싱), 추가 메모리 및 하드웨어 요구
핵심 구성 요소 페이지, 페이지 테이블, TLB, 스왑 공간
현대 운영체제에서 역할 프로그램 간 메모리 분리, 메모리 부족 시 동적 확장 지원

특징 설명

가상 메모리는 컴퓨터의 메모리를 유연하게 사용하도록 도와주며, 현대의 대규모 프로그램 실행과 멀티태스킹 환경에서 없어서는 안 될 기술입니다. 이를 잘 이해하면 효율적인 프로그램 설계와 디버깅이 가능합니다!

'공부 정리' 카테고리의 다른 글

7. 메모리와 주소4  (1) 2024.12.21
6. 메모리와 주소3  (0) 2024.12.21
4. 메모리와 주소  (0) 2024.12.18
3. 자료형  (0) 2024.12.18
2. 비트와 바이트  (1) 2024.12.18