在Linux中使用void put_page(struct page * page)

时间:2014-05-24 17:46:29

标签: c linux

我跟踪Linux源代码并找到此函数:void put_page(struct page *page)

我用Google搜索并且有人说这个函数用于构建从物理帧地址到虚拟地址的映射。

但我追踪put_page中的mm/swap.c函数。代码行为似乎不用于将物理地址映射到虚拟地址。

任何人都知道这个功能是做什么的吗?

3 个答案:

答案 0 :(得分:2)

在Linux内核中,名为put_的函数通常意味着"释放"或者"发布"一些东西。 (" put"与" get"相反)。从简短的代码看,似乎调用函数来释放struct page

实际记录了(相关)函数put_pages_list

/**
 * put_pages_list() - release a list of pages
 * @pages: list of pages threaded on page->lru
 *
 * Release a list of pages which are strung together on page.lru.  Currently
 * used by read_cache_pages() and related error recovery code.
 */

对我来说,这证实put_page"发布"一个struct page

答案 1 :(得分:2)

A" put_page"将页面复制到超越内存并将其与类型和 与页面关联的偏移量。

A" get_page"将页面(如果找到)从超越内存复制到内核内存中,但不会从超越内存中删除页面。

有关详细信息,请参阅Linux内核文档:frontswap.txt

答案 2 :(得分:1)

我只是found this这看起来非常简洁&有用:

  

这些功能有两个阶段:

     
      
  1. 从lru缓存中删除该页面(__page_cache_release)
  2.   
  3. 将页面释放到内存分配器
  4.         

    考虑分配过程:

         
        
    1. 页面已分配
    2.   
    3. 页面表条目已修复
    4.   
    5. 页面已添加到lru缓存中。
    6.         

      put_page函数中,不处理页表条目。所以   控制路径应该修复/删除适当的页表条目   在调用函数之前取决于。