- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在阅读 Linux 设备驱动程序的内存管理一章,我遇到了 vm_area_struct 。该结构有一个偏移量字段,即 unsigned long vm_pgoff 。
我检查了该成员的评论为 /* Offset (within vm_file) in PAGE_SIZE units,*not* PAGE_CACHE_SIZE */
。我不太确定它是 vma 区域内的偏移量还是内存映射文件中的偏移量。
而且我已经看到驱动程序的 mmap 实现代码具有以下行,通过将成员移动 PAGE_SHIFT 位来重新计算偏移量。
unsigned long off = vma->vm_pgoff << PAGE_SHIFT;
我无法理解相同的内容,对此有任何帮助都将非常有用。
最佳答案
据书Linux Device Drivers, 3rd edition ,
unsigned long vm_pgoff;
The offset of the area in the file, in pages. When a file or device is mapped, this is the file position of the first page mapped in this area.
因此,它是文件/设备中以页数衡量的偏移量。因此,vm_area 中的第一个页面是文件/设备的页面“vm_pgoff”。
文件mm_types.h说的一样。
关于c - vm_area_struct 中的 unsigned long vm_pgoff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29822019/
作为 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 本身有一
我是一名优秀的程序员,十分优秀!