更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
VmMapRegion结构体 参考

#include <los_vm_map.h>

成员变量

LosRbNode rbNode
 
LosVmSpacespace
 所属虚拟空间,虚拟空间由多个线性区组成 更多...
 
LOS_DL_LIST node
 
LosVmMapRange range
 
VM_OFFSET_T pgOff
 
UINT32 regionFlags
 
UINT32 shmid
 
UINT8 forkFlags
 
UINT8 regionType
 
union {
   struct VmRegionFile {
      int   f_oflags
 读写标签 更多...
 
      struct Vnode *   vnode
 文件索引节点 更多...
 
      const LosVmFileOps *   vmFOps
 文件处理各操作接口,open,read,write,close,mmap 更多...
 
   }   rf
 
   struct VmRegionAnon {
      LOS_DL_LIST   node
 
   }   ra
 
   struct VmRegionDev {
      LOS_DL_LIST   node
 
      const LosVmFileOps *   vmFOps
 操作设备像操作文件一样方便. 更多...
 
   }   rd
 
unTypeData
 

详细描述

线性区描述符,内核通过线性区管理虚拟地址,而线性地址就是虚拟地址 在内核里,用户空间的进程要访问内存或磁盘里的数据要通过映射的方式将内存的物理地址和用户空间的虚拟地址联系起来. 用户通过访问这样的虚拟地址就可以访问到实际的物理地址,也就是实际的物理内存. 映射在实现虚拟地址到物理地址中扮演 重要角色. 内核中映射分为文件映射和匿名映射. 文件映射就是磁盘中的数据通过文件系统映射到内存再通过文件映射映射到 虚拟空间.这样,用户就可以在用户空间通过 open ,read, write 等函数区操作文件内容. 匿名映射就是用户空间需要分配一定 的物理内存来存储数据,这部分内存不属于任何文件,内核就使用匿名映射将内存中的 某段物理地址与用户空间一一映射, 这样用户就可用直接操作虚拟地址来范围这段物理内存. 至于实际的代码,文件映射的操作就是: open,read,write,close,mmap... 操作的虚拟地址都属于文件映射. malloc 分配的虚拟地址属于匿名映射.

在文件 los_vm_map.h119 行定义.

结构体成员变量说明

◆ f_oflags

int VmMapRegion::f_oflags

读写标签

在文件 los_vm_map.h131 行定义.

◆ forkFlags

UINT8 VmMapRegion::forkFlags

vm space fork flags: COPY, ZERO, | 线性区标记方式

在文件 los_vm_map.h127 行定义.

◆ node

LOS_DL_LIST VmMapRegion::node

region dl list | 链表节点,通过它将本线性区挂在VmSpace.regions上 ,但最新版本没有regions了,可以删除了

region LosVmPage list | 线性区虚拟页链表

在文件 los_vm_map.h122 行定义.

◆ pgOff

VM_OFFSET_T VmMapRegion::pgOff

region page offset to file | 以文件开始处的偏移量, 必须是分页大小的整数倍, 通常为0, 表示从文件头开始映射。

在文件 los_vm_map.h124 行定义.

◆ 

struct { ... } ::VmRegionAnon VmMapRegion::ra

◆ range

LosVmMapRange VmMapRegion::range

region address range | 记录线性区的范围

在文件 los_vm_map.h123 行定义.

◆ rbNode

LosRbNode VmMapRegion::rbNode

region red-black tree node | 红黑树节点,通过它将本线性区挂在VmSpace.regionRbTree

在文件 los_vm_map.h120 行定义.

◆ 

struct { ... } ::VmRegionDev VmMapRegion::rd

◆ regionFlags

UINT32 VmMapRegion::regionFlags

region flags: cow, user_wired | 线性区标签

在文件 los_vm_map.h125 行定义.

◆ regionType

UINT8 VmMapRegion::regionType

vm region type: ANON, FILE, DEV | 映射类型是匿名,文件,还是设备,所谓匿名可理解为内存映射

在文件 los_vm_map.h128 行定义.

◆ 

struct { ... } ::VmRegionFile VmMapRegion::rf

◆ shmid

UINT32 VmMapRegion::shmid

shmid about shared region | shmid为共享线性区id,id背后就是共享线性区

在文件 los_vm_map.h126 行定义.

◆ space

LosVmSpace* VmMapRegion::space

所属虚拟空间,虚拟空间由多个线性区组成

在文件 los_vm_map.h121 行定义.

◆ 

union { ... } VmMapRegion::unTypeData

◆ vmFOps

const LosVmFileOps* VmMapRegion::vmFOps

文件处理各操作接口,open,read,write,close,mmap

操作设备像操作文件一样方便.

在文件 los_vm_map.h133 行定义.

◆ vnode

struct Vnode* VmMapRegion::vnode

文件索引节点

在文件 los_vm_map.h132 行定义.


该结构体的文档由以下文件生成: