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

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

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이 나오나요?

Shift를 하면 2의 이진 곱셈이 수행됩니다. 따라서 왼쪽으로 이동( 1 << PAGE_SHIFT)하는 것은 실제로 2^12 = 4096의 곱셈입니다.

$ echo "2^12" | bc
4096

답변2

하드웨어(구체적으로메모리 관리 유닛, CPU의 일부)에 따라 가능한 페이지 크기가 결정됩니다. 이는 프로세서 레지스터 크기와는 아무런 관련이 없으며 주소 공간 크기와는 간접적으로만 관련이 있습니다(MMU가 두 가지를 모두 결정하므로).

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

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

  • 일반 크기 페이지는 모든 아키텍처에서 기본적으로 4kB라고 생각하지만 일부 아키텍처에서는 16kB와 같은 다른 값을 허용합니다.ARM64또는 8kB, 16kB 또는 64kBIA64. 이는 MMU의 가장 깊은 수준 설명자에 해당합니다(Linux에서는 이를 호출함).영어 말하기 시험).
  • 큰 페이지, (로 컴파일된 경우 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 크기의 대용량 페이지도 존재할 수 있습니다. 그러나 그것들을 사용하는 것은 약간 복잡합니다.

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

관련 정보