Linux 커널의 메모리 관리는 페이징이나 분할 또는 둘 다를 사용하여 수행됩니까?
답변1
리눅스는 둘 다 사용합니다. 분할을 사용하여 사용 가능한 모든 주소 공간을 매핑하는 동시에 다양한 액세스 권한(기본적으로 커널 및 사용자 공간 보기)을 제공합니다. KERNEL_DS(커널 데이터 세그먼트)에 대한 Linux 소스 코드를 grep하여 몇 가지 예를 얻을 수 있습니다.
그런 다음 페이징을 사용하여 가상 메모리를 구현합니다(커널의 "struct gdt_page"에 대한 Grep을 시작점으로 사용).
답변2
Linux에서의 메모리 관리는 전적으로 페이징을 통해 수행됩니다.
Linux는 "소형"(보통 4kB) 및 "대형"(2M) 페이지를 지원합니다. 전자는 사용자가 특별한 것을 알거나 수행할 필요 없이 "그냥 작동"하는 반면, 후자는 특별한 처리가 필요합니다(부팅 시 지속되고 특수 장치를 통해 매핑되어야 함).
Linux에서 "세그먼트"가 나타나는 유일한 컨텍스트는 프로세스의 데이터 세그먼트를 늘리는 데 사용되는 brk() 시스템 호출입니다(보통 이것은 필요하지 않으며, malloc은 사용자의 관심 없이 이를 수행합니다). 그러나 어느 쪽이든 메모리는 페이지 단위로 관리되며 x86 분할과 아무 관련이 없습니다.