我知道“即使是单个进程也可以拥有比系统物理内存更大的虚拟地址空间”,所以只想知道哪个内核代码负责创建比物理内存更大的虚拟内存?
第二件事是,我可以更改代码以使其变大一点吗?如果我更改代码以扩展虚拟内存,是否有任何性能优势?
最佳答案
涉及所有内存管理(和 address space )管理代码。
从应用的角度,你应该了解更多virtual memory (内核控制 MMU 并处理 page faults ),特别是 mmap(2) , mprotect(2) , madvise(2) , execve(2)系统调用。应用程序使用这些系统调用更改其地址空间。您可以使用 proc(5)文件系统来查询它。例如,cat/proc/self/maps
显示了执行该 cat
另请阅读Advanced Linux Programming 。了解更多 VDSO & ASLR .
内核内部,相关源码大多是它的mm/子目录
(但几乎每个文件系统都有 mmap
特定代码,并且页面错误也与调度等有关......)
关于linux - 负责虚拟内存的内核代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15072400/