- 13
- 0
- 约1.39万字
- 约 3页
- 2017-07-05 发布于天津
- 举报
Linux内核内存池实现研究.pdf
维普资讯
第 7卷 第 12期 2007年6月 科 学 技 术 与 工 程 Vo1.7 No.12 June2007
1671—1819(2007)12-2849-03 ScienceTechnologyandEngineering @ 2007 Sci.Tech.Engng.
Linux内核内存池实现研究
刘 磊
(西北工业大学 ,西安 710065)
摘 要 回顾 了Linux内核 内存管理发展历程,比较了早期的Linux内存管理与最新的Linuxkernel2.6.16内存管理的联系和
差别。分析Linux最新版本的内核内存管理策略,重点研究了最新的Linux2.6.16版本内核中的内核 内存池的实现。
关键词 Linux内核 内存池 存储管理
中图法分类号 TP332,11; 文献标志码 A
Linux早期的内存管理由get_free_page()、free— 成、使用和释放问题。对象生成算法的改进,可以在
page()、free—page_tables()、copy—page—tbales()、put 很大程度上提高整个系统的性能。这些对象往往在
— page()、do_wp_page()、do—no—page()和 get—empty 生成时,所包括的成员属性值一般都赋成确定的数
_ page()这几个定义在 memory.C中的函数来实现, 值,并且在使用完毕,释放结构前,这些属性又恢复
并用mem—map[]表对页面进行管理uJ。为了支持 为未使用前的状态。因此,如果我们能够用合适的
虚拟存储器 ,Linux系统采用 LRU分页替换算法载 方法使得在对象前后两次背使用时,在同一块 内存,
人进程。虚拟存储器由存储器管理机制及一个大容 或同一类内存空间,且保留了基本的数据结构,就可
量的快速硬盘存储器支持,它的实现基于局部性原 以大大提高效率 j。
理。早期的Linux内存管理虽然没有 2.6.16版本 1.1内存池的数据结构
复杂,但已经奠定了写时复制、需求加载等内存管理 Linux内存池是在2.6版内核中才有的,数据结
的基本思想。Linux是针对有 MMU的处理器设计 构定义在 include/linux/mempoo1.h中 J。其中内存
的,对具有MMU的处理器而言,虚拟地址被送到内 池的数据结构如下所示意:
typedefstreetmempool
存管理单元MMU,把虚拟地址映射为物理地址。通 — s{
spinlock tlock;
过赋予每个任务不同的虚拟地址到物理地址的转换 _
intmin
— nr;/}elements数组中的成员数量 }/
映射 ,支持不 同任务之间的保护。每个用户进程
intcurtnr; /}当前 elements数组中空闲的成员数量 }/
4GB长度的虚拟 内存被划分成固定大小的页面。 void } }elements:
原创力文档

文档评论(0)