linux kernel 内存分配概述
来源:互联网 发布:图像滤波算法matlab 编辑:程序博客网 时间:2024/05/18 01:06
linux kernel支持虚拟内存管理机制,通过页表机制实现对物理内存、内核逻辑内存和内核虚拟内存的管理。
linux kernel通过struct page结构来管理系统中的物理内存。kernel维护了一个或多个page结构数组,用来跟踪系统中的物理内存。在一些系统中,有一个单独的数组称之为mem_map。
kernel所能直接进行读写操作的内存只能是广义的内核虚拟内存(包括内核逻辑内存)。
常用的kernel内存处理函数为:
void *kmap(struct page *page)
void kunmap(struct page *page)
该对函数用于将物理页框地址转换为内核虚拟地址。对于低端地址直接返回内核逻辑地址,对于高端内存,创建页表。
void *kmalloc(size_t size, gfp_t flags)
void kfree(const void *x)
该对函数用于分配和释放内核逻辑地址,其在物理地址上是连续的。
unsigned long get_zeroed_page(gfp_t gfp_mask)
__get_free_page(gfp_t gfp_mask)
unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order)
free_page(unsigned long addr)
void free_pages(unsigned long addr, unsigned int order)
该组函数用于分配和释放较大的内核逻辑地址,其在物理地址上是连续的。
void *vmalloc(unsigned long size)
void vfree(const void *addr)
该对函数用于分配和释放内核虚拟地址,其在物理地址上可能不连续,同时需要建立页表。
static inline void __iomem *ioremap(resource_size_t offset, unsigned long size)
void iounmap(volatile void __iomem *addr)
该对函数用于为物理地址建立或注销页表,将物理地址转换为内核虚拟地址。
例如pci device driver访问相应外设时,首先需要调用request_region簇函数获取使用权限然后调用ioremap将物理地址转换为内核虚拟地址后,才能进行访问。
系统调用mmap用于实现内存映射,将内核空间地址与用户空间地址对应起来。其可通过两种方式实现:
remap_page_range函数:一次性的构造用于映射一段物理地址的新页表,实现了内核空间与用户空间的映射。
struct vm_ops中nopage成员函数:通过缺页异常来建立新页表。
- linux kernel 内存分配概述
- Linux Kernel内存分配方式
- LINUX 内核中物理内存分配函数(kernel api)分析
- Linux Kernel 内存管理之CMA分配和释放
- 【linux kernel】虚拟内存分配
- T-Kernel 内存分配API
- kernel内存分配中的vmalloc
- 进程概述和内存分配
- 进程概述和内存分配
- Linux kernel 内存子系统
- kernel 内存分配伙伴算法数学证明
- Linux内核内存分配
- linux内存分配函数
- linux 内存分配函数
- linux 内存分配学习
- linux 内存分配方法
- linux内核内存分配
- linux内存分配方法
- Sqlite3数据库的初步学习
- C#DataGridView分页显示代码详解
- U盘安装ubuntu 10.10,出现错误:Could not find kernel image 的解决办法
- virtualbox上安装opensuse和sphinx
- insmod Invalid module format
- linux kernel 内存分配概述
- GeneralSanguo工作笔记2——使用Scroller实现背景的拖拽移动
- windows mobile 软件需求以及准备
- 3d格斗游戏的碰撞检测
- poj1936
- windows explorer command bar 添加按钮
- 报道文
- 闲来无事
- 帧锁定同步算法