Linux Kernel의 메모리 관리는 페이징 또는 세그먼트 화 또는 둘 다를 사용하여 수행됩니까?
Linux Kernel의 메모리 관리는 페이징 또는 세그먼트 화 또는 둘 다를 사용하여 수행됩니까?
답변:
리눅스는 둘 다 사용합니다. 분할을 사용하여 사용 가능한 모든 주소 공간을 매핑하면서 기본적으로 커널 및 사용자 공간보기와 같은 다른 액세스 권한을 부여합니다. 일부 예에서 KERNEL_DS (커널 데이터 세그먼트)에 대한 Linux 소스 코드를 grep 할 수 있습니다.
그런 다음 페이징은 가상 메모리를 구현하는 데 사용됩니다 (커널에서 "struct gdt_page"에 대한 Grep, 시작점)
Linux에서의 메모리 관리는 페이징을 통해서만 작동합니다.
Linux는 "작은"(보통 4kB) 및 "큰"(2M) 페이지를 모두 지원합니다. 전자는 특별한 작업을 알거나 수행하지 않고 "작동"하고 후자는 특별한 처리가 필요합니다 (부팅시 예약되고 특수 장치를 통해 매핑되어야 함).
Linux에서 "세그먼트"가 나타나는 유일한 컨텍스트는 프로세스의 데이터 세그먼트를 증가시키는 데 사용되는 brk () syscall입니다. 그러나 어느 쪽이든, 메모리는 페이지로 제공되고 페이지로 관리되며 x86 세그먼트 화와 관련이 없습니다.