此书已经开源,阅读地址 http://www.kerneltravel.net
一、内存管理概述
(一)、虚拟内存实现结构
(1)内存映射模块(mmap):负责把磁盘文件的逻辑地址映射到虚拟地址,以及把虚拟地址映射到物理地址。
(2)交换模块(swap):负责控制内存内容的换入和换出,它通过交换机制,使得在物理内存的页面(RAM 页)中保留有效的页 ,即从主存中淘汰最近没被访问的页,保存近来访问过的页。
(3)核心内存管理模块(core):负责核心内存管理功能,即对页的分配、回收、释放及请页处理等,这些功能将被别的内核子系统(如文件系统)使用。
(4)结构特定的模块:负责给各种硬件平台提供通用接口,这个模块通过执行命令来改变硬件MMU 的虚拟地址映射,并在发生页错误时,提供了公用的方法来通知别的内核子系统。这个模块是实现虚拟内存的物理基础。
(二)、内核空间和用户空间
Linux 简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux 的虚拟地址空间也为0~4G 字节。Linux 内核将这4G 字节的空间分为两部分。将最高的1G 字节(从虚拟地址0xC0000000 到0xFFFFFFFF),供内核使用,称为“内核空间”。而将较低的3G 字节(从虚拟地址0x00000000 到0xBFFFFFFF),供各个进程使用,称为“用户空间”。因为每个进程可以通过系统调用进入内核,因此,Linux 内核由系统内的所有进程共享。于是,从具体进程的角度来看,每个进程可以拥有4G 字节的虚拟空间。图 6.3 给出了进程虚拟空间示意图。
Linux 使用两级保护机制:0 级供内核使用,3 级供用户程序使用。从图6.3 中可以看出,每个进程有各自的私有用户空间(0~3G),这个空间对系统中的其他进程是不可见的。最高的1G 字节虚拟内核空间则为所有进程以及内核所共享。
(三)、虚拟内存实现机制间的关系
首先内存管理程序通过映射机制把用户程序的逻辑地址映射到物理地址,在用户程序运行时如果发现程序中要用的虚地址没有对应的物理内存时,就发出了请页要求①;如果有空闲的内存可供分配,就请求分配内存②(于是用到了内存的分配和回收),并把正在使用的物理页记录在页缓存中③(使用了缓存机制)。如果没有足够的内存可供分配,那么就调用交换机制,腾出一部分内存④⑤。另外在地址映射中要通过TLB(翻译后援存储器)来寻找物理页⑧;交换机制中也要用到交换缓存⑥,并且把物理页内容交换到交换文件中后也要修改页表来映射文件地址⑦。
二、内存分配与释放
在Linux 中,CPU 不能按物理地址来访问存储空间,而必须使用虚拟地址;因此,对于内存页面的管理,通常是先在虚存空间中分配一个虚存区间,然后才根据需要为此区间分配相应的物理页面并建立起映射,也就是说,虚存区间的分配在前,而物理页面的分配在后。
(一)、伙伴算法(Buddy)
Linux 的伙伴算法把所有的空闲页面分为10 个块组,每组中块的大小是2 的幂次方个页面,例如,第0 组中块的大小都为2^0(1 个页面),第1 组中块的大小都为2^1(2 个页面),第9 组中块的大小都为2^9(512 个页面)。也就是说,每一组中块的大小是相同的,且这同样大小的块形成一个链表。
我们通过一个简单的例子来说明该算法的工作原理。
假设要求分配的块的大小为128 个页面(由多个页面组成的块我们就叫做页面块)。该算法先在块大小为128 个页面的链表中查找,看是否有这样一个空闲块。如果有,就直接分配;如果没有,该算法会查找下一个更大的块,具体地说,就是在块大小256 个页面的链表中查找一个空闲块。如果存在这样的空闲块,内核就把这256 个页面分为两等份,一份分配出去,另一份插入到块大小为128 个页面的链表中。如果在块大小为256 个页面的链表中也没有找到空闲页块,就继续找更大的块,即512 个页面的块。如果存在这样的块,内核就从512 个页面的块中分出128 个页面满足请求,然后从384 个页面中取出256 个页面插入到块大小为256 个页面的链表中。然后把剩余的128 个页面插入到块大小为128 个页面的链表中。如果512 个页面的链表中还没有空闲块,该算法就放弃分配,并发出出错信号。
以上过程的逆过程就是块的释放过程,这也是该算法名字的来由。满足以下条件的两个块称为伙伴:
(1)两个块的大小相同;
(2)两个块的物理地址连续。
伙伴算法把满足以上条件的两个块合并为一个块,该算法是迭代算法,如果合并后的块还可以跟相邻的块进行合并,那么该算法就继续合并。
(二)、Slab 分配机制
可以根据对内存区的使用频率来对它分类。对于预期频繁使用的内存区,可以创建一组特定大小的专用缓冲区进行处理,以避免内碎片的产生。对于较少使用的内存区,可以创建一组通用缓冲区(如Linux 2.0 中所使用的2 的幂次方)来处理,即使这种处理模式产生碎
片,也对整个系统的性能影响不大。
硬件高速缓存的使用,又为尽量减少对伙伴算法的调用提供了另一个理由,因为对伙伴算法的每次调用都会“弄脏”硬件高速缓存,因此,这就增加了对内存的平均访问次数。
Slab 分配模式把对象分组放进缓冲区(尽管英文中使用了Cache 这个词,但实际上指的是内存中的区域,而不是指硬件高速缓存)。因为缓冲区的组织和管理与硬件高速缓存的命中率密切相关,因此,Slab 缓冲区并非由各个对象直接构成,而是由一连串的“大块(Slab)”构成,而每个大块中则包含了若干个同种类型的对象,这些对象或已被分配,或空闲,如图6.10 所示。一般而言,对象分两种,一种是大对象,一种是小对象。所谓小对象,是指在一个页面中可以容纳下好几个对象的那种。例如,一个inode 结构大约占300 多个字节,因此,一个页面中可以容纳8 个以上的inode 结构,因此,inode 结构就为小对象。Linux 内核中把小于512 字节的对象叫做小对象。
实际上,缓冲区就是主存中的一片区域,把这片区域划分为多个块,每块就是一个Slab,每个Slab 由一个或多个页面组成,每个Slab 中存放的就是对象。
qing.blog.sina.com.cn/3789927502/e1e5b44e330045jz.html
qing.blog.sina.com.cn/3789927502/e1e5b44e330045k0.html
qing.blog.sina.com.cn/3789927502/e1e5b44e330045k1.html
qing.blog.sina.com.cn/3789927502/e1e5b44e330045k2.html
qing.blog.sina.com.cn/3789927502/e1e5b44e330045k3.html
qing.blog.sina.com.cn/3789927502/e1e5b44e330045k4.html
qing.blog.sina.com.cn/3789927502/e1e5b44e330045k5.html
qing.blog.sina.com.cn/3789927502/e1e5b44e330045k6.html
qing.blog.sina.com.cn/3789927502/e1e5b44e330045k7.html
qing.blog.sina.com.cn/3789927502/e1e5b44e330045k8.html
qing.blog.sina.com.cn/3789927502/e1e5b44e330045k9.html
mzwlkj0025.blog.sohu.com/276932513.html
blog.sina.com.cn/s/blog_e1e5b44e0101novf.html
mzwlkj0025.blog.sohu.com/276932513.html
zzfkbyyy.blog.163.com/blog/static/22588703220138160132755/
blog.sina.com.cn/s/blog_e1e5b44e0101noyt.html
mzwlkj503.blog.sohu.com/276950715.html
zzfkbyyy.blog.163.com/blog/static/22588703220138162515440/
mzwlkj503.blog.sohu.com/276950715.html
zzfkbyyy.blog.163.com/blog/static/22588703220138162132856/
t.163.com/event/info/eventId/115748367186340540
home.51.com/1978325943/diary/item/10048362.html
mzwlkj503.blog.sohu.com/276950715.html
zzfkbyyy.blog.163.com/blog/static/22588703220138162132856/
home.51.com/1978325943/diary/item/10048363.html
t.163.com/event/info/eventId/4325995711637756069
blog.sina.com.cn/s/blog_e1e5b44e0101nozk.html
home.51.com/1978325943/diary/item/10048364.html
bibitie.com/zhengzhou/erke/x142x14639374.html
zzfkbyyy.blog.163.com/blog/static/225887032201381622733354/
mzwlkj503.blog.sohu.com/276954685.html
event.weibo.com/1890048
mzwlkj503.blog.sohu.com/276954685.html
zzfkbyyy.blog.163.com/blog/static/225887032201381623335495/
mzwlkj503.blog.sohu.com/276956461.html
home.51.com/1978325943/diary/item/10048365.html
home.51.com/1978325943/diary/item/10048366.html
zzfkbyyy.blog.163.com/blog/static/225887032201381624029747/
mzwlkj503.blog.sohu.com/276957205.html
meilishuo.com/group/45209383
t.163.com/event/info/eventId/-2186761505429479152
t.163.com/event/info/eventId/-7933974266839350164
event.weibo.com/1894710
blog.sina.com.cn/s/blog_e1eaf1fe0101bmp4.html
mzwlkj0024.blog.sohu.com/276965857.html
zzzfkb.blog.163.com/blog/static/225886078201381632232961/
event.weibo.com/1894866
blog.sina.com.cn/s/blog_e1eaf1fe0101bmp7.html
mzwlkj0024.blog.sohu.com/276966731.html
zzzfkb.blog.163.com/blog/static/225886078201381632720113/
event.weibo.com/1895128
blog.sina.com.cn/s/blog_e1eaf1fe0101bmpa.html
mzwlkj0024.blog.sohu.com/276967222.html
zzzfkb.blog.163.com/blog/static/225886078201381633026690/
zzzfkb.blog.163.com/blog/static/225886078201381633243349/
mzwlkj0024.blog.sohu.com/276967844.html
blog.sina.com.cn/s/blog_e1eaf1fe0101bmpe.html
meilishuo.com/group/45216225
meilishuo.com/group/45216237
huihui.cn/share/9434415
huihui.cn/share/9434491
blog.renren.com/share/557457906/16392013389
blog.renren.com/share/557457906/16392015300
blog.39.net/wmj1224/a_16180113.html
blog.39.net/wmj1224/a_16180132.html
blog.39.net/wmj1224/a_16180154.html
user.qzone.qq.com/2870204119/blog/1379315848
user.qzone.qq.com/2870204119/blog/1379315920
user.qzone.qq.com/2870204119/blog/1379315987
user.qzone.qq.com/2870204119/blog/1379316066
user.qzone.qq.com/2870204119/blog/1379316106
user.qzone.qq.com/2870204119/blog/1379316147
user.qzone.qq.com/2870204119/blog/1379316179
user.qzone.qq.com/2870204119/blog/1379316211
user.qzone.qq.com/2870204119/blog/1379316405
user.qzone.qq.com/2870204119/blog/1379316452
event.weibo.com/1895676
event.weibo.com/1895740
event.weibo.com/1896080
event.weibo.com/1896174
event.weibo.com/1896526
event.weibo.com/1896564
event.weibo.com/1896616
event.weibo.com/1896778
event.weibo.com/1896830
event.weibo.com/1896880
event.weibo.com/1897168
book.weibo.com/booklist/92379
book.weibo.com/booklist/92388
zz.58.com/tese/15272776044425x.shtml
zz.58.com/yiyuan/15272789884675x.shtml
blog.sina.com.cn/s/blog_e205f1320101nxqt.html
blog.sina.com.cn/s/blog_e205f1320101nxqv.html
blog.sina.com.cn/s/blog_e205f1320101nxr2.html
blog.sina.com.cn/s/blog_e205f1320101nxr3.html
blog.sina.com.cn/s/blog_e205f1320101nxr5.html
t.163.com/event/info/eventId/5155878340404016017
t.163.com/event/info/eventId/7367156949960286987
kan.weibo.com/con/3623198177184243?_from=title
kan.weibo.com/con/3623198609078752?_from=title
kan.weibo.com/con/3623199087348384?_from=title
kan.weibo.com/con/3623199452252913?_from=title
kan.weibo.com/con/3623199741659968?_from=title
kan.weibo.com/con/3623200391777221?_from=title
kan.weibo.com/con/3623200760757145?_from=title
qing.blog.sina.com.cn/3792040242/e205f13233004b4i.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4j.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4k.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4l.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4m.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4n.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4o.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4p.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4s.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4t.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4u.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4v.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4x.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4y.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4z.html
qing.blog.sina.com.cn/3792040242/e205f13233004b50.html
qing.blog.sina.com.cn/3792040242/e205f13233004b51.html
qing.blog.sina.com.cn/3792040242/e205f13233004b52.html
qing.blog.sina.com.cn/3792040242/e205f13233004b53.html
qing.blog.sina.com.cn/3792040242/e205f13233004b54.html
iciba.com/%E6%B2%B3%E5%8D%97%E8%87%AA%E9%97%AD%E7%97%87_%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E8%87%AA%E9%97%AD%E7%97%87%E5%8C%BB%E9%99%A2%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E6%B2%BB%E7%96%97%E8%87%AA%E9%97%AD%E7%97%87%E6%9C%80%E5%A5%BD%E7%9A%84%E5%8C%BB%E9%99%A2%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E6%B2%BB%E7%96%97%E8%87%AA%E9%97%AD%E7%97%87%E5%93%AA%E5%AE%B6%E5%8C%BB%E9%99%A2%E6%9C%80%E5%A5%BD%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E5%93%AA%E5%AE%B6%E5%8C%BB%E9%99%A2%E6%B2%BB%E7%96%97%E8%87%AA%E9%97%AD%E7%97%87%E5%A5%BD%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E8%87%AA%E9%97%AD%E7%97%87%E4%B8%93%E7%A7%91%E5%8C%BB%E9%99%A2%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E6%B2%BB%E7%96%97%E8%87%AA%E9%97%AD%E7%97%87%E7%9A%84%E5%8C%BB%E9%99%A2%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E8%87%AA%E9%97%AD%E7%97%87%E6%B2%BB%E7%96%97%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E5%84%BF%E7%AB%A5%E8%87%AA%E9%97%AD%E7%97%87%E5%8C%BB%E9%99%A2%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E4%B8%93%E6%B2%BB%E8%87%AA%E9%97%AD%E7%97%87%E7%9A%84%E5%8C%BB%E9%99%A2%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E6%9C%80%E5%A5%BD%E7%9A%84%E8%87%AA%E9%97%AD%E7%97%87%E5%8C%BB%E9%99%A2%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E8%87%AA%E9%97%AD%E7%97%87%E5%8C%BB%E9%99%A2%E5%93%AA%E9%87%8C%E5%A5%BD%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E5%93%AA%E5%AE%B6%E5%8C%BB%E9%99%A2%E6%B2%BB%E8%87%AA%E9%97%AD%E7%97%87%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E5%93%AA%E9%87%8C%E5%8F%AF%E4%BB%A5%E6%B2%BB%E8%87%AA%E9%97%AD%E7%97%87%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E5%93%AA%E5%AE%B6%E5%8C%BB%E9%99%A2%E7%9C%8B%E8%87%AA%E9%97%AD%E7%97%87%E6%9C%80%E5%A5%BD%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E6%B2%BB%E7%96%97%E5%B0%8F%E5%84%BF%E8%87%AA%E9%97%AD%E7%97%87%E6%9C%80%E5%A5%BD%E7%9A%84%E5%8C%BB%E9%99%A2%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E6%B2%BB%E7%96%97%E8%87%AA%E9%97%AD%E7%97%87%E6%AF%94%E8%BE%83%E5%A5%BD%E7%9A%84%E5%8C%BB%E9%99%A2%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E6%B2%BB%E8%87%AA%E9%97%AD%E7%97%87%E5%93%AA%E5%AE%B6%E5%A5%BD%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E8%87%AA%E9%97%AD%E7%97%87%E6%B2%B3%E5%8D%97%E5%93%AA%E5%AE%B6%E6%B2%BB%E7%96%97%E6%9C%80%E5%A5%BD%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E6%B2%BB%E7%96%97%E8%87%AA%E9%97%AD%E7%97%87%E5%93%AA%E9%87%8C%E5%A5%BD%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
meilishuo.com/group/45223409
meilishuo.com/group/45223709
meilishuo.com/group/45223895
meilishuo.com/group/45223945
meilishuo.com/group/45224001
meilishuo.com/group/45224249
meilishuo.com/group/45224437