linux - 负责虚拟内存的内核代码

标签 linux kernel

我知道“即使是单个进程也可以拥有比系统物理内存更大的虚拟地址空间”,所以只想知道哪个内核代码负责创建比物理内存更大的虚拟内存?

第二件事是,我可以更改代码以使其变大一点吗?如果我更改代码以扩展虚拟内存,是否有任何性能优势?

最佳答案

涉及所有内存管理(和 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/

相关文章:

linux - 我可以使用 memcpy 连续访问缓存内存而不是 __raw_writel 为每个和在 linux 内核

assembly - 为什么来自页面错误处理程序的 iret 会生成中断 13(一般保护错误)和错误代码 0x18?

python - 在 python 中如何获取 kern.module_path 的值?

linux - 使用 pcre 和 openssl 从源代码安装 NGINX 在 make 上抛出错误

c - Linux 寄存器从用户区读取 arm i.mx257 - devmem 不工作

c++ - Qt 控制台应用程序的标准配置方法是什么?

python - AttributeError : module 'matplotlib' has no attribute 'get_data_path' on Visual Studio's jupyter-notebook

linux - 如何在不传递日期参数的情况下查看目录中最后创建的 3 个文件

linux - 如何在 Linux 上从防火墙后面安装 Brackets IDE?

linux - 内核提示符 <-> 符号