39#ifdef LOSCFG_KERNEL_VM
51 page->
order = VM_LIST_ORDER_MAX;
53#ifdef LOSCFG_PAGE_TABLE_FINE_LOCK
62#define VMPAGEINIT(page, pa, segID) do { \
63 OsVmPageInit(page, pa, segID); \
98 nPage = seg->
size >> PAGE_SHIFT;
100 UINT32 left = nPage & 0x7;
102 for (page = seg->
pageBase, pa = seg->
start; count > 0; count--) {
104 VMPAGEINIT(page, pa, segID);
105 VMPAGEINIT(page, pa, segID);
106 VMPAGEINIT(page, pa, segID);
107 VMPAGEINIT(page, pa, segID);
108 VMPAGEINIT(page, pa, segID);
109 VMPAGEINIT(page, pa, segID);
110 VMPAGEINIT(page, pa, segID);
111 VMPAGEINIT(page, pa, segID);
113 for (; left > 0; left--) {
114 VMPAGEINIT(page, pa, segID);
STATIC INLINE VOID LOS_AtomicSet(Atomic *v, INT32 setVal)
Atomic setting.
LITE_OS_SEC_ALW_INLINE STATIC INLINE VOID LOS_ListInit(LOS_DL_LIST *list)
VOID LOS_SpinInit(SPIN_LOCK_S *lock)
VOID * OsVmBootMemAlloc(size_t len)
UINTPTR g_vmBootMemBase
虚拟内存区间检查, 需理解 los_vm_zone.h 中画出的鸿蒙虚拟内存全景图
LosVmPage * g_vmPageArray
物理页框(page frame)池,在g_vmPageArray中:不可能存在两个物理地址一样的物理页框,
LosVmPage * LOS_VmPageGet(PADDR_T paddr)
通过物理地址获取页框
STATIC VOID OsVmPageInit(LosVmPage *page, paddr_t pa, UINT8 segID)
STATIC INLINE VOID OsVmPageOrderListInit(LosVmPage *page, size_t nPages)
伙伴算法初始化
VOID OsVmPageStartup(VOID)
size_t g_vmPageArraySize
物理总页框(page frame)数
struct VmPage LosVmPage
物理页框描述符 虚拟内存体现的是程序对内存资源的需求,而物理内存是对该请求的供应。 伙伴算法的思想是:把内存中连续的空闲页框空间看成是空闲页框块,并按照它们的大小(连续页框的数目)分组
VOID OsVmPhysPagesFreeContiguous(LosVmPage *page, size_t nPages)
连续的释放物理页框, 如果8页连在一块是一起释放的
struct VmPhysSeg g_vmPhysSeg[VM_PHYS_SEG_MAX]
物理内存采用段页式管理,先切段后伙伴算法页
LosVmPage * OsVmPhysToPage(paddr_t pa, UINT8 segID)
通过物理地址获取所属参数段的物理页框
UINT32 OsVmPhysPageNumGet(VOID)
获得物理内存的总页数
VOID OsVmPhysSegAdd(VOID)
添加物理段
VOID OsVmPhysAreaSizeAdjust(size_t size)
段区域大小调整
VOID OsVmPhysInit(VOID)
物理段初始化
物理页框描述符 虚拟内存体现的是程序对内存资源的需求,而物理内存是对该请求的供应。 伙伴算法的思想是:把内存中连续的空闲页框空间看成是空闲页框块,并按照它们的大小(连续页框的数目)分组