가상 메모리

기술노트
Admin (토론 | 기여)님의 2025년 9월 11일 (목) 16:50 판 (Gemini 벌크 업로더로 자동 업로드)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

가상 메모리 (Virtual Memory)

가상 메모리(Virtual Memory)는 운영체제가 물리 메모리(RAM)의 한계를 극복하기 위해 사용하는 메모리 관리 기법입니다. 각 프로세스에게 실제 물리 메모리 크기와 상관없이 크고 연속적인 메모리 공간이 있는 것처럼 보이게 하여, 효율적인 메모리 사용과 프로세스 간 메모리 보호를 가능하게 합니다.


🧠 가상 메모리의 필요성

  • 물리 메모리의 한계 극복

> * 실제 물리 메모리(RAM)의 크기보다 더 큰 프로그램을 실행할 수 있게 합니다. > * 여러 프로세스가 동시에 실행될 때, 각 프로세스가 독립적인 큰 메모리 공간을 사용하는 것처럼 보이게 합니다.

  • 메모리 관리의 효율성 증대

> * 프로세스 간 메모리 보호 : 각 프로세스는 자신의 가상 주소 공간만 접근할 수 있어, 다른 프로세스의 메모리 영역을 침범하는 것을 방지합니다. > * 메모리 공유 용이 : 여러 프로세스가 동일한 코드나 데이터를 공유할 수 있도록 하여 메모리 사용 효율을 높입니다. (e.g., 공유 라이브러리) > * 프로그램 로딩 시간 단축 : 프로그램 전체를 한 번에 물리 메모리에 올리지 않고, 필요한 부분만 올릴 수 있습니다.


⚙️ 가상 메모리의 동작 원리

  • 가상 주소 (Virtual Address) vs 물리 주소 (Physical Address)

> * 가상 주소 : CPU가 생성하는 주소. 각 프로세스마다 독립적인 가상 주소 공간을 가집니다. > * 물리 주소 : 실제 물리 메모리(RAM)의 주소.

  • 주소 변환 (Address Translation)

> * CPU가 가상 주소를 생성하면, MMU(Memory Management Unit)라는 하드웨어 장치가 이 가상 주소를 물리 주소로 변환합니다. > * 페이지(Page)와 프레임(Frame) : 가상 메모리 공간과 물리 메모리 공간을 고정된 크기의 블록으로 나눈 단위입니다. 가상 메모리의 블록을 '페이지', 물리 메모리의 블록을 '프레임'이라고 합니다. > * 페이지 테이블 (Page Table) : 가상 주소의 페이지 번호와 해당 페이지가 매핑되는 물리 메모리의 프레임 번호를 저장하는 테이블입니다. 각 프로세스마다 고유한 페이지 테이블을 가집니다.

  • 페이지 폴트 (Page Fault)

> * CPU가 접근하려는 가상 주소에 해당하는 페이지가 현재 물리 메모리(RAM)에 없는 경우 발생하는 인터럽트입니다. > * 운영체제는 페이지 폴트가 발생하면, 해당 페이지를 디스크(스왑 영역)에서 찾아 물리 메모리로 로드하고, 페이지 테이블을 업데이트한 후, 중단되었던 명령어를 다시 실행합니다.


💡 개발자 핵심 Point

  • 가상 메모리는 개발자가 직접적으로 관리할 필요는 없지만, 그 동작 원리를 이해하는 것은 메모리 관련 성능 문제를 해결하는 데 중요합니다.
  • 스래싱 (Thrashing)

> * '정의': 프로세스의 작업 세트(Working Set, 현재 활발하게 사용되는 페이지 집합)가 물리 메모리보다 커서, 페이지 폴트가 빈번하게 발생하고 CPU 이용률이 급격히 떨어지는 현상입니다. > * '원인': 너무 많은 프로세스가 동시에 실행되거나, 각 프로세스에 할당된 물리 메모리가 너무 적을 때 발생합니다. > * '해결': 프로세스 수를 줄이거나, 물리 메모리를 늘리거나, 페이지 교체 알고리즘을 최적화합니다.

  • 지역성 (Locality of Reference)

> * '시간 지역성': 최근에 참조된 데이터는 가까운 미래에 다시 참조될 가능성이 높습니다. > * '공간 지역성': 최근에 참조된 데이터 주변의 데이터는 가까운 미래에 참조될 가능성이 높습니다. > * 가상 메모리 시스템은 이러한 지역성 원리를 활용하여, 페이지 폴트 발생 시 주변 페이지를 함께 로드하는 등의 최적화를 수행합니다. 개발자는 지역성을 고려하여 코드를 작성하면 캐시 및 가상 메모리 효율을 높일 수 있습니다.