가상 주소 공간에서 페이지 크기는 어떻게 결정됩니까?

가상 주소 공간에서 페이지 크기는 어떻게 결정됩니까?

Linux는 모든 주소가 물리적 주소가 아닌 가상 주소인 가상 메모리 시스템을 사용합니다. 이러한 가상 주소는 프로세서에 의해 물리적 주소로 변환됩니다.

이 번역을 더 쉽게 하기 위해 가상 메모리와 실제 메모리를 페이지로 나눕니다. 각 페이지에는 고유 번호가 부여됩니다. 페이지 프레임 번호.

일부 페이지 크기는 2KB, 4KB 등이 될 수 있습니다. 그러나 이 페이지 크기 수치는 어떻게 결정됩니까? 아키텍처의 크기에 영향을 받나요? 예를 들어, 32비트 버스에는 4GB의 주소 공간이 있습니다.

답변1

다음 명령을 통해 구성을 쿼리하여 시스템의 기본 페이지 크기를 확인할 수 있습니다 getconf.

$ getconf PAGE_SIZE
4096

또는

$ getconf PAGESIZE
4096

메모:위의 단위는 일반적으로 바이트 단위이므로 4096은 4096바이트 또는 4kB와 같습니다.

이것은 Linux 커널 소스에 내장되어 있습니다.

$ more /usr/src/kernels/3.13.9-100.fc19.x86_64/include/asm-generic/page.h
...
...
/* PAGE_SHIFT determines the page size */

#define PAGE_SHIFT  12
#ifdef __ASSEMBLY__
#define PAGE_SIZE   (1 << PAGE_SHIFT)
#else
#define PAGE_SIZE   (1UL << PAGE_SHIFT)
#endif
#define PAGE_MASK   (~(PAGE_SIZE-1))

변속을 하면 어떻게 4096이 나오나요?

비트를 이동하면 2의 이진 곱셈이 수행됩니다. 따라서 사실상 비트를 왼쪽( 1 << PAGE_SHIFT)으로 이동하면 2^12 = 4096의 곱셈이 수행됩니다.

$ echo "2^12" | bc
4096

답변2

하드웨어(구체적으로는MMU, CPU의 일부)는 가능한 페이지 크기를 결정합니다. 프로세서 레지스터 크기와는 관련이 없으며 주소 공간 크기와는 간접적인 관계만 있습니다(MMU가 둘 다 결정한다는 점에서).

거의 모든 아키텍처는 4kB 페이지 크기를 지원합니다. 일부 아키텍처는 더 큰 페이지를 지원하지만(일부는 더 작은 페이지도 지원함) 4kB가 매우 널리 사용되는 기본값입니다.

Linux는 두 가지 페이지 크기를 지원합니다.

  • 일반 크기 페이지는 모든 아키텍처에서 기본적으로 4kB라고 생각하지만 일부 아키텍처에서는 다른 값(예: 16kB)을 허용합니다.ARM64또는 8kB, 16kB 또는 64kBIA64. 이는 MMU에서 가장 깊은 수준의 설명자에 해당합니다(Linux에서PTE).
  • 거대한 페이지, ( 로 컴파일된 경우 CONFIG_HUGETLB_PAGE필요하며 CONFIG_HUGETLBFS대부분의 용도에도 마찬가지입니다.) 이는 두 번째로 깊은 MMU 설명자 수준(Linux에서 PMD라고 부르는 것)에 해당합니다(또는 적어도 일반적으로 그렇습니다. 이것이 모든 아키텍처에 적용되는지는 모르겠습니다).

페이지 크기는 메모리 사용량, 메모리 사용량 및 속도 간의 절충안입니다.

  • 페이지 크기가 클수록 페이지를 부분적으로 사용할 때 더 많은 낭비가 발생하므로 시스템의 메모리가 더 빨리 부족해집니다.
  • MMU 설명자 수준이 높을수록 페이지 테이블에 대한 커널 메모리가 더 많아집니다.
  • MMU 설명자 수준이 깊을수록 페이지 테이블 순회에 더 많은 시간이 소요됩니다.

대부분의 응용 프로그램에서는 더 큰 페이지 크기로 인한 이점이 매우 작은 반면 비용은 상당합니다. 이것이 대부분의 시스템이 보통 크기의 페이지만 사용하는 이유입니다.

다음을 사용하여 시스템의 (일반) 페이지 크기를 쿼리할 수 있습니다.getconf유틸리티 또는 C 함수sysconf.

$ getconf PAGE_SIZE
4096

거대한 페이지 사용hugetlbfs거기에 파일 시스템과 mmapping 파일을 마운트해야 합니다 .

답변3

프로세서는 사용 가능한 페이지 크기를 결정합니다. 대부분의 경우 x86 및 x86_64 프로세서에서 하드웨어 구현 페이지 크기는 4kb입니다. 그러나 운영 체제는 원하는 경우 한 번에 두 개 이상의 페이지를 할당할 수 있으므로 소프트웨어에서 8kb, 16kb 또는 32kb 페이지를 효과적으로 구현할 수 있습니다.

x86 및 x86_64 프로세서는 각각 표준 4kb 페이지와 함께 4mb 및 2mb 페이지를 혼합할 수도 있습니다. 해당 기능이 사용된다면 대부분 커널 공간을 할당하는 데 사용됩니다.

답변4

페이지 크기는 주로 프로세서 아키텍처에 따라 다릅니다. x86에서는 보호 모드를 도입한 386 프로세서 시대부터 페이지 크기가 4kB였습니다.

x64 모드에서는 크기가 2MB인 거대한 페이지도 있을 수 있습니다. 그러나 이를 사용하는 것은 약간 복잡합니다.

페이지 크기에 대한 자세한 내용은 다음에서 확인할 수 있습니다.위키피디아 기사

관련 정보