#include <los_vm_map.h>
成员变量 | |
LosRbNode | rbNode |
LosVmSpace * | space |
所属虚拟空间,虚拟空间由多个线性区组成 更多... | |
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.h 第 119 行定义.
int VmMapRegion::f_oflags |
读写标签
在文件 los_vm_map.h 第 131 行定义.
UINT8 VmMapRegion::forkFlags |
vm space fork flags: COPY, ZERO, | 线性区标记方式
在文件 los_vm_map.h 第 127 行定义.
LOS_DL_LIST VmMapRegion::node |
region dl list | 链表节点,通过它将本线性区挂在VmSpace.regions上 ,但最新版本没有regions了,可以删除了
region LosVmPage list | 线性区虚拟页链表
在文件 los_vm_map.h 第 122 行定义.
VM_OFFSET_T VmMapRegion::pgOff |
region page offset to file | 以文件开始处的偏移量, 必须是分页大小的整数倍, 通常为0, 表示从文件头开始映射。
在文件 los_vm_map.h 第 124 行定义.
struct { ... } ::VmRegionAnon VmMapRegion::ra |
LosVmMapRange VmMapRegion::range |
region address range | 记录线性区的范围
在文件 los_vm_map.h 第 123 行定义.
LosRbNode VmMapRegion::rbNode |
region red-black tree node | 红黑树节点,通过它将本线性区挂在VmSpace.regionRbTree
在文件 los_vm_map.h 第 120 行定义.
struct { ... } ::VmRegionDev VmMapRegion::rd |
UINT32 VmMapRegion::regionFlags |
region flags: cow, user_wired | 线性区标签
在文件 los_vm_map.h 第 125 行定义.
UINT8 VmMapRegion::regionType |
vm region type: ANON, FILE, DEV | 映射类型是匿名,文件,还是设备,所谓匿名可理解为内存映射
在文件 los_vm_map.h 第 128 行定义.
struct { ... } ::VmRegionFile VmMapRegion::rf |
UINT32 VmMapRegion::shmid |
shmid about shared region | shmid为共享线性区id,id背后就是共享线性区
在文件 los_vm_map.h 第 126 行定义.
LosVmSpace* VmMapRegion::space |
所属虚拟空间,虚拟空间由多个线性区组成
在文件 los_vm_map.h 第 121 行定义.
union { ... } VmMapRegion::unTypeData |
const LosVmFileOps* VmMapRegion::vmFOps |
struct Vnode* VmMapRegion::vnode |
文件索引节点
在文件 los_vm_map.h 第 132 行定义.