x86_64 리눅스 커널 페이지 크기가 얼마나 되는지 궁금합니다. 4KB라고 들었는데 다른 소스에서는 2MB라고 하네요.
사용자 커널 페이지 크기가 커널 페이지 크기와 다를 수 있는지도 궁금합니다. Linux는 커널 페이지에 2MB를 사용하고 사용자 페이지에 4KB를 사용할 수 있습니까?
감사해요
답변1
x86_64 아키텍처(이 아키텍처의 32비트 버전인 i386 또는 IA-32와 동일)의 페이지 크기는 4KiB입니다.
또한 2MiB에 대한 참조도 표시됩니다. 이는 x86_64 아키텍처의 "대형 페이지" 크기 중 하나이며 일부 경우 Linux에서도 사용되는 1GiB 거대 페이지를 허용하기 때문입니다. (32비트 변형 i386 또는 IA-32에는 4MiB 대용량 페이지가 있습니다.)
또한 Linux 커널에는 많은 최신 Linux 배포판에서 기본적으로 활성화되는 "투명 거대 페이지"라는 기능이 있습니다. 프로세스가 많은 양의 메모리를 할당할 때마다 Linux 커널은 2MiB로 정렬된 메모리 블록을 할당하고 페이지 테이블을 설정하여 프로세스에 거대한 페이지를 제공하기로 결정할 수 있습니다. 그러나 시스템에 메모리 부족이 발생하여 일부 메모리를 교체해야 하는 경우에도 이를 별도의 페이지로 분할하여 일부를 교체하고 나머지는 메모리에 유지할 수 있습니다. (어떤 경우에는 단일 페이지를 포함하는 할당에서 투명한 거대 페이지를 재조립할 수도 있습니다.)
커널과 사용자 공간과 관련하여 페이지 테이블 설정 방법에는 약간의 미묘한 차이가 있습니다(보안 기능, 특히 Spectre 및 Meltdown과 같은 최근 보안 문제 이후 도입된 기능은 페이지 테이블 매핑을 커널과 사용자 공간에서 분리하려고 시도합니다). 커널과 사용자 공간 모두 동일한 방식으로 동일한 메모리 영역에 액세스합니다. 예를 들어 hugepages(투명 또는 기타)도 커널 모드에서 hugepage 매핑을 사용합니다.