【问题标题】:linux kernel vfree() how to synchronize master kernel page table and process's page table?linux内核vfree()如何同步主内核页表和进程的页表?
【发布时间】:2015-09-01 03:38:48
【问题描述】:

我知道vmalloc()是怎么做的。当一个进程(在内核空间)想要访问属于vmalloc()的内存时,会发生页面错误并进行同步。

但是当它调用vfree()时,进程如何更新它的页表以与主内核页表同步?或者我对它有一些理解。

谢谢。

【问题讨论】:

    标签: memory-management linux-kernel vmalloc


    【解决方案1】:

    您对内存分配的理解似乎不正确。没有内存属于vmalloc。一个固定的(内核空间的)虚拟地址在启动时被分配给 vmalloc。稍后当调用 vmalloc 时,从固定分配的范围中选择虚拟地址,并从伙伴系统分配物理内存页面。

    虚拟地址和物理页面是一对一映射的。

    当调用vfree()时,虚拟地址范围被再次释放,物理页面也被返回给伙伴系统。

    希望这能纠正您的理解。

    我建议你现在也阅读一些关于内核内存的在线教程。

    【讨论】:

    • 是的,你是对的。但我的问题是当vmalloc()或vfree()因页面错误而发生时,进程的页表需要与主内核页表同步。我知道为什么在 vmalloc() 发生之后会发生页面错误,但我不知道为什么在调用 vfree() 之后会发生页面错误。
    • @ZhaoYuhao 1)母版页表不需要与内核页表同步,他们只引用它。2)vmalloc 没有发生页面错误 3)没有发生页面错误当调用 vfree() 时。
    • 哦,是的,你是对的!我一直在误解。非常感谢你!你真好
    猜你喜欢
    • 2013-05-14
    • 1970-01-01
    • 2011-09-18
    • 2015-02-20
    • 1970-01-01
    • 2016-01-30
    • 2017-09-19
    • 1970-01-01
    • 2010-10-25
    相关资源
    最近更新 更多