Linux 内核中的内存管理是使用分页还是分段或同时使用两者来完成?
答案1
Linux 两者都使用。它使用分段来映射所有可用的地址空间,同时提供不同的访问权限:基本上是内核和用户空间视图。您可以 grep KERNEL_DS(内核数据段)的 Linux 源代码来获取一些示例。
然后使用分页来实现虚拟内存(Grep for “struct gdt_page”在内核中,作为起点)
答案2
Linux 下的内存管理完全通过分页进行。
Linux 支持“小”(通常为 4kB)和“大”(2M)页面。前者“只是工作”,无需您知道或做任何特殊的事情,而后者需要特殊处理(必须在启动时保留并通过特殊设备映射)。
Linux 下出现“段”的唯一上下文是 brk() 系统调用,它用于增加进程的数据段(通常不需要这个,malloc 会做到这一点,而无需您关心)。但无论哪种方式,内存都是以页为单位来管理的,与 x86 分段无关。