컴퓨터에는 물리 메모리(RAM)가 하나 존재한다.
그런데 프로그램은 여러 개 동시에 실행된다.
크롬
VSCode
서버
DB
하나의 메모리를 여러 프로그램이 공유하면 한 프로그램이 다른 프로그램의 메모리 영역을 덮어쓰거나, 주소가 충돌하는 문제가 생긴다.
가상 메모리는 이 문제를 이렇게 해결한다.
각 프로세스에게 독립적인 가상 주소 공간을 제공한다
각 프로세스는 이렇게 생각한다.
나는 0x0000 ~ 0xFFFF 메모리 전체를 혼자 사용한다
하지만 실제 물리 메모리는 하나다.
겉으로 보이는 가상 주소와 실제 물리 주소는 다르다.
가상 주소를 실제 물리 주소로 변환하는 것이 Page Table이다.
가상 주소 → Page Table → 실제 물리 주소
Page Table은 각 프로세스마다 독립적으로 존재한다.
그래서 같은 가상 주소라도
Process A → 0x1000 → 물리 주소 0xA000
Process B → 0x1000 → 물리 주소 0xB000
서로 다른 물리 메모리를 가리킨다. 주소가 같아 보여도 Page Table이 다르기 때문에 실제로는 전혀 다른 메모리 공간을 사용하는 것이다.
프로세스는 독립적인 주소 공간을 가지기 때문에 직접 접근이 불가능하다.
데이터를 주고받으려면 OS를 통해야 한다.
이를 IPC(Inter Process Communication)라고 한다.
Process A
→ OS (Kernel)
→ 데이터 전달
→ Process B
격리가 강할수록 안전하지만, 그만큼 소통 비용도 생긴다.
가상 메모리는 메모리를 늘리는 기술이 아니라
각 프로세스에게 독립적인 주소 공간을 제공하는 구조다