linux内核学习笔记之内存管理

本文详细介绍了Linux内核的内存管理机制,包括物理页管理、内存区划分、页操作接口、slab高速缓存以及每CPU变量。讨论了如何通过struct page结构体管理内存,以及kmalloc、vmalloc、slab分配器和per CPU变量的使用。
摘要由CSDN通过智能技术生成
linux内核把物理页作为内存管理的基本单位。每一页的大小根据系统架构不同有所区别,32位系统下为4KB,64位系统下为8KB。内存管理单元(MMU)以页为单位来管理系统中的页表,负责虚拟地址到物理地址的转换,用户所使用的内存地址一般都是虚拟地址。
内核中页的结构体中比较重要的成员为:
struct page {
    unsigned long flags;        /* 页的状态,包括脏标志、是否锁定  */
    atomic_t _count;              /* 引用计数  */
    void *virtual;                   /* 页的虚拟地址 */     

};
内存中区的划分:
名称
物理内存
描述
ZONE_DMA             
 0~16MB
DMA使用的内存
ZONE_NORMAL
16~896MB
正常可寻址的内存
ZONE_HIGHEM
 896MB之后的内存
动态映射的内存
区的划分实际是和体系结构相关,如x86体系结构下,ISA设备只能在物理内存的前16MB执行DMA。所以在某些体系结构下,ZONE_DMA和ZONE_NORMAL可能合并为ZONE_NORMAL。高端内存ZONE_HIGHEM也是类似。不同的区组成了不同的内存池,内存池的主要作用是减少内存碎片。
内核中区也有对应的结构体(省略部分):
struct zone {
    unsigned long watermark[NR_WMARK];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值