사무실 책상에서 데스크톱 PC를 사용하는 컴퓨터 프로그래머들의 상단 시점 모습

가상 메모리란 무엇인가요?

가상 메모리의 정의

가상 메모리는 메모리 관리 기술의 하나로, 운영 체제(OS)가 가상의 메모리 공간을 활용해 물리적 메모리의 한계를 넘어 동작할 수 있도록 합니다.

여러 프로그램이 동시에 실행되어 메모리가 부족해지면 가상 메모리는 운영 체제(OS)가 하드 디스크 드라이브의 일부 저장 공간을 메모리처럼 활용할 수 있도록 합니다.

이를 금융에 비유하면 이해하기 쉽습니다. 컴퓨터의 물리 메모리를 개인 당좌예금 계좌에 들어 있는 돈이라고 생각해 보세요. 잔액이 충분한 동안에는 아무 문제 없이 모든 것이 정상적으로 작동합니다. 하지만 잔액이 모두 바닥나면 은행은 당좌대월 서비스를 통해 부족한 금액을 일시적으로 메워 줍니다. 가상 메모리도 이와 비슷한 역할을 합니다. 

물론 이러한 당좌대월에도 분명한 한계가 있습니다. 우선 은행이 지원해 주는 금액에는 한도가 있습니다. 또한 계좌에 자금이 다시 입금되지 않으면 이러한 상태를 유지할 수 있는 기간에도 제한이 있습니다.

가상 메모리는 컴퓨터 시스템의 필수 구성 요소로, 시스템이 보다 원활하게 작동하도록 돕습니다. 하지만 장기적으로 사용할 수 있는 근본적인 해결책은 아닙니다. 메모리가 부족할 때 일시적으로 사용할 수 있는 메모리를 제공하기 위한 기능입니다. 즉, 당장의 문제를 해결하는 임시방편에 가깝습니다. 

가상 메모리는 현대 컴퓨팅 기술이지만, 본질적으로는 한쪽의 자원을 다른 곳으로 옮겨 부족한 부분을 메우는 오래된 개념을 컴퓨터 환경에 적용한 것입니다.

가상 메모리의 작동 방식

중앙 처리 장치(CPU)는 컴퓨터의 핵심 구성 요소이며, 여러 종류의 메모리를 활용해 작업을 수행합니다. RAM은 접근 속도가 매우 빠른 메모리이지만, 사용할 수 있는 용량에는 한계가 있습니다. 반면 하드 디스크 드라이브는 저장 공간은 훨씬 넉넉하지만 데이터에 접근하는 속도는 RAM보다 느립니다.

실제 메모리는 컴퓨터에 장착된 메모리를 말합니다. 실제 메모리는 현재 실행 중인 작업에서 즉시 사용할 수 있도록 데이터를 일시적으로 저장하는 RAM 하드웨어를 의미합니다. 프로그래머들은 실제 메모리를 물리 메모리 또는 주 메모리라고도 부릅니다. 반면 보조 메모리는 비휘발성 메모리로, 컴퓨터의 전원이 꺼지거나 전원에서 분리되어도 저장된 데이터를 유지합니다. 이는 RAM과의 가장 큰 차이점이며, 성능 면에서도 여러 차이가 있습니다. 

이를 자동차에 비유하면 RAM은 스포츠카와 같습니다. 속도는 매우 빠르고 가격도 비싸지만 운전자와 동승자 정도만 탈 수 있을 만큼 공간이 좁듯, 용량도 크지 않습니다. 반면 보조 메모리는 실용적인 미니밴과 비슷합니다. 속도는 느리지만 비용이 저렴하고, 주 메모리보다 훨씬 큰 용량을 제공합니다.

하드 드라이브(HDD)는 데이터를 저장하고 읽고 쓰는 장치 전체를 의미하며, 하드 디스크는 HDD 내부에서 자기 방식으로 데이터를 기록하는 원형 저장 매체를 말합니다.

오늘날에는 대부분 HDD 대신 솔리드 스테이트 드라이브(SSD)가 사용됩니다. SSD는 HDD와 같은 역할을 수행하지만, 움직이는 부품 대신 비휘발성 메모리 칩으로 구성된 플래시 메모리를 사용합니다. SSD는 뛰어난 속도와 얇은 크기, 낮은 전력 소비를 바탕으로 HDD보다 우수한 성능을 제공합니다.

가상 메모리는 이전에 사용되었지만 한동안 사용되지 않고 남아 있던 RAM의 일부를 일시적으로 활용하는 방식으로 동작합니다. 운영 체제는 거의 사용되지 않는 RAM의 데이터를 하드 디스크 드라이브에 있는 스왑 파일(또는 페이지 파일)로 옮깁니다.

확보된 RAM 공간은 곧바로 다른 작업에 사용할 수 있게 됩니다. 이렇게 확보한 메모리 덕분에 사용자는 시스템 성능 저하나 눈에 띄는 속도 저하 없이 여러 프로그램을 동시에 실행할 수 있습니다.

IBM Power

IBM Power를 통한 현대화 및 자동화

Joe Cropper(IBM 마스터 발명가, STSM, IBM Power 하이브리드 클라우드 플랫폼)가 애플리케이션 현대화를 위한 IBM Power 활용법 데모를 소개합니다.

페이지 로직이란 무엇인가요?

데이터를 기준으로 보면 페이지는 기본적인 교환 단위와 같은 역할을 합니다. 가상 메모리 관리에서는 데이터를 페이지라는 가장 작은 단위로 관리합니다. 페이지는 가상 주소 공간을 이루는 연속된 메모리 블록입니다. 

일반적으로 모든 페이지는 동일한 크기로 구성됩니다. 초기에는 페이지 크기가 모두 4KB였으며, 오랫동안 업계의 표준으로 사용되었습니다. 최근에는 2MB, 1GB 또는 그보다 더 큰 고정 크기의 페이지를 사용하는 시스템도 늘어나고 있습니다. 

가상 메모리에서 페이지 크기는 시스템 아키텍처에 따라 일반적으로 4KB 또는 8KB입니다. Microsoft Windows, Linux, Apple macOS는 모두 4KB 페이지 크기를 기본으로 사용합니다. UNIX의 가상 메모리 페이지 크기는 각 시스템의 하드웨어 아키텍처와 32비트 또는 64비트 구성에 따라 결정됩니다. (일반적으로 UNIX 시스템은 실행 중인 각 프로세스에 3~4GB의 주소 공간을 할당합니다.)

하나의 운영 체제에서는 일반적으로 모든 페이지가 동일한 크기를 사용합니다. 예외적으로 동적 파티셔닝을 사용하는 경우에는 필요에 따라 다양한 크기의 메모리를 할당할 수 있습니다. 모든 페이지의 크기가 같으면 운영 체제가 이를 훨씬 효율적으로 관리할 수 있습니다.

또한 페이지 크기가 동일하면 할당된 메모리 블록 사이에 사용되지 않는 공간이 생기는 외부 단편화도 줄이기 쉽습니다. 외부 단편화가 발생하면 메모리 여유 공간이 남아 있어도 하나의 연속된 블록으로 할당하기 어려워질 수 있습니다. 

운영 체제는 페이지를 사용해 프로세스의 논리 메모리를 페이지 프레임 형태의 비연속적인 물리 메모리에 매핑합니다. 페이지 프레임은 운영 체제가 메모리 페이지를 저장하는 데 사용하는 물리 메모리(RAM) 블록입니다. 페이지 프레임의 크기는 4KB이든 그보다 크든 항상 해당 페이지의 크기와 같습니다. 

CPU는 운영 체제에서 실행되는 소프트웨어 프로세스가 사용하는 메모리 위치를 가리키는 가상 주소를 생성합니다. 프로그래머는 페이지 프레임을 추적하고 관리하기 위한 기본 데이터 구조로 페이지 테이블을 사용합니다. 페이지 테이블 항목은 운영 체제에서 가상 주소와 물리 주소를 연결하는 데 사용됩니다. 

가상 페이지 번호(VPN)는 가상 주소의 앞 20비트를 사용해 프로세스의 가상 메모리 공간에서 각 가상 주소 공간을 식별합니다. 페이지 번호를 통해 메모리 관리 장치(MMU)는 해당 페이지를 물리 메모리의 페이지 프레임이나 디스크에서 찾아올 수 있습니다.

나머지 주소 부분은 페이지 오프셋으로 사용되며, 페이지 안에서 개별 바이트까지 포함한 정확한 위치를 지정합니다.

스래싱과 페이지 폴트 이해하기

이상적으로는 RAM만으로도 프로그램을 실행하는 데 필요한 메모리를 모두 충당할 수 있습니다. 하지만 오늘날의 컴퓨팅 환경에서는 멀티태스킹과 여러 프로그램의 동시 실행이 일반적이어서 메모리 할당이 훨씬 복잡해집니다. 그 결과 운영 체제에서 사용할 수 있는 메모리에 지속적으로 큰 부담이 가해집니다. 

사용 가능한 메모리가 부족해지면 가상 메모리가 이를 보완해 프로그램이 계속 실행될 수 있도록 합니다. 하지만 그 대가로 프로그램 실행 속도는 크게 저하될 수 있습니다. 가상 메모리는 저장 장치의 접근 속도가 RAM보다 느리기 때문에 물리 메모리보다 처리 속도가 느립니다. 따라서 운영 체제가 가상 메모리를 많이 사용할수록 성능 저하를 체감할 가능성이 커집니다. 

이러한 성능 저하 현상을 스래싱이라고 합니다. 스래싱은 운영 체제가 프로그램을 실행하는 대신 메모리와 저장 장치 간에 데이터를 계속 주고받는 데 대부분의 처리 능력을 소모해 시스템 성능이 장시간 크게 저하되는 상태를 의미하기도 합니다.

가상 메모리에서 자주 발생하는 또 다른 현상으로 페이지 폴트가 있습니다. 페이지 폴트는 실행 중인 프로그램이 현재 물리 메모리에 매핑되어 있지 않은 데이터 페이지에 접근하려고 할 때 발생합니다.

이 경우 하드웨어 인터럽트가 발생하고 운영 체제 커널의 페이지 폴트 처리기가 실행됩니다. 운영 체제 커널은 보조 저장 장치에서 필요한 데이터를 가져옵니다. 그런 다음 운영 체제는 가상 주소와 이에 대응하는 물리 주소를 관리하는 페이지 테이블을 업데이트한 후 프로그램 실행을 정상적으로 이어갑니다. 

페이지 폴트는 심각도에 따라 다음과 같이 구분됩니다.

  • 경미한 페이지 폴트: 필요한 페이지가 이미 물리 메모리에 존재하지만 해당 프로세스의 페이지 테이블이나 공유 메모리에 아직 매핑되지 않은 상태입니다.
  • 중대한 페이지 폴트: 필요한 페이지가 RAM에 없어 디스크에서 불러와야 하는 경우입니다. 따라서 데이터를 읽어 오는 데 더 많은 시간이 걸립니다.
  • 잘못된 페이지 폴트: 가장 심각한 페이지 폴트는 허용되지 않는 메모리 영역에 접근하려는 시도를 차단하는 것입니다. 이 경우 세그멘테이션 폴트가 발생하며, 일반적으로 프로그램이 즉시 종료됩니다.

요구 페이징 방식

운영 체제가 메모리 사용을 효율화하는 대표적인 방법 가운데 하나가 요구 페이징입니다. 요구 페이징은 프로그램 전체를 한꺼번에 메모리에 적재하지 않고, 필요한 시점에 필요한 페이지만 불러옵니다.

이 방식을 사용하면 더 많은 프로그램을 동시에 실행할 수 있습니다. 반면 저장 장치에서 페이지를 반복적으로 불러와야 하므로 페이지 폴트가 자주 발생할 수 있으며, 심한 경우 스래싱으로 이어질 수도 있습니다.

요구 페이징에는 다양한 알고리즘 기반 기법이 함께 사용됩니다. 페이지 교체 알고리즘은 각각 서로 다른 방식으로 메모리 관리 문제를 해결합니다. 

  • 일부 시스템은 LRU(Least Recently Used) 알고리즘을 사용합니다. 이 캐시 교체 알고리즘은 '사용하지 않으면 제거한다'는 원리로 동작합니다. LRU는 가장 오랫동안 사용되지 않은 항목부터 캐시에서 제거해 메모리 사용을 최적화합니다. 캐시 용량이 한계에 도달하면 가장 오랫동안 사용되지 않은 항목이 캐시에서 제거됩니다. 
  • FIFO(First-In First-Out)는 가장 먼저 적재된 페이지를 가장 먼저 교체하는 방식입니다. 캐시가 가득 차면 가장 먼저 들어온 페이지가 가장 먼저 제거됩니다.
  • Second Chance 알고리즘은 FIFO 방식을 보완해 제거 대상 페이지가 최근에 사용되었는지 먼저 확인한 후 교체 여부를 결정합니다.
  • Optimal 알고리즘은 앞으로 가장 사용될 가능성이 낮은 페이지를 예측해 교체 대상으로 선택하는 이상적인 방식입니다. 하지만 앞으로의 접근 패턴을 정확히 예측해야 하므로 실제 구현보다는 이론적인 분석이나 알고리즘 평가에 주로 활용됩니다.
Phill Powell

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

관련 솔루션
IBM Fusion

AI, VM 및 컨테이너 워크로드를 위한 스토리지, 보호 및 오케스트레이션을 통합하여 더 빠르고 복원력 있는 운영을 실현하세요.

IBM Storage Fusion 살펴보기
IBM 가상화 솔루션

가상 및 물리적 환경 전반에서 워크로드를 최적화하고 확장하기 위해 효율적이고 유연한 가상화를 사용합니다.

IBM 가상화 솔루션 살펴보기
IBM 인프라 서비스

IBM Systems 서버 및 스토리지에 대한 포괄적인 기술 전문 지식을 제공합니다.

IBM 인프라 서비스 살펴보기
다음 단계 안내

통합 데이터 서비스 및 가상화로 인프라를 강화하여 하이브리드 환경 전반에서 탄력적인 고성능 워크로드를 구현하세요.

  1. IBM Storage Fusion 살펴보기
  2. IBM 가상화 솔루션 살펴보기