Linux内存是后台开发人员,需要深入了解的计算机资源。合理的使 用内存,有助于提升机器的性能和稳定性。本文主要介绍Linux内存组织 结构和页面布局,内存碎片产生原因和优化算法,Linux内核儿种内存管 理的方法,内存使用场景以及内存使用的那些坑。
从内存的原理和结构,到内存的算法优化,再到使用场景,去探寻内 存管理的机制和奥秘。
一S走进Linux内存
1>内存是什么?
1)内存乂称主存,是CPU能直接寻址的存储空间,山半导体器件制成
2)内存的特点是存取速率快
cprCMOS中斷1 1)\1\定时h"A X 1 ■
cpr
CMOS
中斷
1 1)\1\
定时h
"A X 1 ■
控第悄
?|掠制篇
1 -■ 4 ?
计數瞬EI
UL-I—
P1
1 1
\j 1
7 1
2
地址线
挖制线
总线
? 控制卡
于r印机控制卡
2、内存的作用
1)暂时存放CPU的运算数据
2)硬盘等外部存储器交换的数据
3)保障CPU讣算的稳定性和高性能
计K机昔圾挣储關
典型祐冋时间
可移动抒■?介阳
几百 GB_/VrB
几 ms~/V+ms
硬盘
几百 G8-/LTB
3ms~15nn$
内存
rts M B?几十Ge
lOOns-lSOns
二圾 cache
/LSKB-ZLMB
40 八 s** 60ns
—IRcache
几十B~几百KB
5ns*-lOns
几+fi~几百B
Ins
二-Linux内存地址空间
Linux内存地址空间Linux内存管理全貌
n(sj)?UM斗「Ran*__kttf ~盘?9目?wnaariM Ml*I1 5WMtU5~LJL .ftgRgC JgCfc■was*EMKtflJh0WWa怜
n(sj)?
UM
斗「
Ran*
__
kttf ~
盘?9目?
wnaa
riM Ml*
I
1 5
WMtU5~
LJ
L .
ftgRgC JgCfc
■was*
EMKtfl
Jh
0WW
a怜
?EWiU
ftmif
F-二
ilhWodX
g4G
EKUHttM
^A?<. _ uvmxr mktt.>
拠*代A
OtCDCMWOO
IRPAtttttKA
ffiPAWtiWO.
ffiFSW
OZKXIQOOM
td% Struck
2、内存地址——用户态&内核态
?用户态:Rings运行于用户态的代码则要受到处理器的诸多
?内核态:RingO在处理器的存储保护中,核心态
?用户态切换到内核态的3种方式:系统调用、异常、外设中断
盹3?
盹3
kffnf) munory<1CB)
QxCOOOOOM
(O11Uo?l pr*n>?fie^148K.aZE?0 城 MOOOM lUpp<4ni dUMH ptc.uw memory(3 GB)FA CE^ORSET=?xC WOM iLonw&oApplK?ttOA?^xOOOOOOOC地址转换? MMU是一种硬件电路,它包含两个部件,一个是分段部件,一个是分页部件 ?分段机制把一个逻辑地址转换为线性地址3、内存地址MMU
(O
11
Uo?l pr*n>?fie^
148K.aZE?0 城 MOOOM lUpp<4ni dUMH ptc.
uw memory(3 GB)
FA CE^ORSET=?xC WOM iLonw&o
ApplK?ttOA?
^xOOOOOOOC
地址转换
? MMU是一种硬件电路,它包含两个部件,一个是分段部件,一个是分页部件 ?分段机制把一个逻辑地址转换为线性地址
3、内存地址
MMU
?分页机制把一个线性地址转换为物理地址
15
31
分段机制
31
31
分页机制
她止物aw
她止
0
0
4、内存地址一-分段机制
段选择符
处理器提供了 6个分段寄存器来缓存段选择符,gs在线性地址空间中段的起始地址
处理器提供了 6个分段寄存器来缓存段选择符,
gs
在线性地址空间中段的起始地址
? 段的基地址(Base Address):
?段的界限(Limit):在虚拟地址空间中,段内可以使用的最大偏移量
分段实现
?逻辑地址的段寄存器中的值提供段描述符,然后从段描述符中得到段基址和段 界限,然后加上逻辑地址的偏移量,就得到了线性地址
310150
310
aw
5、内存地址一-分页机制(32位)?分页机制是在分段机制之后进行的,它进一步将线性地址转换为物理地址?10位贝U录,?单页的大小为线忡?地址10
5、内存地址一-分页机制(32位)
?分页机制是在分段机制之后进行的,它进一步将线性地址转换为物理地址
?10位贝U录,
?单页的大小为
线忡?地址
10位贝表项,12位页