结构体 | |
struct | VmFreeList |
struct | VmPhysSeg |
物理段描述符 更多... | |
struct | VmPhysArea |
物理区描述,仅用于方案商配置范围使用 更多... | |
类型定义 | |
typedef struct VmPhysSeg | LosVmPhysSeg |
物理段描述符 更多... | |
枚举 | |
enum | OsLruList { VM_LRU_INACTIVE_ANON = 0 , VM_LRU_ACTIVE_ANON , VM_LRU_INACTIVE_FILE , VM_LRU_ACTIVE_FILE , VM_LRU_UNEVICTABLE , VM_NR_LRU_LISTS } |
Lru全称是Least Recently Used,即最近最久未使用的意思 针对匿名页和文件页各拆成对应链表。 更多... | |
函数 | |
UINT32 | OsVmPagesToOrder (size_t nPages) |
获取参数nPages对应的块组,例如 7 -> 2^3 返回 3 更多... | |
struct VmPhysSeg * | OsVmPhysSegGet (LosVmPage *page) |
获取物理页框所在段 更多... | |
LosVmPhysSeg * | OsGVmPhysSegGet (VOID) |
VOID * | OsVmPageToVaddr (LosVmPage *page) |
通过page获取内核空间的虚拟地址 参考OsArchMmuInit #define SYS_MEM_BASE DDR_MEM_ADDR /* physical memory base 物理地址的起始地址 * / 本函数非常重要,通过一个物理地址找到内核虚拟地址 内核静态映射:提升虚实转化效率,段映射减少页表项 更多... | |
VOID | OsVmPhysSegAdd (VOID) |
添加物理段 更多... | |
VOID | OsVmPhysInit (VOID) |
物理段初始化 更多... | |
VOID | OsVmPhysAreaSizeAdjust (size_t size) |
段区域大小调整 更多... | |
UINT32 | OsVmPhysPageNumGet (VOID) |
获得物理内存的总页数 更多... | |
LosVmPage * | OsVmVaddrToPage (VOID *ptr) |
通过虚拟地址找映射的物理页框 更多... | |
VOID | OsPhysSharePageCopy (PADDR_T oldPaddr, PADDR_T *newPaddr, LosVmPage *newPage) |
拷贝共享页面 更多... | |
VOID | OsVmPhysPagesFreeContiguous (LosVmPage *page, size_t nPages) |
连续的释放物理页框, 如果8页连在一块是一起释放的 更多... | |
LosVmPage * | OsVmPhysToPage (paddr_t pa, UINT8 segID) |
通过物理地址获取所属参数段的物理页框 更多... | |
LosVmPage * | OsVmPaddrToPage (paddr_t paddr) |
LosVmPage * | LOS_PhysPageAlloc (VOID) |
申请一个物理页 更多... | |
VOID | LOS_PhysPageFree (LosVmPage *page) |
释放一个物理页框 更多... | |
size_t | LOS_PhysPagesAlloc (size_t nPages, LOS_DL_LIST *list) |
LOS_PhysPagesAlloc 分配nPages页个物理页框,并将页框挂入list 返回已分配的页面大小,不负责一定能分配到nPages的页框 更多... | |
size_t | LOS_PhysPagesFree (LOS_DL_LIST *list) |
释放双链表中的所有节点内存,本质是回归到伙伴orderlist中 更多... | |
VOID * | LOS_PhysPagesAllocContiguous (size_t nPages) |
分配连续的物理页 更多... | |
VOID | LOS_PhysPagesFreeContiguous (VOID *ptr, size_t nPages) |
释放指定页数地址连续的物理内存 更多... | |
VADDR_T * | LOS_PaddrToKVaddr (PADDR_T paddr) |
通过物理地址获取内核虚拟地址 更多... | |
PADDR_T | OsKVaddrToPaddr (VADDR_T kvaddr) |
变量 | |
struct VmPhysSeg | g_vmPhysSeg [VM_PHYS_SEG_MAX] |
物理内存采用段页式管理,先切段后伙伴算法页 更多... | |
INT32 | g_vmPhysSegNum |
段总数 更多... | |
typedef struct VmPhysSeg LosVmPhysSeg |
物理段描述符
enum OsLruList |
Lru全称是Least Recently Used,即最近最久未使用的意思 针对匿名页和文件页各拆成对应链表。
枚举值 | |
---|---|
VM_LRU_INACTIVE_ANON | 非活动匿名页(swap) |
VM_LRU_ACTIVE_ANON | 活动匿名页(swap) |
VM_LRU_INACTIVE_FILE | 非活动文件页(磁盘) |
VM_LRU_ACTIVE_FILE | 活动文件页(磁盘) |
VM_LRU_UNEVICTABLE | 禁止换出的页 |
VM_NR_LRU_LISTS |
在文件 los_vm_phys.h 第 74 行定义.
LosVmPage * LOS_PhysPageAlloc | ( | VOID | ) |
申请一个物理页
在文件 los_vm_phys.c 第 566 行定义.
VOID LOS_PhysPageFree | ( | LosVmPage * | page | ) |
释放一个物理页框
在文件 los_vm_phys.c 第 546 行定义.
size_t LOS_PhysPagesAlloc | ( | size_t | nPages, |
LOS_DL_LIST * | list | ||
) |
LOS_PhysPagesAlloc 分配nPages页个物理页框,并将页框挂入list
返回已分配的页面大小,不负责一定能分配到nPages的页框
list | |
nPages |
在文件 los_vm_phys.c 第 581 行定义.
VOID * LOS_PhysPagesAllocContiguous | ( | size_t | nPages | ) |
分配连续的物理页
在文件 los_vm_phys.c 第 478 行定义.
size_t LOS_PhysPagesFree | ( | LOS_DL_LIST * | list | ) |
释放双链表中的所有节点内存,本质是回归到伙伴orderlist中
在文件 los_vm_phys.c 第 661 行定义.
VOID LOS_PhysPagesFreeContiguous | ( | VOID * | ptr, |
size_t | nPages | ||
) |
LosVmPhysSeg * OsGVmPhysSegGet | ( | VOID | ) |
拷贝共享页面
在文件 los_vm_phys.c 第 602 行定义.
在文件 los_vm_phys.c 第 267 行定义.
VOID * OsVmPageToVaddr | ( | LosVmPage * | page | ) |
通过page获取内核空间的虚拟地址 参考OsArchMmuInit
#define SYS_MEM_BASE DDR_MEM_ADDR /* physical memory base 物理地址的起始地址 * /
本函数非常重要,通过一个物理地址找到内核虚拟地址
内核静态映射:提升虚实转化效率,段映射减少页表项
page |
在文件 los_vm_phys.c 第 288 行定义.
VOID OsVmPhysAreaSizeAdjust | ( | size_t | size | ) |
VOID OsVmPhysInit | ( | VOID | ) |
物理段初始化
在文件 los_vm_phys.c 第 181 行定义.
UINT32 OsVmPhysPageNumGet | ( | VOID | ) |
连续的释放物理页框, 如果8页连在一块是一起释放的
在文件 los_vm_phys.c 第 420 行定义.
VOID OsVmPhysSegAdd | ( | VOID | ) |
添加物理段
在文件 los_vm_phys.c 第 127 行定义.
LosVmPage * OsVmVaddrToPage | ( | VOID * | ptr | ) |
|
extern |
|
extern |