64비트 커널의 32비트 애플리케이션이 모든 메모리를 사용할 수 있습니까?

64비트 커널의 32비트 애플리케이션이 모든 메모리를 사용할 수 있습니까?

32비트 커널은 PAE를 사용하여 PAE가 있는 응용 프로그램에 더 많은 RAM(최대 64GB)을 할당할 수 있다는 것을 알고 있으므로 32비트 커널에서 32비트 응용 프로그램을 실행하면 하나의 코어 응용 프로그램에서 24GB를 모두 사용할 수 있다고 생각했습니다(- 내 OS는 ofc를 사용하고 있습니다).

하지만 64비트 커널을 사용한다면 어떻게 될까요? 32비트(multi-lib) 애플리케이션도 내 메모리를 모두 사용할 수 있습니까? 아니면 다시 4GB로 제한되나요?

답변1

32비트 프로세스는 약 3GB에만 액세스할 수 있습니다. (커널 컴파일 옵션에 따라 더 적을 수 있습니다.) 커널이 32비트인지 64비트인지는 중요하지 않으며 64비트 응용 프로그램 실행 기능에만 영향을 미칩니다. PAE는 각 프로세스에서 보이는 가상 메모리의 크기를 변경하지 않고 더 많은 물리적 메모리를 허용하는 방법입니다. 이것이 "32비트"가 의미하는 바입니다. 포인터는 32비트를 사용하므로 가능한 가상 주소는 2 32 개뿐이므로 각 프로세스는 최대 2 32 B = 4GB에 액세스할 수 있습니다. Linux는 시스템 호출 중에 커널이 사용할 수 있도록 1GB를 예약하고 3GB를 남겨둡니다.

애플리케이션이 여러 프로세스를 실행하는 경우 더 많은 메모리를 사용할 수 있습니다.

관련 정보