- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
基本上,我需要识别使用页面的进程或任务,并相应地做出一些关于是否允许页面换出的决定。因为内核 AFAIK 中的交换模块主要处理 struct page,所以我想知道是否缺少一些现有的技巧。来自 include/linux/mm_types.h (v >= 2.6),以下注释:
建议我们可以通过一些物理到虚拟的反向映射来做到这一点,但我无法从 rmap 函数(在 mm/rmap.c 中)中弄清楚如何实现我正在寻找的东西。
在此先感谢您的帮助,非常感谢。
最佳答案
要回答您的实际问题“如何从 struct page 获取 struct vm_area_struct”,至少有两个答案。
对于匿名页面,您可以使用 page_anon_vma()
,它返回一个 anon_vma
- 它存储在带有特殊标志的 page->mapping
中设置以指示它不是 struct address_space
(以节省空间)。
从anon_vma
,您可以遍历anon_vma_chain
,每个入口都指向一个vma
。从 vma
您可以获得 mm
然后是 a 任务。
有关示例,请参见 page_referenced_anon()
。
对于文件页面,您查看 page->mapping
,这是一个 struct address_space
,然后从那里走 i_mmap
,它是一个 struct prio_tree_root
。请参阅 page_referenced_file()
。
我不确定这是否真的能帮助您实现您的想法,但就这样吧。
关于linux - 如何从 struct page 获取 struct vm_area_struct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10265188/
作为 Traversing all the physical pages of a process 答案的扩展和数据在这里http://www.makelinux.net/ldd3/chp-15-se
由于我只有第一版《Understanding the Linux Kernel》这本书,我看了一些Linux 2.2.14的源代码,已经很老了。 从源代码来看,我认为属于进程通过 open() 系统调
我正在使用 ARM 上的内核 3.18。我正在从正在为其编写驱动程序的相机读取数据。我使用以下设置内存: cpu_handle = dma_alloc_coherent(NULL, dma_size,
我正在阅读 Linux 设备驱动程序的内存管理一章,我遇到了 vm_area_struct 。该结构有一个偏移量字段,即 unsigned long vm_pgoff 。 我检查了该成员的评论为 /*
内核模块代码: static int __init module(void) { struct pid *current_pid; struct task_struct *curren
基本上,我需要识别使用页面的进程或任务,并相应地做出一些关于是否允许页面换出的决定。因为内核 AFAIK 中的交换模块主要处理 struct page,所以我想知道是否缺少一些现有的技巧。来自 inc
这是学校的一项作业,我需要使用系统调用来确定系统上进程的大小。我的代码如下: ... struct task_struct *p; struct vm_area_struct *v; struct m
在mm_struct中,有一些字段指示数据区域的范围:start_data、end_data。并且在数据区域的vm_area_struct中还有指示该区域范围的字段:vm_start、vm_end。
据我了解Linux内核中的内存管理,每个进程中都有一个负责地址空间的mm_struct结构。一个重要的内存区域是堆栈。这应该由 vm_area_struct 内存区域标识,mm_struct 本身有一
我是一名优秀的程序员,十分优秀!