말씀하신대로 물리메모리는 RAM 실물이 맞고, 가상 메모리는 커널에서 관리하는 메모리 테이블입니다.
그렇게 페이지 및 페이지 테이블을 사용하는 이유는 시스템의 안전성과 RAM의 메모리를 최대한 쓰기 위함입니다.
일단 HW를 물리주소로 접근했을 때 실수가 발생하면 치명적인 문제가 발생할 수 있습니다. 그래서 커널은 그 윗 단에 실제 물리주소와 매핑된 가상 주소를 할당해주고 중개역할을 해줍니다.
그리고 메모리를 사용하다보면, 1, 2바이트 정도로 작은 크기의 미사용 메모리 영역이 발생하게 됩니다. 하지만 우리가 페이지 테이블 없이 직접 메모리를 관리한다면, 이런 미사용 메모리를 일일히 추적 및 관리하기 어려울 것이고, 나중에는 이런 류의 영역들이 쌓여 많은 메모리들을 낭비하게 될겁니다.
하지만 커널은 테이블 개념을 도입해서 이런 미사용 메모리를 최대한 사용하도록 합니다.
그래서 유저가 할당받은 가상 메모리의 주소는 0x0000_1000 ~ 0x0000_1003 으로 리니어하게 이어진 영역으로 보일 수 있지만, 커널 테이블에 의해 실제로는 0x1000_0008, 0x3000_0000~0x3000_0002 이런 식으로 동떨어진 영역일 수도 있는 겁니다.