网站大量收购独家精品文档,联系QQ:2885784924

[计算机软件及应用]linux代码导读-内存管理.ppt

[计算机软件及应用]linux代码导读-内存管理.ppt

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[计算机软件及应用]linux代码导读-内存管理

xlanchen@2008.4.18 Linux操作系统源代码分析导读 Linux内核源代码导读 中国科学技术大学计算机系 陈香兰(0551-3606864) xlanchen@ustc.edu.cn Spring 2009 内存管理 内存管理 动态存储器 Slab算法 非连续存储区 内存管理 RAM的某些部分永久地分配给内核,用以存放内核代码以及静态数据 RAM的其余部分称为动态存储器(dynamic memory) 动态存储器 进程和内核都需要动态存储器 属于稀缺资源 整个系统的性能取决于如何有效地管理动态存储器 对于动态存储器要尽可能做到: 按需分配,不需要时释放 页框管理 Linux采用页作为内存管理的基本单位 Linux采用的标准的页框大小为4KB 4KB是大多数磁盘块大小的倍数 传输效率高 管理方便 不考虑PSE,PAE 例如:512M的物理内存对应于128K个页框 算法:伙伴算法 请求页框 内核实现了一种底层的内存分配机制,并提供了几个接口供其他内核函数调用。 分配: alloc_pages/alloc_page __get_free_pages/__get_free_page/__get_dma_pages/get_zeroed_page 释放 free_pages/__free_pages/free_page__free_page 页框数据结构 内核必须记录每个页框当前的状态 哪些属于进程,哪些存放了内核代码/数据 是否空闲,即是否可用 如果不可用,内核需要知道是谁在用这个页框 这个页框可能的使用者有用户态进程、动态分配的内核数据结构、静态的内核代码、页面cache、设备驱动程序缓冲的数据等等 页描述符 页描述符:struct page 每个物理页框都用一个页描述符表示 count:页的使用引用计数器 0:空闲 0:页已经分配给一个或多个进程或用户某些内核数据结构 flags:页框状态,最多可以有32个,每个使用一个位表示 参见枚举类型pageflags 当内核调用一个页框分配函数时,必须指明请求页框所在的区。这个一般是通过一些flag标志来指定的 关于NUMA 不考虑 物理内存被划分为若干个node 存取时间不等 考虑CPU局部性 Node使用数据结构pg_data_t描述 每个node被划分成若干个zone 存储区(Memory Zones) 在一个理想的体系结构中,一个页框就是一个物理存储单元,可以用于任何事情,例如 存放内核数据/用户数据/缓存磁盘数据等 实际上存在硬件制约:一些页框由于自身的物理地址的原因不能被一些任务所使用,例如 ISA总线的DMA控制器只能对ram的前16M寻址 在一些具有大容量ram的32位计算机中,CPU不能直接访问所有的物理存储器,因为线性地址空间不够 zone 为了应付这种限制,Linux把具有同样性质的物理内存划分成——区(zones) Linux把物理存储器划分为4个区 ZONE_DMA ZONE_DMA32 (未见用) ZONE_NORMAL ZONE_HIGHMEM 参见枚举类型zone_type ZONE_DMA 和ZONE_NORMAL区 包含存储器的“常规”页,通过把它们映射到线性地址空间的3GB以上,内核就可直接访问 而ZONE_HIGHMEN区 中包含的存储器页面不能由内核直接访问 每个zone使用struct zone表示 空闲内存管理的关键:free_area mem_map数组 mem_map的定义和初始化 start_kernel?setup_arch?setup_memory?setup_bootmem_allocator?init_bootmem?init_bootmem_core 页描述符将会占用很大的一段空间 Mem_map、node、zone之间的关系 请求页框 内核实现了一种底层的内存分配机制,并提供了几个接口供其他内核函数调用。 分配: alloc_pages/alloc_page/alloc_pages_node/alloc_pages_current/… __get_free_pages/__get_free_page/__get_dma_pages/get_zeroed_page 释放 free_pages/__free_pages/free_page__free_page 关于unsigned int gfp_mask 指明可在何处并以何种方式查找空闲的页框 GFP_ATOMIC, 这种分配是高优先级的并且不能睡眠。一般在中断处理程序,下半部分和其他不能睡眠的场合下使用 GFP_KERNEL, 这是普通的分配模式,允许睡眠。一般在用户进程可能调用到的内核函数中使用,这个时候进程是可以安全的睡眠的 GF

文档评论(0)

ctuorn0371 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档