下载此文档

内存管理初始化.docx


文档分类:IT计算机 | 页数:约29页 举报非法文档有奖
1/29
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/29 下载此文档
文档列表 文档介绍
目录一、 内核版本 2二、 数据结构和函数列表 2(一) 数据结构 2(二) 函数列表 2三、 内容分析 3(一) 启动伙伴算法 41. 伙伴系统算法简介 42. 源代码片段分析 10(二) 初始化slab分配器 151. slab分配器简介 152. 源代码片段分析 18(三) 初始化非连续内存区 231. 非连续内存区简介 232. 源代码片段分析 25四、 个人总结 27初始化内存管理内核版本版本为linux-。数据结构structrange{}structkmem_list3{}staticstructkmem_cachecache_cache={}structcache_sizesmalloc_sizes[]={}staticstructcache_names__initdatacache_names[]={}structvm_struct{}structvmap_area{}函数列表void__initmem_init(void)unsignedlong__initfree_all_bootmem(void)unsignedlong__initfree_all_memory_core_early(initnodeid)staticvoid__init__free_pages_memory(unsignedlongstart,unsignedlongend)staticunsignedlong__initfree_all_bootmem_core(bootmem_data_t*bdata)void__meminit__free_pages_bootmem(structpage*page,unsignedintorder)void__free_pages(structpage*page,unsignedintorder)void__initkmem_cache_init(void)staticvoidkmem_list3_init(structkmem_list3*parent)staticvoid__initset_up_list3s(structkmem_cache*cachep,intindex)staticinlinevoidpgtable_cache_init(void)void__initvmalloc_init(void)内容分析在本文中除了介绍内存管理的初始化过程(包括启动伙伴算法,初始化slab分配器和初始化非连续内存区)还会同时介绍bootmemoryallocator的退出过程。linux内核刚启动时采用bootmemory管理内存,之后由bootmemory初始化buddysystem,最终由buddy接管内存的动态分配。具体地,当函数paging_init(void)执行时,只有bootmemory空间被初始化完毕,因此页表描述符只能使用bootmemory中的空间。linux对系统中每个zone中的大多数空闲页面采用buddy算法进行管理,同时为了加速页面分配,对少量单个页面进行了缓存(见zone中的pageset[NR_CPUS]字段)。在一个操作系统中,还可以采用其他动态存储管理策略:顺序搜索,分类搜索,位图搜索等。有能力的用户可以根据情况开发自己的存储管理算法来代替linux中的buddy。在linux系统中,mem_init()函数执行完毕之后,buddy系统初始化完毕,此时,全局变量mem_init_done将被设置为1,之后buddy系统将开始对linux物理内存进行管理。全局变量mem_init_done被设置之前。即,从linux系统开始引导,到mem_init函数结束之前,linux不能使用buddy进行物理内存分配。必须使用bootmemory进行内存的申请和分配。bootmemory仅仅是系统在初期为过渡而使用的内存管理算法。bootmemory的初始化使用FFB(FirstFitAllocator)算法管理bootmemory的物理内存。FFB算法使用位图(bitmap)描述整个物理内存空间。其中,位图中的每一位代表一个实际物理页面。若位图某位为1表示对应的物理页面已经别使用,为0表示未使用。系统程序员在使用bootmemory申请内存和释放时容易在物理内存留下多个空洞。bootmemory的清除与释放不同:释放是指释放正在使用的物理页面,清除是指将没有在bootmemory中使用的物理页面清除出bootmemory并加入到buddysystem中去。可见如果系统程序员不释放在bootmemory中申请的内存时,这些内存将不会被清除到buddysystem中去。从而永远被系统占用。li

内存管理初始化 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数29
  • 收藏数0 收藏
  • 顶次数0
  • 上传人xiarencrh
  • 文件大小641 KB
  • 时间2020-08-07