Linux中void put_page(struct page *page)的用法

3

我追踪了Linux源代码,并找到了这个函数:void put_page(struct page *page)

我在谷歌上搜索了一下,有些人说这个函数用来构建从物理帧地址到虚拟地址的映射。

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

有人知道这个函数是干什么的吗?


1
为什么不在你的问题中包含一个链接到代码:http://lxr.free-electrons.com/source/mm/swap.c#L231 - NPE
3个回答

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

2

"put_page"会将页面复制到超脱内存,并将其与页面相关的类型和偏移关联起来。

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

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


1

我刚刚发现了这个,它看起来非常简洁且有用:

这些函数有两个阶段:

  1. 从LRU缓存中删除页面(__page_cache_release)
  2. 将页面释放给内存分配器

考虑分配过程:

  1. 分配页面
  2. 固定页面表项
  3. 将页面添加到LRU缓存中。

put_page函数中,没有处理页面表项。因此,在调用这些函数之前,控制路径应该修复/删除适当的页面表项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接