一、vm_mmap_pgoff 函数执行流程 在vm_mmap_pgoff函数中 , 首先, 以 " 写者 " 身份 , 向Linux内核申请 读写 " 信号量 " 权限 ; 然后, 如果 读写 " 信号量 " 权限 申请通过 , 那么调用do_mmap_pgoff函数 , 执行 创建 "内存映射" 的过程 , 特别注意 , 这是 创建 " 内存映射 " 的 核心函数 ,...
unsignedlongvm_flags;structanon_vma *anon_vma;/*Serialized by page_table_lock*/structfile * vm_file;/*File we map to (can be NULL).*/unsignedlongvm_pgoff;/*Offset (within vm_file) in PAGE_SIZE units*/void* vm_private_data;/*was vm_pte (shared mem)*//*Function pointers to deal ...
1、vm_pgoff 成员 2、vm_file 成员 3、vm_private_data 成员 二、vm_area_struct 结构体完整源码 在博客 【Linux 内核 内存管理】虚拟地址空间布局架构 ⑦ ( vm_area_struct 结构体成员分析 | vm_start | vm_end | vm_next | vm_prev |vm_rb) 中, 分析了 vm_start vm_end vm_next vm_prev vm...
const struct vm_operations_struct *vm_ops; /* Information about our backing store: */ unsigned long vm_pgoff; /* 映射文件的偏移量,以PAGE_SIZE为单位 */ struct file * vm_file; /* 映射的文件,没有则为NULL */ void * vm_private_data; /* was vm_pte (shared mem) */ unsigned long vm...
unsigned long vm_pgoff; /* Offset (within vm_file) in PAGE_SIZE */ } 另外由 mmap 在文件映射与匿名映射区中映射出来的这一段虚拟内存区域同进程虚拟内存空间中的其他虚拟内存区域一样,也都是有权限控制的。 比如上图进程虚拟内存空间中的代码段,它是与磁盘上 ELF 格式可执行文件中的 .text section(磁...
vm_pgoff 是前面mmap传入的paddr。EPLD_BASE_ADDR是设备基址如果为0,则vm_pgoff就是实际的物理地址。 3. kmap kmap实现物理内存到内核地址空间的映射,物理内存地址可以是低端内存区,也可以是高端内存区,如果是低端,作用与page_address相同。 ioremap ioremap实现物理地址到内核空间的映射,所谓的物理地址一般是指非物理...
unsigned long vm_pgoff; /* Offset (within vm_file) in PAGE_SIZE units */ struct file * vm_file; /* File we map to (can be NULL). */ void * vm_private_data; /* was vm_pte (shared mem) */ #ifdef CONFIG_SWAP atomic_long_t swap_readahead_info; ...
如果VMA是匿名的(没有对于的文件),则设置vma->vm_pgoff为vm_start的所对应的页号。 调用vma_link,将VMA插入链表和红黑树。 /* Insert vm structure into process list sorted by address1. and into the inode's i_mmap tree. If vm_file is non-NULL2. then i_mmap_rwsem is taken here.*/intinser...
当调用 mmap 进行文件映射时,vm_file 属性就用来关联被映射的文件。这样一来虚拟内存区域就与映射文件关联了起来。vm_pgoff 则表示映射进虚拟内存中的文件内容,在文件中的偏移。 当然在匿名映射中,vm_area_struct 结构中的 vm_file 就为 null,vm_pgoff 也就没有了意义。
struct list_head anon_vma_node;/* anon_vma entry */struct anon_vma*anon_vma;/* anonymous VMA object */struct vm_operations_struct*vm_ops;/* associated ops */unsigned long vm_pgoff;/* offset within file */struct file*vm_file;/* mapped file, if any */void*vm_private_data;/* ...