Linux에서 사용자 및 커널 가상 메모리의 크기를 결정하는 기준은 무엇입니까? (해당되는 경우 32비트) 구성 가능합니까?
512MB RAM이 있는 경우 사용자 및 커널 가상 주소의 크기는 얼마입니까?
답변1
사용 가능한 주소 공간은 아키텍처에 따라 다릅니다. 한 가지 제한 사항은 아키텍처 자체에서 제공하는 사용 가능한 주소 공간의 양입니다. 64비트 아키텍처는 일반적으로 64비트 포인터를 허용하고, 32비트 아키텍처는 32비트 포인터를 허용합니다. 주소 지정 가능한 공간의 양은 이러한 제한을 넘어서는 아키텍처에 의해 제한될 수 있으며 아키텍처는 특정 구조를 부과할 수도 있습니다. 가장 중요한 것은 커널이 자체 결정을 적용하며 그 중 일부는 구성 가능하다는 것입니다.
32비트 x86에서는다섯 가지 설정것이 가능하다:
- 기본값은 사용자 공간에 3GiB, 커널에 1GiB를 할당하고 거의 1GiB의 "낮은" 물리적 메모리를 허용합니다(0xC0000000에서 분할됨).
- 3G/1G 분할 변형은 분할을 아래로 이동하여 전체 1GiB의 낮은 메모리를 허용합니다. 분할은 0xB000000에 있습니다.
- 2G/2G 분할은 2GiB를 사용자 공간에 할당하고 2GiB를 커널에 할당하며 3G/1G 분할(0x8000000 또는 0x7800000에서 분할)과 같은 두 가지 변형이 있습니다.
- 1G/3G 분할은 1GiB를 사용자 공간에 할당하고 3GiB를 커널에 할당합니다. 분할은 0x4000000에 있습니다.
RAM이 512MiB인 시스템의 경우 기본 3G/1G 분할을 사용해야 합니다. 사용자 공간에는 3GiB의 주소 공간이 있고 커널에는 1GiB가 있습니다.
64비트 x86에서는두 가지 다른 설정이 가능합니다, 사용자 공간 및 커널에 128TiB 또는 64PiB 주소 공간을 제공합니다.
다른 아키텍처에는 다른 설정이 있습니다.