第16章_Linux内存管理机制.pdfVIP

  • 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;

文档评论(0)

1亿VIP精品文档

相关文档