栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

linux kernel 内存管理 感想总结(未完待续)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

linux kernel 内存管理 感想总结(未完待续)

理解内存管理需要知道的概念
  • 什么是 MMU , MMU的作用?
  • 什么是页帧,页,页表,区,他们之间的关系又是怎样的 ?
  • 什么是页的高速缓存
  • 地址线, 寻址, cpu 和 各级高速缓存的关系, cpu , 各级高速缓存 , 内存的关系
MMU

MMU (manage mem unit ) 将虚拟内存地址映射转换为 物理地址的硬件
思考为什么,需要这个硬件, 软件实现不行吗,等我叙述到最后,在做回答;

kernel 中 关于物理页的描述
struct page{
	unsigned long flags ; // 代表的该页的状态 每一个bit位代表一种状态 总共32bit,所以做多表示32 状态
// 代表页的使用次数,原子操作数 __count < 0 未被使用 =0 表示页现在空闲 一般使用 page_count(struct page* ptr),来查看页的状态
	atomic_t __count;
	atomic_t _mapcount; //同上,实际上就是页被映射的次数
	unsigned long private; //该页的私有数据
	pgoffset_t index;
	struct address_space *mapping; // 页的地址映射空间
	void* virtual; //页的虚拟地址
	struct list_head* lru;
};

此结构只与物理页相关, 与虚拟页无关
计算该数据结构按照32 位系统 4字节的内存对齐 计算描述一个页需要 40 字节; 假设物理页为 4 kb 大小 ;
而一个页为4KB
4gb 内存 4*1024*1024 /4 = 1024* 1024 个页面
40*1024*1024 / 1024 = 40*1024 kb = 40mb
所以一个4gb 内存页的表述结构占用40mb 但是 40Mb <<< 4GB 所以这种描述消耗很小 , 对4GB的内存来说几乎可以忽略不计

Kernel 中 区的概念 (Zone)
  • 为甚么要这设置区的概念
    1. 有些内存页只能在特定的硬件地址上进行使用(将硬件的IO 空间 映射到 内存空间 ARM 架构中经常用到)
    1. 根据前人总结,一些硬件只能用某些特定的内存地址来执行DMA(直接内存访问)
    1. 前人还总结了, 一些体系结构下虚拟地址范围 要 小于 物理地址范围,那尴尬的事情发生了,用于永远无法完成完整的物理内存映射(大于的情况下就没有任何问题)
    1. 所以常见的4中分区
  • ZONE_DMA 这个物理页可以用来进行DMA 的擦操作
  • ZONE_DMA32 同上,但是只能被寻址能力32位的设备进行使用
  • ZONE_NORMAL 正常区域
  • ZONE_HIGHM 高端内存区域, 其中的页就不能永久的映射到内核地址空间 > 896MB 的物理内存 32位的操作系统上

linux的页划分为区,形成不同的内存池
注解:
内存管理中最重要的就是理解这样做的目的是什么
大家可以思考档案柜的作用和图书馆图书查找图书的方式(内核中的问题都很抽象,需要自己理解具象化)
所以分页,分区,和分不同的功能区是必然的选择,我查找的资料比较老,依据的是2.6.x 的内核版本, 所以这涉及到了 slab 缓存层,没有 slub 缓存的方式,和 slab 的缓存的方式
总结一点就是,所有查找的资料都是抽象的概念, 不会有太多具象化的解释,理解到这种设计方式,就真的是因人而异了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/613120.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号