나는 가상 메모리에 관해 이야기하는 책을 읽고 있습니다.
Intel Core i7은 48비트(256TB) 가상 주소 공간과 52비트(4PB) 물리적 주소 공간을 지원합니다.
아래는 내 질문입니다
Q1-우리는 주로 64비트 시스템을 사용하는데 가상 주소가 48비트인 이유는 무엇입니까? 64비트 가상 메모리도 되어야 하지 않나요?
Q2-물리적 메모리(52비트)의 주소 공간이 가상 메모리(48비트)의 주소 공간보다 큰 이유는 무엇입니까?
Q3-제가 이해한 바는 모든 페이지 테이블은 커널 메모리에 저장되며 사용자에게 표시되지 않는다는 것입니다.
답변1
내가 아는 한, 64비트 주소를 완전히 지원하는 64비트 프로세서는 없습니다. 레지스터의 너비는 64비트이고 포인터를 저장하는 데 8바이트가 사용되지만 포인터 값은 일반적으로 가장 중요한 비트가 모두 0 또는 모두 1이 되도록 강제하여 중요한 48비트로 제한됩니다.
그 이유는 전체 64비트 주소 공간이 (아직) 필요하지 않으며 필요하지 않은 것을 지원하는 것은 실리콘 낭비이기 때문입니다. 전체 64비트 주소 공간을 지원하면 아무런 이점도 없이 가상-물리적 매핑이 복잡해집니다.
메모리 주소 공간의 기하급수적 증가는 비트 수를 두 배로 늘리는 것이 아니라 주어진 시간에 일정한 수의 주소 비트를 추가하는 것을 의미합니다. 따라서 한 진화 단계가 16비트 주소에서 32비트로 진행된다면 32비트의 다음 단계는 64비트가 아닌 32+16 = 48비트가 됩니다. 48비트는 처리하기가 다소 어렵고 필요할 때 "실제" 64비트 주소를 준비할 수 있는 아키텍처를 제공하므로 주소 레지스터를 64비트로 확장하는 것이 합리적입니다.
질문 2: 왜 안 되나요? 더 큰 물리적 주소 공간을 사용하면 여러 프로세스를 가질 수 있으며 각 프로세스는 최대 2^48 제한의 가상 주소 공간을 갖습니다. 지난 10년(20년?) 동안 대부분의 32비트 x86 프로세서는 원래 80386 명령어 세트 아키텍처에서 정의한 4GB의 가상 주소 공간 제한에도 불구하고 64GB의 물리적 메모리를 지원하는 PAE(물리적 주소 확장)를 지원했습니다.
Q3: 예, 페이지 테이블은 커널에 의해 관리되며 커널 메모리에 저장됩니다.