更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
los_vm_page.h
浏览该文件的文档.
1/*
2 * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
3 * Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice, this list of
9 * conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright notice, this list
12 * of conditions and the following disclaimer in the documentation and/or other materials
13 * provided with the distribution.
14 *
15 * 3. Neither the name of the copyright holder nor the names of its contributors may be used
16 * to endorse or promote products derived from this software without specific prior written
17 * permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef __LOS_VM_PAGE_H__
33#define __LOS_VM_PAGE_H__
34
35#include "los_typedef.h"
36#include "los_bitmap.h"
37#include "los_list.h"
38#include "los_atomic.h"
39#include "los_spinlock.h"
40
41#ifdef __cplusplus
42#if __cplusplus
43extern "C" {
44#endif /* __cplusplus */
45#endif /* __cplusplus */
46
47/*!
48 * @brief 物理页框描述符 虚拟内存体现的是程序对内存资源的需求,而物理内存是对该请求的供应。
49 伙伴算法的思想是:把内存中连续的空闲页框空间看成是空闲页框块,并按照它们的大小(连续页框的数目)分组
50 * @attention vmPage 中并没有虚拟地址,只有物理地址
51 \n 关于nPages和order的关系说明,当请求分配为5页时,order是等于3的,因为只有2^3才能满足5页的请求
52 */
53typedef struct VmPage {
54 LOS_DL_LIST node; /**< vm object dl list | 物理内框节点,通过它挂/摘到全局g_vmPhysSeg[segID]->freeList[order]物理页框链表 或被使用的链表
55 上, 例如 共享内存的shmIDSource.node*/
56 PADDR_T physAddr; /**< vm page physical addr | 物理页框起始物理地址,只能用于计算,不会用于操作(读/写数据==)*/
57 Atomic refCounts; /**< vm page ref count | 被引用次数,共享内存会有多次引用*/
58 UINT32 flags; /**< vm page flags | 页标签,同时可以有多个标签(共享/引用/活动/被锁==)*/
59 UINT8 order; /**< vm page in which order list | 被安置在伙伴算法的几号序列( 2^0,2^1,2^2,...,2^order)*/
60 UINT8 segID; /**< the segment id of vm page | 所属物理内存段编号ID*/
61 UINT16 nPages; /**< the vm page is used for kernel heap | 分配页数,标识从本页开始连续的几页将一块被分配*/
62#ifdef LOSCFG_PAGE_TABLE_FINE_LOCK
63 SPIN_LOCK_S lock; /**< lock for page table entry */
64#endif
66
67extern LosVmPage *g_vmPageArray; ///< 物理页框(page frame)池,在g_vmPageArray中:不可能存在两个物理地址一样的物理页框,
68extern size_t g_vmPageArraySize; ///< 物理总页框(page frame)数
69
71VOID OsVmPageStartup(VOID);
72
73#ifdef __cplusplus
74#if __cplusplus
75}
76#endif /* __cplusplus */
77#endif /* __cplusplus */
78
79#endif /* __LOS_VM_PAGE_H__ */
原子操作 http://weharmonyos.com/openharmony/zh-cn/device-dev/kernel/kernel-small-basic-atomic....
volatile INT32 Atomic
Definition: los_atomic.h:102
双向链表由内联函数实现 http://weharmonyos.com/openharmony/zh-cn/device-dev/kernel/kernel-small-apx-dll....
unsigned short UINT16
Definition: los_typedef.h:56
unsigned long PADDR_T
Definition: los_typedef.h:207
unsigned char UINT8
Definition: los_typedef.h:55
unsigned int UINT32
Definition: los_typedef.h:57
LosVmPage * g_vmPageArray
物理页框(page frame)池,在g_vmPageArray中:不可能存在两个物理地址一样的物理页框,
Definition: los_vm_page.c:41
struct VmPage LosVmPage
物理页框描述符 虚拟内存体现的是程序对内存资源的需求,而物理内存是对该请求的供应。 伙伴算法的思想是:把内存中连续的空闲页框空间看成是空闲页框块,并按照它们的大小(连续页框的数目)分组
LosVmPage * LOS_VmPageGet(PADDR_T paddr)
通过物理地址获取页框
Definition: los_vm_page.c:120
VOID OsVmPageStartup(VOID)
Definition: los_vm_page.c:72
size_t g_vmPageArraySize
物理总页框(page frame)数
Definition: los_vm_page.c:42
物理页框描述符 虚拟内存体现的是程序对内存资源的需求,而物理内存是对该请求的供应。 伙伴算法的思想是:把内存中连续的空闲页框空间看成是空闲页框块,并按照它们的大小(连续页框的数目)分组
Definition: los_vm_page.h:53
SPIN_LOCK_S lock
Definition: los_vm_page.h:63
Atomic refCounts
Definition: los_vm_page.h:57
LOS_DL_LIST node
Definition: los_vm_page.h:54
UINT8 order
Definition: los_vm_page.h:59
UINT16 nPages
Definition: los_vm_page.h:61
UINT8 segID
Definition: los_vm_page.h:60
UINT32 flags
Definition: los_vm_page.h:58
PADDR_T physAddr
Definition: los_vm_page.h:56