가상 메모리

mingu Lee·2026년 1월 7일

CS

목록 보기
16/21

가상 메모리는 프로세스마다 자기만의 연속된 메모리 공간을 가진 것처럼 보이게 OS가 만들어주는 추상화.

실제로는 RAM뿐 아니라 디스크까지 포함해서, OS와 MMU가 가상 주소 -> 물리 주소를 매핑 해줌.

핵심 개념


  • 각 프로세스는 독립적인 가상 주소 공간을 가짐
    어떤 프로세스든 0x0040 같은 주소를 자기 코드 영역으로 쓸 수 있지만, 실제 물리 RAM 위치는 서로 다름

  • 메모리는 보통 페이지 단위(예: 4KB)로 관리되고, 페이지 테이블이 '이 가상 페이지가 물리 RAM의 어느 프레임에 있는지'를 기록

  • 자주 쓰는 변환 결과는 TLB(Translation Lookaside Buffer)에 캐시되어 속도를 높임

사용하는 이유


  • 메모리 보호
    각 프로세스가 다른 프로세스의 메모리를 마음대로 접근하지 못하도록 막음

  • 프로세스별 독립성
    각 프로세스가 0번지부터 시작하는 자기 공간을 가진 것처럼 동작하므로, 프로그램 입장에서는 주소 충돌을 신경 쓸 필요가 줄어듦

  • 더 큰 메모리를 쓰는 것처럼 사용
    RAM이 부족해도, 당장 필요 없는 페이지는 디스크로 내보내고(스왑), 필요한 순간 다시 가져오는 방식으로 큰 주소 공간을 제공할 수 있음

  • 효율적인 메모리 사용
    실제로 안 쓰는 영역까지 RAM에 올리지 않고, 필요할 때만 페이지를 할당/로딩 함

구현 방식


페이징(Paging)


가상 메모리와 물리 메모리를 같은 크기의 페이지와 프레임이라는 고정 크기 블록으로 나누는 방식.

OS는 프로그램이 필요로 하는 메모리를 페이지 단위로 관리하며, 필요한 페이지만 물리 메모리에 적재.

각 프로세스의 가상 주소와 실제 물리 주소를 매핑하는 테이블인 페이지 테이블이 존재.

고정 크기 단위라 외부 단편화가 거의 없음.

반면, 1바이트만 써도 페이지 1개를 잡을 수 있어서, 페이지의 남는 부분이 생기는 내부 단편화 문제가 발생할 수 있음.

세그멘테이션(Segmentation)


메모리를 페이지처럼 똑같이 자르는 방식이 아니라, 프로그램 논리 단위로 나눔.
(예: Code Segment, Data Segment, Stack Segment 등)

즉, Segment는 가변 크기.

가변 크기기 때문에 내부 단편화 문제가 줄어듦.

하지만 메모리의 할당/해제를 반복할 경우 빈 공간이 조각조각 남는 외부 단편화 문제가 발생할 수 있음.

페이징 vs 세그멘테이션


  • Paging: 고정 크기 단위 → 외부 단편화 ↓ / 내부 단편화 ↑ 가능 / 현대 OS 표준

  • Segmentation: 가변 크기 단위 → 내부 단편화 ↓ / 외부 단편화 ↑ / 관리 복잡

profile
Github: https://github.com/dlalsrn

0개의 댓글