가상 주소 공간은 컴퓨터 시스템에서 프로세스가 사용할 수 있도록 운영 체제가 제공하는 연속적인 논리 주소들의 집합을 의미한다. 물리적 메모리(실제 RAM)의 크기와 무관하게, 각 프로세스는 자신만의 독립된 주소 공간을 할당받아 프로그램이 메모리를 직접 관리하는 복잡성을 줄이고, 메모리 보호와 효율적인 메모리 사용을 가능하게 한다.
정의
가상 주소 공간은 프로세스가 인식하는 메모리 주소 범위로, 물리적 메모리와 1:1로 매핑되지 않는다. 운영 체제는 페이지 테이블 혹은 세그먼트 테이블과 같은 주소 변환 구조를 이용해 가상 주소를 실제 물리 주소로 변환한다. 이 과정에서 페이지 교체, 공유 메모리, 메모리 매핑 파일 등 다양한 메모리 관리 기법이 적용될 수 있다.
주요 특징
-
주소 독립성
- 각 프로세스는 서로 격리된 가상 주소 공간을 가지고, 다른 프로세스의 메모리를 직접 참조할 수 없다. 이는 보안 및 안정성을 높인다.
-
메모리 보호
- 운영 체제는 페이지 권한(읽기, 쓰기, 실행) 등을 설정하여 잘못된 메모리 접근을 차단한다.
-
확장성
- 가상 주소 공간의 크기는 물리 메모리 용량보다 클 수 있다. 예를 들어 64비트 시스템에서는 수테라바이트(TB) 단위의 가상 주소 공간을 제공한다.
-
효율적인 메모리 사용
- 페이지 교체 알고리즘(예: LRU, FIFO) 등을 통해 실제 물리 메모리 사용량을 최적화하고, 사용되지 않는 페이지는 디스크(스와핑)로 이동시킬 수 있다.
구현 방식
- 페이지 기반 가상 메모리: 가상 주소를 고정 크기의 페이지(예: 4 KB) 단위로 나누어 물리 페이지와 매핑한다. 대부분의 현대 운영 체제(Linux, Windows, macOS 등)에서 채택하고 있다.
- 세그멘테이션: 가상 주소를 논리적인 세그먼트(코드, 데이터, 스택 등) 단위로 구분하고, 각 세그먼트에 대한 베이스 주소와 한계를 지정한다. 세그멘테이션은 페이지와 결합하여 사용되기도 한다.
운영 체제와의 관계
- Linux: 각 프로세스는 일반적으로 4 GiB(32비트) 또는 128 TiB(64비트) 이상의 가상 주소 공간을 할당받는다.
/proc/[pid]/maps파일을 통해 프로세스별 메모리 매핑 정보를 확인할 수 있다. - Windows: 32비트 프로세스는 최대 2 GiB(또는 /LARGEADDRESSAWARE 옵션 사용 시 4 GiB)의 가상 주소 공간을, 64비트 프로세스는 이론적으로 8 TiB까지 사용할 수 있다.
- macOS: 64비트 아키텍처 기반으로, 프로세스당 최대 수 페타바이트 수준의 가상 주소 공간을 제공한다.
관련 개념
- 물리 주소 공간: 실제 RAM에 할당된 주소 범위.
- 페이지 테이블: 가상 주소와 물리 주소 간 매핑 정보를 저장하는 구조.
- 스와핑(Swapping): 사용되지 않는 페이지를 디스크(스왑 파일/스왑 파티션)로 옮겨 물리 메모리를 확보하는 기법.
- 메모리 매핑 파일(Memory-mapped file): 파일을 가상 주소 공간에 매핑하여 파일 I/O를 메모리 접근처럼 수행할 수 있게 한다.
참고 문헌
- Silberschatz, A., Galvin, P. B., & Gagne, G. (2022). Operating System Concepts (10th ed.). Wiley.
- Bovet, D. P., & Cesati, M. (2005). Understanding the Linux Kernel (3rd ed.). O'Reilly Media.
- Microsoft Docs. “Virtual Memory”. https://learn.microsoft.com/en-us/windows/win32/memory/virtual-memory
- Apple Developer Documentation. “Memory Management”. https://developer.apple.com/documentation
본 항목은 현재까지 확인된 공신력 있는 자료를 바탕으로 작성되었으며, 최신 운영 체제 버전이나 특정 아키텍처에 따라 세부 사항이 달라질 수 있다.