结构体 | |
struct | page_mapping |
struct | file_map |
struct | FilePage |
文件页结构体 更多... | |
struct | MapInfo |
虚拟地址和文件页的映射信息,在一个进程使用文件页之前,需要提前做好文件页在此内存空间的映射关系,如此通过虚拟内存就可以对文件页读写操作. 更多... | |
类型定义 | |
typedef struct FilePage | LosFilePage |
文件页结构体 更多... | |
typedef struct MapInfo | LosMapInfo |
虚拟地址和文件页的映射信息,在一个进程使用文件页之前,需要提前做好文件页在此内存空间的映射关系,如此通过虚拟内存就可以对文件页读写操作. 更多... | |
typedef struct ProcessCB | LosProcessCB |
枚举 | |
enum | OsPageFlags { FILE_PAGE_FREE , FILE_PAGE_LOCKED , FILE_PAGE_REFERENCED , FILE_PAGE_DIRTY , FILE_PAGE_LRU , FILE_PAGE_ACTIVE , FILE_PAGE_SHARED } |
Flags由 bitmap 管理 更多... | |
函数 | |
STATIC INLINE VOID | OsSetPageLocked (LosVmPage *page) |
给页面贴上被锁的标签 更多... | |
STATIC INLINE VOID | OsCleanPageLocked (LosVmPage *page) |
给页面撕掉被锁的标签 更多... | |
STATIC INLINE VOID | OsSetPageDirty (LosVmPage *page) |
给页面贴上数据被修改的标签 更多... | |
STATIC INLINE VOID | OsCleanPageDirty (LosVmPage *page) |
给页面撕掉数据被修改的标签 更多... | |
STATIC INLINE VOID | OsSetPageActive (LosVmPage *page) |
给页面贴上活动的标签 更多... | |
STATIC INLINE VOID | OsCleanPageActive (LosVmPage *page) |
给页面撕掉活动的标签 更多... | |
STATIC INLINE VOID | OsSetPageLRU (LosVmPage *page) |
给页面贴上置换页的标签 更多... | |
STATIC INLINE VOID | OsSetPageFree (LosVmPage *page) |
给页面贴上被释放的标签 更多... | |
STATIC INLINE VOID | OsCleanPageFree (LosVmPage *page) |
给页面撕掉被释放的标签 更多... | |
STATIC INLINE VOID | OsSetPageReferenced (LosVmPage *page) |
给页面贴上被引用的标签 更多... | |
STATIC INLINE VOID | OsCleanPageReferenced (LosVmPage *page) |
给页面撕掉被引用的标签 更多... | |
STATIC INLINE BOOL | OsIsPageActive (LosVmPage *page) |
页面是否活动 更多... | |
STATIC INLINE BOOL | OsIsPageLocked (LosVmPage *page) |
页面是否被锁 更多... | |
STATIC INLINE BOOL | OsIsPageReferenced (LosVmPage *page) |
页面是否被引用,只被一个进程引用的页叫私有页,多个进程引用就是共享页,此为共享内存的本质所在 更多... | |
STATIC INLINE BOOL | OsIsPageDirty (LosVmPage *page) |
页面是否为脏页,所谓脏页就是页内数据是否被更新过,只有脏页才会有写时拷贝 更多... | |
STATIC INLINE BOOL | OsIsPageMapped (LosFilePage *page) |
文件页是否映射过了 更多... | |
STATIC INLINE VOID | OsSetPageShared (LosVmPage *page) |
STATIC INLINE VOID | OsCleanPageShared (LosVmPage *page) |
给页面撕掉共享页标签 更多... | |
STATIC INLINE BOOL | OsIsPageShared (LosVmPage *page) |
是否为共享页 更多... | |
INT32 | OsVfsFileMmap (struct file *filep, LosVmMapRegion *region) |
STATUS_T | OsNamedMMap (struct file *filep, LosVmMapRegion *region) |
VOID | OsVmmFileRegionFree (struct file *filep, LosProcessCB *processCB) |
LosFilePage * | OsPageCacheAlloc (struct page_mapping *mapping, VM_OFFSET_T pgoff) |
LosFilePage * | OsFindGetEntry (struct page_mapping *mapping, VM_OFFSET_T pgoff) |
LosMapInfo * | OsGetMapInfo (LosFilePage *page, LosArchMmu *archMmu, VADDR_T vaddr) |
通过虚拟地址获取文件页映射信息,archMmu每个进程都有属于自己的mmu 更多... | |
VOID | OsAddMapInfo (LosFilePage *page, LosArchMmu *archMmu, VADDR_T vaddr) |
VOID | OsDelMapInfo (LosVmMapRegion *region, LosVmPgFault *pgFault, BOOL cleanDirty) |
删除映射信息 更多... | |
VOID | OsFileCacheFlush (struct page_mapping *mapping) |
文件缓存冲洗,把所有fpage冲洗一边,把脏页洗到dirtyList中,配合OsFileCacheRemove理解 更多... | |
VOID | OsFileCacheRemove (struct page_mapping *mapping) |
VOID | OsUnmapPageLocked (LosFilePage *page, LosMapInfo *info) |
VOID | OsUnmapAllLocked (LosFilePage *page) |
解除文件页在所有进程的映射 更多... | |
VOID | OsLruCacheAdd (LosFilePage *fpage, enum OsLruList lruType) |
VOID | OsLruCacheDel (LosFilePage *fpage) |
LosFilePage * | OsDumpDirtyPage (LosFilePage *oldPage) |
备份脏页,老脏页撕掉脏页标签 更多... | |
VOID | OsDoFlushDirtyPage (LosFilePage *fpage) |
冲洗脏页数据,将脏页数据回写磁盘 更多... | |
VOID | OsDeletePageCacheLru (LosFilePage *page) |
删除页高速缓存和LRU,对应 OsAddToPageacheLru 更多... | |
VOID | OsPageRefDecNoLock (LosFilePage *page) |
VOID | OsPageRefIncLocked (LosFilePage *page) |
int | OsTryShrinkMemory (size_t nPage) |
VOID | OsMarkPageDirty (LosFilePage *fpage, LosVmMapRegion *region, int off, int len) |
VOID | ResetPageCacheHitInfo (int *try, int *hit) |
struct file_map * | GetFileMappingList (void) |
磁盘高速缓存是一种软件机制,它允许系统把通常存放在磁盘上的一些数据保留在 RAM 中,以便对那些数据的 进一步访问不用再访问磁盘而能尽快得到满足。 页高速缓存中的信息单位是一个完整的页。 一个页包含的磁盘块在物理上不一定相邻,所以不能用设备号和块号标识,而是通过页的所有者和所有者数据中的索引来识别。 页高速缓存可以缓存以下内容 A.普通文件数据 B.含有目录的页 C.直接从快设备读取的页 D.用户进程数据的页 E.特殊文件系统的文件页
在文件 los_vm_filemap.h 中定义.
typedef struct FilePage LosFilePage |
文件页结构体
typedef struct MapInfo LosMapInfo |
虚拟地址和文件页的映射信息,在一个进程使用文件页之前,需要提前做好文件页在此内存空间的映射关系,如此通过虚拟内存就可以对文件页读写操作.
typedef struct ProcessCB LosProcessCB |
在文件 los_vm_filemap.h 第 231 行定义.
enum OsPageFlags |
Flags由 bitmap 管理
枚举值 | |
---|---|
FILE_PAGE_FREE | 空闲页 |
FILE_PAGE_LOCKED | 被锁页 |
FILE_PAGE_REFERENCED | 被引用页 |
FILE_PAGE_DIRTY | 脏页 |
FILE_PAGE_LRU | LRU置换页 |
FILE_PAGE_ACTIVE | 活动页 |
FILE_PAGE_SHARED | 共享页 |
在文件 los_vm_filemap.h 第 120 行定义.
在文件 vfs_file_mapping.c 第 364 行定义.
VOID OsAddMapInfo | ( | LosFilePage * | page, |
LosArchMmu * | archMmu, | ||
VADDR_T | vaddr | ||
) |
在文件 los_vm_filemap.c 第 127 行定义.
STATIC INLINE VOID OsCleanPageActive | ( | LosVmPage * | page | ) |
给页面撕掉活动的标签
在文件 los_vm_filemap.h 第 160 行定义.
STATIC INLINE VOID OsCleanPageDirty | ( | LosVmPage * | page | ) |
STATIC INLINE VOID OsCleanPageFree | ( | LosVmPage * | page | ) |
STATIC INLINE VOID OsCleanPageLocked | ( | LosVmPage * | page | ) |
STATIC INLINE VOID OsCleanPageReferenced | ( | LosVmPage * | page | ) |
STATIC INLINE VOID OsCleanPageShared | ( | LosVmPage * | page | ) |
VOID OsDeletePageCacheLru | ( | LosFilePage * | page | ) |
VOID OsDelMapInfo | ( | LosVmMapRegion * | region, |
LosVmPgFault * | pgFault, | ||
BOOL | cleanDirty | ||
) |
删除映射信息
在文件 los_vm_filemap.c 第 348 行定义.
VOID OsDoFlushDirtyPage | ( | LosFilePage * | fpage | ) |
冲洗脏页数据,将脏页数据回写磁盘
在文件 los_vm_filemap.c 第 326 行定义.
LosFilePage * OsDumpDirtyPage | ( | LosFilePage * | oldPage | ) |
VOID OsFileCacheFlush | ( | struct page_mapping * | mapping | ) |
文件缓存冲洗,把所有fpage冲洗一边,把脏页洗到dirtyList中,配合OsFileCacheRemove理解
在文件 los_vm_filemap.c 第 453 行定义.
VOID OsFileCacheRemove | ( | struct page_mapping * | mapping | ) |
在文件 los_vm_filemap.c 第 486 行定义.
LosFilePage * OsFindGetEntry | ( | struct page_mapping * | mapping, |
VM_OFFSET_T | pgoff | ||
) |
LosMapInfo * OsGetMapInfo | ( | LosFilePage * | page, |
LosArchMmu * | archMmu, | ||
VADDR_T | vaddr | ||
) |
通过虚拟地址获取文件页映射信息,archMmu每个进程都有属于自己的mmu
在文件 los_vm_filemap.c 第 144 行定义.
STATIC INLINE BOOL OsIsPageMapped | ( | LosFilePage * | page | ) |
VOID OsLruCacheAdd | ( | LosFilePage * | fpage, |
enum OsLruList | lruType | ||
) |
在文件 los_vm_scan.c 第 69 行定义.
VOID OsLruCacheDel | ( | LosFilePage * | fpage | ) |
在文件 los_vm_scan.c 第 85 行定义.
VOID OsMarkPageDirty | ( | LosFilePage * | fpage, |
LosVmMapRegion * | region, | ||
int | off, | ||
int | len | ||
) |
STATUS_T OsNamedMMap | ( | struct file * | filep, |
LosVmMapRegion * | region | ||
) |
有名映射,可理解为文件映射,跟匿名映射相对应 参数filep是广义的文件,在鸿蒙内核,目录/普通文件/字符设备/块设备/网络套接字/管道/链接 都是文件
在文件 los_vm_filemap.c 第 536 行定义.
LosFilePage * OsPageCacheAlloc | ( | struct page_mapping * | mapping, |
VM_OFFSET_T | pgoff | ||
) |
以页高速缓存方式分配一个文件页 LosFilePage Direct Memory Access(存储器直接访问)指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据。 整个数据传输操作在一个称为"DMA控制器"的控制下进行的。CPU只需在数据传输开始和结束时做一点处理(开始和结束时候要做中断处理)
在文件 los_vm_filemap.c 第 594 行定义.
VOID OsPageRefDecNoLock | ( | LosFilePage * | page | ) |
在文件 los_vm_scan.c 第 189 行定义.
VOID OsPageRefIncLocked | ( | LosFilePage * | page | ) |
在文件 los_vm_scan.c 第 145 行定义.
STATIC INLINE VOID OsSetPageActive | ( | LosVmPage * | page | ) |
给页面贴上活动的标签
在文件 los_vm_filemap.h 第 155 行定义.
STATIC INLINE VOID OsSetPageDirty | ( | LosVmPage * | page | ) |
STATIC INLINE VOID OsSetPageFree | ( | LosVmPage * | page | ) |
STATIC INLINE VOID OsSetPageLocked | ( | LosVmPage * | page | ) |
STATIC INLINE VOID OsSetPageLRU | ( | LosVmPage * | page | ) |
STATIC INLINE VOID OsSetPageReferenced | ( | LosVmPage * | page | ) |
STATIC INLINE VOID OsSetPageShared | ( | LosVmPage * | page | ) |
The follow three functions is used to SHM module | 给页面贴上共享页标签
在文件 los_vm_filemap.h 第 216 行定义.
VOID OsUnmapAllLocked | ( | LosFilePage * | page | ) |
解除文件页在所有进程的映射
在文件 los_vm_scan.c 第 57 行定义.
VOID OsUnmapPageLocked | ( | LosFilePage * | page, |
LosMapInfo * | info | ||
) |
在文件 los_vm_scan.c 第 44 行定义.
INT32 OsVfsFileMmap | ( | struct file * | filep, |
LosVmMapRegion * | region | ||
) |
在文件 los_vm_filemap.c 第 639 行定义.
VOID OsVmmFileRegionFree | ( | struct file * | filep, |
LosProcessCB * | processCB | ||
) |