一种Linux内存管理机制

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第3 3卷 第 1 2期
Vo 1 . 33 N O.1 2
新 乡学院学报
J o u na r l o f Xi n x i a n g U n i v e r s i t y
2 0 1 6年 1 2月
De e . 2 01 6

种L i n uwenku.baidu.comx内存管理机制
谢 文娣 , 冷 先进 , 金 建
非常高 。 但它存 在内部碎片问题 , 这是 因为只有从 2的
0 次方 到 M A X — O R D E R次 方 的页才会被分 配 出来 , 且
对于硬件 c a c h e ( 缓存 ) 来说 , 这种使 用方法 也不方便 。
在L i n u x内核 中 , 固定分配的 内存经 常会被 申请使 用 , 如果每次 申请 都必须通过 b u d d y s y s t e m就会浪 费时间
c a c h e
_
g r o w ( ) 函数给 o b j e c t 分配 物理 内存 ( c a c h e _ g r o w
 ̄e ea r e a 中的。 系统会按 照需 求先拆分 物理 内存
_
( ) = > k m e m _ g e t p a g e s ( ) ) , 而分配 k m e m _ g e t p a g e s 还要通
zone
_
放 内存 , 如 果 在通 过 调用 k m e m _ c a c h e — a l l o c ( ) 函数分 配 内存 时 o b j e c t 不在 c a c h e中 ,那 么 就 通 过 调 用
c a c h eg r o w
_
( )函数在 c a c h e中 增 加 一 个 s l a b 。
内存是 L i n u x 系统 中重要的资源 ,在运行过程中 , 系统内核 和所有进程 的运行都需要使用有限 的物理 内 存 ,因此 内存 的分配和释放策略制约着系统 的运行效
c a c h e 里调 取 , 不使 用时就 释放 , 而 内存 也会 被重新 放 回c a c h e 里 。c a c h e以 s l a b 为单位来 划分 区域 , 几个 连 接 的物 理 页常 常包 含 在 一个 s l a b中。 多个 c a c h e在
程进 行 了分 析 。
关键 词 :内存 管理 ; 内存 回收 策略 ; 水位 线 ; O O M
中图分 类号 : T P 3 1 6 . 8 5
文献标 识 码 : A
文 章编 号 : 2 0 9 5 — 7 7 2 6 ( 2 0 1 6 ) 1 2 — 0 0 3 1 — 0 6
s l a b a l l o c a t o r 中共 同维护 . 而每个 c a c h e 里可 能包含 同

率 。高效 的内存管理策略不仅要有效地管理系统 内存 ,
减少 内存频繁分配 , 避免 出现 内存耗尽 的情况 . 而且要 尽量提高分配和 回收的速度以提高系统的运行效率。
1 L i n u x内存管理模型
L i n a x系 统 的 内存 区域 z o n e ) 分为 Z O N E — D MA 、 Z O N E N O R M A L和 Z O N E — H I G HM E M三种 , 系统 给每 种z o n e 都分 配有 b u d d y s y s t e m。 在b u d d y s y s t e m中 . 物 理 内 存 空 间 是 按 2的 整 数 次 幂 ( 称为 o r d e r ) 放 于
和空间 . 而引人 s l a b a l l o c a t o r ( 分配器 ) 则可以节省时间
和空间。s l a b a l l o c a t o r 模 型图如图 1 所示 。
s l b a a l l o c a t o r 会把 内存 资源放 到 c a c h e里按 定 值 进 行缓 存 。如果 系统需 要使 用 内存 ,就可 直接 从 此
过 b u d d y s y s t e m 实 现 ( k m e m _ g e t p a g e s ( )= >
_
空 间进行 内存 分配 ,再合并 和 释放 内存 ,即在 z o n e l a l o c a t o r 里调 用 a l l o c _ p a g e( )函数 分 配 内存 ,调 用
( 安徽 新华 学院 电子通信 工程 学院 , 合肥 2 3 0 0 8 8 )
摘 要 :以 L i n u x内存 管理 研 究为 基础 , 阐述 了 内存 管理模 型 、 伙伴 系统 s l a b分 配流 程 和 内存 回收 策 略 , 提 出 了通 过修 改
内存 管理器和调整 L i n u x 水位线的方法 , 以避免 O O M( o u t o f m e m o  ̄) 事件的发 生和 内存耗尽 问题 的出现 , 并对 内存 变化过
类 型的 o b j e c t ( 对象 ) 。系统通过调用 k m a l l o c ( ) 函数
或k m e m _ c a c h e _ a l l o c ( ) 函数 分 配 s l a b a l l o c a t o r 中的 内 存 资源 , 调用 k f r e e ( ) 函数或 k m e m _ c a c h e _ f r e e ( ) 函数 释
f r e e
_
a l l o c
p a g e s _ n o d e( ) a l l o c _ p a g e s( ) ) 。由此 可见 , s l a b
p a g e ( ) 函数 释放 内存 。虽 然 b u d d y s y s t e m 的效 率
a l l o c a t o r 的出现 并不意 味着 b u d d y s y s t e m完 全消失 . 而 是对后者 的一种增强 。
相关文档
最新文档