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
거기에 파일 시스템과 mmap
ping 파일을 마운트해야 합니다 .
답변3
프로세서는 사용 가능한 페이지 크기를 결정합니다. 대부분의 경우 x86 및 x86_64 프로세서에서 하드웨어 구현 페이지 크기는 4kb입니다. 그러나 운영 체제는 원하는 경우 한 번에 두 개 이상의 페이지를 할당할 수 있으므로 소프트웨어에서 8kb, 16kb 또는 32kb 페이지를 효과적으로 구현할 수 있습니다.
x86 및 x86_64 프로세서는 각각 표준 4kb 페이지와 함께 4mb 및 2mb 페이지를 혼합할 수도 있습니다. 해당 기능이 사용된다면 대부분 커널 공간을 할당하는 데 사용됩니다.
답변4
페이지 크기는 주로 프로세서 아키텍처에 따라 다릅니다. x86에서는 보호 모드를 도입한 386 프로세서 시대부터 페이지 크기가 4kB였습니다.
x64 모드에서는 크기가 2MB인 거대한 페이지도 있을 수 있습니다. 그러나 이를 사용하는 것은 약간 복잡합니다.
페이지 크기에 대한 자세한 내용은 다음에서 확인할 수 있습니다.위키피디아 기사