- 5
- 0
- 约9.61千字
- 约 31页
- 2018-06-09 发布于河南
- 举报
第16章_Linux内存管理机制
Linux操作系统精讲
大连理工大学软件学院
邱铁
综合楼413,Tel:0411
E_mail: qiutie@dlut.edu.cn
参考教材:
《Linux应用与开发典型实例精讲》邱铁、于玉龙、徐
子川编著. 清华大学出版社. 2010.5
第16章 内存管理
学习本章要达到的目标:
结合操作系统原理课程,深入理解Linux系统
物理内存管理机制;
理解伙伴算法和Slab分配器的工作原理;
熟悉操作系统提供的有关内存管理的内核函
数;
学会在Linux内核态下申请内存空间的方法。
16.1 关于Linux的内存管理
在Linux系统中对物理内存的管理
主要涉及
页面管理
连续内存区管理
非连续存储区管理
Linux物理内存管理方式
16.1.1 动态存储管理
一部分永久地分配给系统,作为内核代码段
和只读数据段的载体,用来存放内核程序代
码以及静态数据,这部分称为操作系统的静
态存储器(static memory)。
其它部分,则在Linux的管理下,进行内存
的动态申请和释放,称为动态存储器
(dynamic memory)。
16.1.2 页面管理
Linux采用页作为内存管理的基本单位,其
采用的标准的页面大小为4KB
因为4KB是大多数磁盘块大小的倍数,传输
效率高,管理方便,无需考虑PSE,PAE
内核使用页描述符来跟踪管理物理内存,每
个物理页面都用一个页描述符表示
页描述符用struct page的结构描述,所
有物理页面的描述符,组织在mem_map
的数组中,page结构则是对物理页面进行
描述的一个数据结构
mem_map数组与物理内存的对应关系
Linux采用著名的伙伴(Buddy)算法来
解决内存碎片问题。
伙伴算法把所有的空闲页面分为10个页块
链表,每个链表中的一个块含有2的幂次个
页面(叫做“页块”或简称“块” )
实例具体分析参见教材《Linux应用与开发
典型实例精讲》第256页
伙伴算法实例
得到最大连续空闲页面块
3
2 =8
2
2 =4
1
2 =2
0
2 =1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
如果此页面释放
16.1.3 slab分配模式
在Linux系统中所用到的对象如inode、
task_struct等,经常会涉及到大量对象
的重复生成、使用和释放问题。
这些对象在生成时,所包括的成员属性值都
赋成确定的数值,并且在使用完毕,释放结
构前,属性又恢复为未使用前的状态。
Linux的slab内存分配模式的基本思想
能够用合适的方法使得在对象前后两次被使
用时,在同一块内存,或同一类内存空间,
且保留了基本的数据结构,就可以大大提高
效率。
16.2 Linux的内存管理函数
vmalloc()是内核可以用来分配连续虚
存,但非连续物理内存的方法。
kmalloc分配在物理上连续的内存,这些内
存是实际上存在的,并且是连续的,根据
slab块进行分配。
16.3 实例训练与分析
在用户空间用valloc/malloc分配内存
在内核空间用kmalloc/vmalloc分配内
存
16.3.1 在用户空间用valloc/malloc
分配内存
实现用valloc 申请1MB内存单元
程序退出时释放。
实例源码
#define A_MEGABYTE 1024*1024
int main(){
char *some_memery;
您可能关注的文档
最近下载
- 制造业信息化战略规划实施与优化-PDM.docx VIP
- 那智不二越机器人flexgui toolbox操作说明书.pdf VIP
- 智慧工厂-智慧工厂解决方案.docx VIP
- 高中化学解题方法归纳:和量法.doc VIP
- 译林牛津新版高中英语(必修1-3)单词表.pdf VIP
- 包装有限公司分切机安全风险分级清单.docx VIP
- 重庆市西南大学附属中学2025届高三下学期二诊模拟考试物理试卷 含解析.docx VIP
- 【高中英语】《星火英语同步词汇》抗遗忘速记手册.docx VIP
- 成都市锦江区2026届初三一诊(暨期末考试)数学试卷(含答案).docx
- 三坐标 培训教程.pptx VIP
原创力文档

文档评论(0)