둠치킨
코딩하는 둠치킨
둠치킨

블로그 메뉴

  • 홈
  • 분류 전체보기 (201)
    • BOJ (159)
      • 스택 (14)
      • 큐 (5)
      • 덱 (4)
      • 그래프 (30)
      • 배열 (8)
      • 재귀 (12)
      • 브루트 포스 (2)
      • 그리디 알고리즘 (7)
      • 다이내믹 프로그래밍 (6)
      • 백트래킹 (24)
      • 기하학 (4)
      • 트리 (4)
      • 구현 (14)
      • 수학 (3)
      • 맵 (1)
      • 다익스트라 (2)
    • 자료구조 (14)
      • 스택 (3)
      • 큐 (5)
      • 덱 (2)
      • 그래프 (1)
      • 트리 (1)
      • 힙 (1)
      • 정렬 (1)
    • C++ (6)
      • 모두의코드 (2)
      • Effective C++ (3)
      • C++ STL (1)
    • 컴파일러 (1)
    • OS (17)
    • 컴퓨터 구조 (2)
    • Unreal Engine 5 (2)

공지사항

전체 방문자
오늘
어제

인기 글

최근 글

태그

  • BFS
  • boj
  • Bruteforce
  • C
  • C++
  • C++ STL
  • Cache Memory
  • deadlock
  • DFS
  • Effective C++
  • java
  • Mutex
  • next_permutation
  • os
  • Process
  • rotate
  • semaphore
  • spin lock
  • STL
  • Thread
hELLO · Designed By 정상우.
둠치킨

코딩하는 둠치킨

컴퓨터 구조

가상 메모리와 물리 메모리, 그리고 페이징과 세그멘테이션

2025. 6. 25. 17:57

가상 메모리란 무엇인가?

가상 메모리는 운영체제가 각 프로세스에 제공하는 독립적인 논리 주소 공간입니다. 프로그램은 자신만의 연속된 메모리 공간을 갖고 있는 것처럼 동작하지만, 실제로는 물리 메모리(RAM)에 존재하는 위치와 다를 수 있습니다.

왜 가상 메모리가 필요한가?

  • 보안: 다른 프로세스의 메모리에 접근하지 못하게 막아줍니다.
  • 안정성: 잘못된 포인터 참조나 접근으로 인한 시스템 전체 오류를 방지합니다.
  • 메모리 확장: 실제 메모리보다 더 많은 메모리를 사용하는 것처럼 동작할 수 있습니다 (스왑 공간).
  • 편리한 메모리 관리: 코드, 힙, 스택 등을 분리해 관리하고, 동적으로 할당·해제할 수 있도록 합니다.

물리 메모리란?

물리 메모리는 컴퓨터에 실제로 장착된 RAM입니다. 이곳이야말로 CPU가 데이터를 읽고 쓰는 실질적인 공간입니다. 그러나 이 공간은 여러 프로세스가 동시에 사용하기엔 제한이 많습니다. 따라서 운영체제는 MMU(Memory Management Unit)를 통해 가상 주소 → 물리 주소 매핑을 수행합니다.


주소는 어떻게 변환되는가?

MMU와 페이지 테이블

CPU가 사용하는 가상 주소는 하드웨어 MMU에 의해 물리 주소로 변환됩니다. 이를 위해 운영체제는 페이지 테이블(Page Table)을 유지하며, 어떤 가상 주소가 어떤 물리 주소와 연결되는지를 관리합니다.

이 과정을 이해하기 위해선 가상 메모리를 어떻게 나누는지가 중요합니다. 여기서 페이징과 세그멘테이션이 등장합니다.


세그멘테이션 (Segmentation)

세그멘테이션은 가상 주소 공간을 의미 단위로 나누는 방식입니다. 예를 들어,

  • 코드(segment)
  • 데이터(segment)
  • 스택(segment)

이렇게 각각의 용도별로 세그먼트를 나누고, 각 세그먼트는 서로 다른 크기와 속성을 가질 수 있습니다.

장점

  • 프로그램의 논리적 구조와 잘 맞음
  • 각 세그먼트에 별도 접근 권한 부여 가능 (예: 코드 읽기 전용)

단점

  • 세그먼트 단위가 불균등하므로 외부 단편화(External Fragmentation) 문제가 생길 수 있음
  • 메모리 할당과 해제가 유연하지 않음

페이징 (Paging)

페이징은 가상 주소 공간과 물리 주소 공간을 고정 크기의 블록으로 나누는 방식입니다.

  • 가상 메모리는 페이지(Page) 단위로 나뉘고,
  • 물리 메모리는 프레임(Frame) 단위로 나뉘어 각각 매핑됩니다.

예를 들어, 4KB 단위로 페이지와 프레임이 나뉘었다면, 0번 페이지는 13번 프레임에, 1번 페이지는 42번 프레임에 저장될 수 있습니다.

장점

  • 내부 단편화만 발생하며 외부 단편화는 없음
  • 메모리 관리를 균일하게 처리 가능
  • 가상 메모리와 물리 메모리를 유연하게 매핑 가능

단점

  • 매핑 테이블인 페이지 테이블이 커질 수 있음 → 이를 해결하기 위해 다단계 페이지 테이블이나 TLB(Translation Lookaside Buffer)가 사용됨
  • 프로세스의 논리적 구조와는 맞지 않음 (코드/데이터 구분 X)

실제 프로그램과의 관계

우리가 코드에서 보는 포인터 주소나 디버거에 출력되는 주소들은 모두 가상 주소입니다. 이 주소는 프로그램의 관점에서만 유효하며, 운영체제가 메모리 보호와 관리를 위해 만든 추상화 계층입니다.

CPU는 이 주소를 그대로 사용하지 않고, MMU가 이를 실제 물리 주소로 변환해서 RAM에 접근합니다. 이 매핑 관계는 페이지 테이블에 의해 결정되며, 커널이 모든 정보를 유지합니다.


정리

  • 가상 메모리는 운영체제가 제공하는 추상화된 메모리 공간이며, 실제로는 물리 메모리와 매핑됩니다.
  • 세그멘테이션은 의미 단위로 가상 주소 공간을 나누는 방식이며, 외부 단편화 문제가 있습니다.
  • 페이징은 고정된 크기로 나눠 매핑하는 방식이며, 현대 운영체제에서 주로 사용됩니다.
  • 코드에서 보는 주소는 모두 가상 주소이며, 실제 물리 메모리 주소는 운영체제가 관리합니다.
저작자표시 (새창열림)

'컴퓨터 구조' 카테고리의 다른 글

컴퓨터 메모리 계층 구조 (Memory Hierarchy)  (0) 2025.06.25
    '컴퓨터 구조' 카테고리의 다른 글
    • 컴퓨터 메모리 계층 구조 (Memory Hierarchy)
    둠치킨
    둠치킨
    코딩 공부를 위한 코딩 블로그 기록 일기

    티스토리툴바