Linux:操作系统分析 Chapter8内存管理 陈香兰(xlanchen@ustc.edu.cn) 计算机应用教研室©计算机学院 嵌入式系统实验室●苏州研究院 中国科学技术大学 Fa112014 October 31,2014 1口t4四1是42刀00 陈香兰(x1 anchenoustc,edu,cn)(计算丸应Linux操作系统分斯Chapter8内存管理 0 ctober31.20141/47
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Linux操作系统分析 Chapter 8 内存管理 陈香兰(xlanchen@ustc.edu.cn) 计算机应用教研室@计算机学院 嵌入式系统实验室@苏州研究院 中国科学技术大学 Fall 2014 October 31, 2014 陈香兰(xlanchen@ustc.edu.cn) (计算机应用教研室 Linux操作系统分析Chapter 8 内存管理 @计算机学院嵌入式系统实验室@苏州研究院中国科学技术大学Fall 2014) October 31, 2014 1 / 47
Outline 页框管理:页面级分配器 ·页框和页描述符 ●存储区(Memory Zones) ●页面级分配器接口 ·页框管理算法:伙伴算法 ② 内存区管理(memory area) ●slab分配器 非连续存储区管理 小结和作业 1口t4四1是42刀00 陈香兰(x1 anchenoustc,edu,cn)(计算丸应Linux操作系统分折Chapter8内存管理 0 ctober31.20142/47
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Outline 1. 页框管理:页面级分配器 页框和页描述符 存储区(Memory Zones) 页面级分配器接口 页框管理算法:伙伴算法 .2 内存区管理(memory area) slab分配器 .3 非连续存储区管理 4. 小结和作业 陈香兰(xlanchen@ustc.edu.cn) (计算机应用教研室 Linux操作系统分析Chapter 8 内存管理 @计算机学院嵌入式系统实验室@苏州研究院中国科学技术大学Fall 2014) October 31, 2014 2 / 47
动态存储器 ●在前面已经提到,Linux如何有效地利用x86的分段和分页 机制把逻辑地址转换为物理地址 ●RAM的某些部分永久地分配给内核,用以存放内核代码以 及静态数据,这部分RAM在Liux运行期间不会被释放,也 不能被分配用作其他用途 。RAM的其余部分称为动态存储器(dynamic memory)】 1口4四1是4P在刀0C 陈香兰(x1 anchenoustc,edu,cn)(计算丸应Linux操作系统分新Chapter8内存管理 0 ctober31.20143/47
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 动态存储器 在前面已经提到,Linux如何有效地利用x86的分段和分页 机制把逻辑地址转换为物理地址 RAM的某些部分永久地分配给内核,用以存放内核代码以 及静态数据,这部分RAM在Linux运行期间不会被释放,也 不能被分配用作其他用途 RAM的其余部分称为动态存储器(dynamic memory) 陈香兰(xlanchen@ustc.edu.cn) (计算机应用教研室 Linux操作系统分析Chapter 8 内存管理 @计算机学院嵌入式系统实验室@苏州研究院中国科学技术大学Fall 2014) October 31, 2014 3 / 47
动态存储器 。Linux内核的前512个页框(假定内核所需内存<1MB,from ULK:2) 0 0x9f 0x100 OxIff -text _etext _edata -end Unavailable page frames Available page frames Kernel code Initialized kernel data Uninitialized kernel data 1口t4四1是42刀00 陈香兰(x1 anchenoustc,edu,cn)(计算丸应Linux操作系统分斯Chapter8内存管理 0 ctober31.20143/47
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 动态存储器 Linux内核的前512个页框(假定内核所需内存<1MB,from ULK2) Uninitialized kernel data Initialized kernel data Kernel code Available page frames Unavailable page frames 0 1 0x9f 0x100 _text _etext _edata _end 0x1ff 陈香兰(xlanchen@ustc.edu.cn) (计算机应用教研室 Linux操作系统分析Chapter 8 内存管理 @计算机学院嵌入式系统实验室@苏州研究院中国科学技术大学Fall 2014) October 31, 2014 3 / 47
动态存储器 ·进程和内核的运行都需要动态存储器 。属于稀缺资源 ·整个系统的性能取决于如何有效地管理动态存储器 ·对动态存储器的使用要进行优化 ·原则:对于动态存储器要尽可能做到 按需分配,不需要时释放 1口+4四1是4P在刀00 陈香兰(x1 anchenoustc,edu,cn)(计算丸应Linx操作系统分新Chapter8内存管理 0 ctober31.20144/47
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 动态存储器 进程和内核的运行都需要动态存储器 属于稀缺资源 整个系统的性能取决于如何有效地管理动态存储器 对动态存储器的使用要进行优化 原则: 对于动态存储器要尽可能做到 按需分配,不需要时释放 陈香兰(xlanchen@ustc.edu.cn) (计算机应用教研室 Linux操作系统分析Chapter 8 内存管理 @计算机学院嵌入式系统实验室@苏州研究院中国科学技术大学Fall 2014) October 31, 2014 4 / 47
动态存储器 ·内核如何给自己分配动态存储器 。页框管理 ©小内存管理 ©非连续存储区管理 1口4四1是4P在刀0C 陈香兰(x1 anchenoustc,edu,cn)(计算丸应【inux操作系统分新Chapter8内存管理 0 ctober31.20145/47
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 动态存储器 内核如何给自己分配动态存储器 1. 页框管理 2. 小内存管理 3. 非连续存储区管理 陈香兰(xlanchen@ustc.edu.cn) (计算机应用教研室 Linux操作系统分析Chapter 8 内存管理 @计算机学院嵌入式系统实验室@苏州研究院中国科学技术大学Fall 2014) October 31, 2014 5 / 47
Outline 页框管理:页面级分配器 ·页框和页描述符 ●存储区(Memory Zones) ●页面级分配器接口 ●页框管理算法:伙伴算法 内存区管理(memory area) 非连续存储区管理 @小结和作业 1口t4四1是42刀00 陈香兰(x1 anchenoustc,edu,cn)(计算丸应【inux操作系统分斯Chapter8内存管理 0 ctober31.20146/47
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Outline . 1. 页框管理:页面级分配器 页框和页描述符 存储区(Memory Zones) 页面级分配器接口 页框管理算法:伙伴算法 .2 内存区管理(memory area) .3 非连续存储区管理 4. 小结和作业 陈香兰(xlanchen@ustc.edu.cn) (计算机应用教研室 Linux操作系统分析Chapter 8 内存管理 @计算机学院嵌入式系统实验室@苏州研究院中国科学技术大学Fall 2014) October 31, 2014 6 / 47
Outline 页框管理:页面级分配器 。页框和页描述符 。存储区(Memory Zones 。页面级分配器接口 。页框管理算法:伙伴算法 @内存区管理(memory area) 。slab分配器 非连续存储区管理 小结和作业 1口t4四1是42刀00 陈香兰(x1 anchenoustc,edu,cn)(计算丸应Linux操作系统分斯Chapter8内存管理 0 ctober31.20147/47
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Outline . 1. 页框管理:页面级分配器 页框和页描述符 存储区(Memory Zones) 页面级分配器接口 页框管理算法:伙伴算法 .2 内存区管理(memory area) slab分配器 .3 非连续存储区管理 4. 小结和作业 陈香兰(xlanchen@ustc.edu.cn) (计算机应用教研室 Linux操作系统分析Chapter 8 内存管理 @计算机学院嵌入式系统实验室@苏州研究院中国科学技术大学Fall 2014) October 31, 2014 7 / 47
页框管理 ●Linux采用页作为内存管理的基本单位 ●Linux采用的标准的页框大小为4KB ·由分页单元引发的缺页异常很容易得到解释 ·4KB是大多数磁盘块大小的倍数 。传输效率高 ●管理方便 /PAGE_SHIFT determines the page size * #define PAGE SHIFT 12 #define PAGE SIZE (AC(1,UL)<<PAGE SHIFT) #define PAGE MASK ((PAGE SIZE-1)) ●例如:512M的物理内存对应于???个页框? 1口4四1是4P刀00 陈香兰(x1 anchenoustc,edu,cn)(计算丸应【nux操作系统分折Chapter8内存管理 0 ctober31.20148/47
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 页框管理 Linux采用页作为内存管理的基本单位 Linux采用的标准的页框大小为4KB 由分页单元引发的缺页异常很容易得到解释 4KB是大多数磁盘块大小的倍数 传输效率高 管理方便 . . /* PAGE_SHIFT determines the page size */ #define PAGE_SHIFT 12 #define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT) #define PAGE_MASK (~(PAGE_SIZE-1)) 例如:512M的物理内存对应于???个页框? 陈香兰(xlanchen@ustc.edu.cn) (计算机应用教研室 Linux操作系统分析Chapter 8 内存管理 @计算机学院嵌入式系统实验室@苏州研究院中国科学技术大学Fall 2014) October 31, 2014 8 / 47
页框管理 ·内核必须记录每个页框的当前状态 ·哪些属于进程,哪些存放了内核代码/数据 ·对于动态存储器中的页框:是否空闲,即是否可用 。如果一个页框不可用,内核需要知道是谁在用这个页框 ·用户态进程、动态分配的内核数据结构、静态的内核代码、 页面cache、设备驱动程序缓冲的数据等等 1口+4四1是4P在刀0C 陈香兰(xianchenoustc,edu,cn)(升算丸应Linux操件系统分折Chapter8内存管理 0 ctober31.20148/47
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 页框管理 内核必须记录每个页框的当前状态 哪些属于进程,哪些存放了内核代码/数据 对于动态存储器中的页框:是否空闲,即是否可用 如果一个页框不可用,内核需要知道是谁在用这个页框 用户态进程、动态分配的内核数据结构、静态的内核代码、 页面cache、设备驱动程序缓冲的数据等等 陈香兰(xlanchen@ustc.edu.cn) (计算机应用教研室 Linux操作系统分析Chapter 8 内存管理 @计算机学院嵌入式系统实验室@苏州研究院中国科学技术大学Fall 2014) October 31, 2014 8 / 47