난 방금 읽었어여기:
- 프로세스당 최대 128TiB 가상 주소 공간(2GiB 대신)
- 4GiB(또는 PAE 확장이 포함된 64GiB) 대신 64TiB 물리적 메모리 지원
왜 그런 겁니까? 내 말은, 물리적 메모리 지원이 커널이나 현재 하드웨어에 의해 제한된다는 뜻인가요?
실제로 주소를 지정할 수 있는 물리적 메모리보다 두 배 더 많은 가상 메모리 공간이 필요한 이유는 무엇입니까?
답변1
이러한 제한은 Debian이나 Linux가 아니라 하드웨어에서 비롯됩니다. 아키텍처(프로세서 및 메모리 버스)마다 제한 사항이 다릅니다.
현재 x86-64 PC 프로세서에서 MMU는 다음을 허용합니다.48비트 가상 주소 공간. 이는 주소 공간이 256TB로 제한됨을 의미합니다. 1비트를 사용하여 커널 주소와 사용자 영역 주소를 구별하면 프로세스 주소 공간에 128TB의 공간이 남습니다.
현재 x86-64 프로세서에서는물리적 주소는 최대 48비트를 사용할 수 있습니다.즉, 최대 256TB까지 보유할 수 있습니다. amd64 아키텍처가 도입된 이후 이 제한은 점차 증가했습니다(제 기억이 맞다면 40비트부터 시작). 주소 공간의 각 비트에는 일부 배선 및 디코딩 로직(이로 인해 프로세서가 더 비싸고, 느리고, 뜨거워지는)이 필요하므로 하드웨어 제조업체는 크기를 축소하려는 인센티브를 갖습니다.
Linux에서는 물리적 메모리를 커널 공간에 완전히 매핑할 수 있으므로 물리적 주소는 최대 2^46(즉, 최대 64TB)까지만 허용됩니다. 주소 공간에는 48비트가 있고 하나는 커널/사용자용이고 47비트는 커널 주소 공간용으로 남겨져 있습니다. 그 중 절반은 최대 물리적 메모리를 직접 처리하고 나머지 절반은 커널이 필요한 모든 것을 매핑할 수 있도록 합니다. (Linux는 동시에 완전히 매핑될 수 없는 물리적 메모리를 처리할 수 있지만 이로 인해 추가적인 복잡성이 발생하므로 필요한 플랫폼에서만 수행됩니다.PAE가 포함된 x86-32LPAE가 포함된 armv7. )
실제 메모리보다 큰 가상 메모리를 갖는 것은 다음과 같은 이유로 유용합니다.
답변2
이유는 모르겠지만 물리적 메모리 크기의 두 배인 주소 공간을 지원하는 것이 유용한 일곱 가지 이유를 생각해 볼 수 있습니다.
- 첫 번째는 추가 메모리가 필요한 애플리케이션을 실행할 수 있다는 점입니다. 이는 디스크로 교체해야 하는 경우에도 가능합니다.
- 메모리 사용을 분할하기 위한 더 깨끗한 메모리 레이아웃. 예를 들어, 운영 체제는 더 높은 번호의 주소를 사용하고 애플리케이션이 더 명확하게 구분되도록 하기 위해 더 낮은 번호의 주소를 남겨 둘 수 있습니다.
- 주소 공간 레이아웃 무작위화더 효과적입니다.
- 페이지를 실행 가능으로 표시하면 메모리가 남아 있을 수 있습니다.
- 메모리 매핑된 I/O.
- 메모리 할당이 더 쉽습니다. 더 큰 청크를 한 번에 할당할 수 있습니다.
- 메모리 조각화 감소
답변3
이는 하드웨어 제한 사항입니다. 현재 x86_64/amd64 하드웨어는 48비트 가상 주소와 다양한 크기(구현에 따라 다름 - 예를 들어 내 워크스테이션은 36비트만 지원함)의 물리적 주소를 허용합니다. Linux 커널은 가상 주소 공간을 절반으로 나눕니다(x86에서와 마찬가지로 커널용 절반, 사용자 공간용 절반).
그래서 당신은 다음을 얻습니다:
2⁴⁸ 바이트 ¼ 2 = 2⁴⁸ 바이트 = 128TiB
실제 주소 크기는 실제로 물리적 주소이기 때문에 일반적으로 더 작습니다. CPU의 핀/패드, 트랜지스터, 연결부 등은 물론 보드의 트레이스도 차지합니다. 칩셋에서도 마찬가지입니다. 프로세서 코어나 소켓의 설계 수명을 넘어서 많은 메모리를 지원하는 것은 의미가 없습니다. 이 모든 것은 비용이 듭니다. (32개의 DIMM 슬롯과 슬롯당 64GiB DIMM을 사용해도 여전히 용량은 2TiB에 불과합니다. DIMM 용량이 매년 두 배로 늘어나더라도 64TiB까지는 여전히 5년이 걸립니다.
~처럼피터 코르데스사람들은 이제 비휘발성 저장소를 연결하고 있다고 지적했습니다.3D X-포인트주소 공간을 소모할 수 있는 메모리 버스로. 최신 프로세서는 물리적 주소 공간을 48비트로 확장했습니다. 데비안 위키는 아직 업데이트되지 않았을 수 있습니다.