阅读:1326回复:6
一个LINUX内核数据结构变量的含义
我在读LINUX内存管理源代码时,碰见一个表示一段虚拟地址区域的数据结构vm_area_struct。其定义为:
struct vm_area_struct { struct mm_struct * vm_mm; /* VM area parameters */ unsigned long vm_start; unsigned long vm_end; /* linked list of VM areas per task, sorted by address */ struct vm_area_struct *vm_next; pgprot_t vm_page_prot; unsigned long vm_flags; /* AVL tree of VM areas per task, sorted by address */ short vm_avl_height; struct vm_area_struct * vm_avl_left; struct vm_area_struct * vm_avl_right; /* For areas with an address space and backing store, * one of the address_space->i_mmap{,shared} lists, * for shm areas, the list of attaches, otherwise unused. */ struct vm_area_struct *vm_next_share; struct vm_area_struct **vm_pprev_share; struct vm_operations_struct * vm_ops; unsigned long vm_pgoff; /* offset in PAGE_SIZE units, *not* PAGE_CACHE_SIZE */ struct file * vm_file; unsigned long vm_raend; void * vm_private_data; /* was vm_pte (shared mem) */ }; 请问有没有人愿意告诉我其中的变量unsigned long vm_pgoff所表示的具体含义?谢谢 |
|
沙发#
发布于:2002-11-28 15:55
offset in PAGE_SIZE units, *not* PAGE_CACHE_SIZE
#define PAGE_SIZE (1UL << PAGE_SHIFT) PAGE_SHIFT=12 |
|
板凳#
发布于:2002-11-28 17:47
UNIX1998:你写的我都能用SOURCE INSIDE查到,我不明白的是它的具体含义是什么?是不是该vm_area_struct的开始地址vm_start》PAGE_SIZE?还是有其它的具体含义?我在多个函数中看见对它的赋值,但我看不懂它的含义,一般的分析源代码的书上也是一略而过,但我觉的这个变量应该是挺重要的。你能不能给我祥细解释一下?谢谢
|
|
地板#
发布于:2002-11-29 10:23
因为页大小为4k,所以必须是4k的整数倍。右移12位,保证最后12位是0.
|
|
地下室#
发布于:2002-11-29 16:57
UNIX1998,非常谢谢你的回答。我不懂的是PGOFF的具体的含义。例如vm_mm是该虚拟内存区域所属的虚存空间。vm_start是该虚存的起始地址(属于该区域)。vm_end是该虚存的终止地址(不属于该区域)。vm_next是下一个区域的指针。vm_page_prot、vm_flags是该区域的属性位图。vm_avl_height是AVL树的高度。vm_avl_left、vm_avl_right是左右子树指针等等。但我不懂PGOFF的具体含义是什么?它的值是不是就是vm_start》PAGE_SIZE?你能不能祥细的给我说一说?谢谢你
|
|
5楼#
发布于:2002-11-30 17:50
就是vm_start》PAGE_SIZE。
含义就是偏移啊。但是这个值是会变的。 你可以在源代码中理解它。 我不知道该怎么详细的给你说,我想是不是你考虑多了呢? |
|
6楼#
发布于:2002-11-30 18:58
谢谢UNIX1998
|
|