我知道“即使是单个进程也可以拥有大于系统物理内存的虚拟地址空间”,所以只想知道哪个内核代码负责创建大于物理内存的虚拟内存?
第二件事是,我可以更改代码以使其变大吗?如果我更改代码以扩展虚拟内存,是否有任何性能优势?
涉及所有内存管理(和地址空间)管理代码。
从应用程序的角度来看,您应该了解更多的虚拟内存(内核控制MMU并处理页面错误),尤其是mmap(2)、mprotect(2)、madvise(2)、execve(2)系统调用。应用程序使用这些系统调用更改其地址空间。您可以使用proc(5)文件系统来查询它。例如cat /proc/self/maps
显示正在执行的进程的地址空间cat
另请阅读高级 Linux 编程。了解更多关于VDSO和ASLR的信息。
在内核中,相关的源代码主要是它的mm/子目录(但几乎每个文件系统都有mmap
特定的代码,页面错误也与调度等有关......)