【发布时间】:2015-09-01 03:38:48
【问题描述】:
我知道vmalloc()是怎么做的。当一个进程(在内核空间)想要访问属于vmalloc()的内存时,会发生页面错误并进行同步。
但是当它调用vfree()时,进程如何更新它的页表以与主内核页表同步?或者我对它有一些理解。
谢谢。
【问题讨论】:
标签: memory-management linux-kernel vmalloc
我知道vmalloc()是怎么做的。当一个进程(在内核空间)想要访问属于vmalloc()的内存时,会发生页面错误并进行同步。
但是当它调用vfree()时,进程如何更新它的页表以与主内核页表同步?或者我对它有一些理解。
谢谢。
【问题讨论】:
标签: memory-management linux-kernel vmalloc
您对内存分配的理解似乎不正确。没有内存属于vmalloc。一个固定的(内核空间的)虚拟地址在启动时被分配给 vmalloc。稍后当调用 vmalloc 时,从固定分配的范围中选择虚拟地址,并从伙伴系统分配物理内存页面。
虚拟地址和物理页面是一对一映射的。
当调用vfree()时,虚拟地址范围被再次释放,物理页面也被返回给伙伴系统。
希望这能纠正您的理解。
我建议你现在也阅读一些关于内核内存的在线教程。
【讨论】: