왜 가상 메모리를 배워야 할까?
가상 메모리는 단순한 메모리 관리 기술이 아닙니다. 현대 운영체제, 컴파일러, 하드웨어의 핵심 연결고리이자, 다음과 같은 강력한 기능을 제공합니다.
- (1) 효율적인 메모리 사용
→ 실제 메모리보다 큰 프로그램도 실행 가능하게 해줍니다. 디스크에 있는 데이터를 필요할 때만 메모리에 불러오는 캐시 구조로 동작합니다. - (2) 프로세스 간 메모리 보호
→ 각 프로세스는 자기만의 가상 주소 공간을 갖습니다. 다른 프로세스 메모리에 접근할 수 없어 안정성이 보장됩니다. - (3) 메모리 관리 단순화
→ 개발자는 '주소'를 직접 신경 쓰지 않고도 동적으로 메모리를 할당하고 해제할 수 있습니다.
9.1 물리 및 가상 주소 방식
물리 주소 (Physical Address)
- 실제 DRAM(메인 메모리) 상의 주소입니다.
- 0부터 시작해서 M - 1 바이트까지 쭉 이어진 실제 하드웨어 주소라고 생각하면 됩니다.
가상 주소 (Virtual Address)
- CPU가 프로그램 실행 중 생성하는 주소는 **가상 주소(VA)**입니다.
- 이 VA는 MMU(Memory Management Unit)를 통해 **물리 주소(PA)**로 변환되어 메모리에 접근합니다.
주소 변환이 필요한 이유
- 하나의 CPU에서 여러 프로세스를 실행할 때, 각 프로세스가 동일한 주소를 사용하더라도 물리 메모리 상에서는 겹치지 않도록 분리시켜야 합니다.
- MMU + 페이지 테이블을 통해 이 매핑을 하드웨어 + 운영체제가 협업하여 처리합니다.
쉽게 말해, 프로세스 입장에서는 ‘0x400000’이라는 주소를 쓴다고 해도,
물리적으로는 서로 다른 위치에 매핑될 수 있는 구조입니다.
9.2 주소 공간 (Address Spaces)
주소 공간이란?
- 0, 1, 2, ..., N-1처럼 순차적으로 번호가 붙은 주소의 집합을 말합니다.
- 주소의 개수가 2n2^n개라면, 이건 n비트 주소 공간이라고 부릅니다.
예)
- 32비트 주소 공간 → 2322^{32} = 약 4GB
- 64비트 주소 공간 → 2642^{64} = 아주 큰 공간 (이론상 16EB)
가상 주소 공간 vs 물리 주소 공간
항목설명
가상 주소 공간 | 프로세스가 인식하는 주소 공간 (논리적 주소) |
물리 주소 공간 | 실제 메모리 주소 (하드웨어 레벨) |
여러 프로세스가 동일한 가상 주소를 사용하더라도, 페이지 테이블 덕분에 서로 다른 물리 주소로 매핑됩니다.
왜 중요할까?
- 프로그램은 자신만의 독립된 공간에서 실행된다고 '착각'하게 됩니다.
- 이런 분리는 메모리 충돌을 막고, 메모리 해킹도 어렵게 만듭니다.
요약
개념 | 설명 |
물리 주소 | 실제 메모리 주소(하드웨어) |
가상 주소 | CPU가 생성하는 주소(논리적) |
주소 변환 | MMU + 페이지 테이블로 VA → PA 변환 |
주소 공간 | 특정 비트 수로 표현 가능한 주소 집합 |
'CSAPP > 9장' 카테고리의 다른 글
[CSAPP] 9장 가상 메모리(Virtual Memory) - 9.9(9.9.11 ~ 9.9.14) (2) | 2025.04.26 |
---|---|
[CSAPP] 9장 가상 메모리(Virtual Memory) - 9.9(9.9.6 ~ 9.9.10) (0) | 2025.04.25 |
[CSAPP] 9장 가상 메모리(Virtual Memory) - 9.9(9.9.1 ~ 9.9.5) (1) | 2025.04.25 |
[CSAPP] 9장 가상 메모리(Virtual Memory) - 9.5 ~ 9.8 (5) | 2025.04.22 |
[CSAPP] 9장 가상 메모리 (Virtual Memory) - 9.3 ~ 9.4 (0) | 2025.04.21 |