x86 아키텍처에서 가상 주소 공간의 비트 수가 실제보다 적은 이유는 무엇입니까? 들어 2011

64 비트 컴퓨팅에 대해이 기사를 읽었 으며 다음과 같이 언급합니다.

예를 들어 2011 년 기준 AMD64 아키텍처는 물리적 메모리에 52 비트, 가상 메모리에 48 비트를 허용했습니다.

실제 메모리보다 더 많은 가상 메모리를 허용하는 것이 더 합리적이라고 생각합니다. 실제로 다른 방법은 무엇입니까?

보너스 질문 : 64 비트 아키텍처에서 52 비트 또는 48 비트에 대해 “허용”한다는 것은 무엇을 의미합니까? 다른 비트는 무엇에 사용됩니까?



답변

다음은 AMD64 페이지 테이블의 사진입니다 (AMD Architecture Programmer ‘s Guide, Vol.2, Rev 3.23, 2013, 132 페이지).

AMD64 Longmode 페이지 테이블

AMD64 아키텍처에서 페이지의 “자연”크기는 2 12 = 4096 바이트입니다. (2 21 = 2Mbyte 페이지를 가질 수있는 모드가 있지만 지금은 무시할 것입니다.)

각 PTE (Page-Table Entry) (또는 PDE, PDPE 또는 PML4E라고하는 레벨에 따라)는 64 비트 = 2 3 바이트입니다. 따라서 페이지 당 2 9 개의 항목 이 있습니다 . 따라서 4 단계의 페이지 테이블은 프로세스 당 4×9 + 12 = 48 비트의 가상 주소를 제공합니다. 페이지 테이블을 걷는 것은 비용이 많이 들기 때문에 소비자의 요구가있을 때까지는 5-6 단계로 확장되지 않습니다.

왜 그들이 52 비트 물리적 주소 제한을 결정했는지 잘 모르겠습니다. 향후 최대 63 비트까지 확장 할 수 있습니다. 2013 년 10 월 가격 (4Gbit 칩의 경우 약 1US $ / 기가비트)은 2 52 바이트 메모리 를 구축하는 데 32,000,000.00 US $ 이상이 소요 되므로 물리적 주소 제한을 늘리는 데 상당한 시간이 소요될 수 있습니다. 물리적 주소를 가능한 작게 유지해야하는 모든 종류의 이유가 있습니다. 예를 들어 TLB 및 캐시 태그는 물리적 주소를 보유해야합니다.

가상 메모리보다 더 많은 실제 메모리가 있다는 것이 반드시 역순 인 것은 아닙니다. 가상 메모리는 프로세스 당 이지만 실제 메모리는 모든 프로세스에서 공유됩니다. 따라서 48 비트 가상 주소와 2 52 바이트의 메모리를 가진 서버는 16 개의 동시 프로세스를 지원할 수 있지만 여전히 스왑 할 필요는 없습니다.


답변

고려해야 할 몇 가지 사항은 실제 RAM이 비쌉니다. 물론 16GB는 4GB가 불과 몇 년 전 이었으므로 저렴하지만 2 ^ 64 (16 엑사 바이트)는 엄청나게 큽니다.

따라서 x64 용 x86의 AMD 확장은 레지스터 를 제한 하여 최대 2 ^ 52까지 “허용”했습니다 . 이는 두 가지 작업을 수행하여 프로세서 비용을 낮추고 성능을 향상시킵니다. 사용되지 않는 레지스터가 많을수록 빈 공간이 많이 남아있어 작업 중에 고려해야합니다.

그리고 당신이 수학자가 아닌 경우에 … 세 가지 크기의 차이는 엄청납니다! 나는 수학 전문가가 아니지만 십진수 52 비트는 64 비트의 약 .02 %입니다. 48 비트는 52 %의 6 %입니다. (누군가 내 수학을 확인 하시겠습니까?)

AMD가 가상보다 더 많은 물리적 RAM을 허용 한 이유는이 기사에서 AMD가 서버를 생각했기 때문이라고 설명합니다. 서버에는 많은 양의 물리적 RAM이 필요합니다. 가상 RAM이 너무 느려 수백 또는 수천 명의 직원이 평균 서버 응용 프로그램을 지원할 수 없습니다.

내 생각 : RAM이 작을 때 시간을 떠났고 하드 드라이브는 RAM을 지원해야했습니다. RAM 가격은 평균 페르소나가 충분한 RAM 이상을 넣을 수있는 수준으로 떨어졌습니다. 1-2GB의 RAM이 필요한 Office와 같은 일반적인 응용 프로그램을 사용하십시오. 7 년 전에 내 컴퓨터에서 처리 할 수있었습니다. 디스크에 대한 읽기 및 쓰기 속도가 있지만 가상 메모리에서 7GB 파일을 검색하지 않아도되기를 바랍니다 (이전 PM * 2.5 철학을 사용함).

또한 AMD가 통합 GPU의 RAM과 같은 물리적 RAM 레지스터를 사용하는 레지스터를위한 공간을 남겨두고 싶다고 가정 할 수 있습니다.


답변