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