- 1、本文档共56页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统(第四版)第8章课件ppt
* 3个管理区 Linux把内存节点划分为3个管理区zone。 ZONE_DMA:包含低于16MB的常规内存页框。用于对老式的基于ISA设备的DMA支持。 ZONE_NORMAL:包含高于16MB且低于896MB的常规内存页框。 ZONE_HIGHMEM:包含从896MB开始的高端物理页框。内核不能直接访问这部分页框。在64位体系结构上,该区总是空的。 * 管理区描述符 struct zone { unsigned long free_pages; 空闲页框数 struct per_cpu_pageset pageset[NR_CPUS]; /*每CPU页高速缓存*/ struct free_area free_area[11]; /*伙伴系统中的11个空闲页框链表*/ struct list_head active_list; /*活动页框链表*/ struct list_head inactive_list; /*非活动…*/ struct page *zone_mem_map;/*指向首页框的*/ …….}; * 8.2.4 分区页框分配器 管理区分配器 伙伴系统 ZONE_NORMAL 内存管理区 每CPU页框高速缓存 伙伴系统 ZONE_DMA 内存管理区 每CPU页框高速缓存 伙伴系统 ZONE_HIGHMEM 内存管理区 每CPU页框高速缓存 * 分区页框分配器 负责处理对连续物理页框的分配请求。 管理区分配器负责搜索一个能满足动态内存请求的内存区。当空闲页框不足时,应当触发页框回收算法。 在每个管理区内的页框,除了一小部分页框被保留为每CPU页框高速缓存外(以满足本地CPU发出的对单个页框的请求),其它的由伙伴系统来管理。 * 伙伴系统 采用伙伴系统(buddy system)管理连续的空闲内存页框,以解决外碎片问题。 外碎片就是夹杂在已分配页框中间的那些连续的小的空闲页框。 伙伴算法把空闲页框组织成11个链表,分别链有大小为1,2,4,8,16,32,64,128,256,512和1024个连续页框的块。 * 伙伴系统 假设要请求一个具有8个连续页框的块,该算法先在8个连续页框块的链表中检查是否有一个空闲块。如果没有,就在16个连续页框块的链表中找。如果找到,就把这16个连续页框分成两等份,一份用来满足请求,另一份插入到具有8个连续页框块的链表中。如果在16个连续页框块的链表中没有找到空闲块,那么就在更大的块链表中查找。直到找到为止。 * 伙伴系统 lru …… private=3 1 2 4 8 16 32 64 128 256 512 1024 管理区描述符的free_area数组 lru 起始页框描述符 …… private=3 lru 起始页框描述符 …… private=3 * 伙伴系统 管理空闲页框的链表,包含着每个空闲页框块的起始页框描述符;指向链表中相邻元素的指针存放在页框描述符的lru字段中。 当页框不空闲时,页框描述符的lru字段用于构建页的最近最少使用双向链表。 用页框描述符的private字段存放页框块的幂指数order。 * 8.3 slab管理 伙伴系统以页框为单位,适合于对大块内存的分配请求。 slab分配器用于为只有几十或几百个字节的小内存区分配内存。如,file对象。 slab分配器把小内存区看作对象,slab分配器对不再引用的对象只是释放但内容保留,以后再请求新对象时,就可直接使用而不需要重新初始化。 * slab分配器 从分区页框分配器获得几组连续空闲页框 slab分配器为不同类型的对象生成不同的高速缓存,每个高速缓存存储相同类型的对象。高速缓存由一连串的slab构成,每个slab包含了若干个同类型的对象。 对象 slab 对象 slab 高速缓存 高速缓存 * slab分配器 高速缓存有自己的描述符 高速缓存中的每个slab也有自己的描述符 对象描述符存放在一个数组中,位于相应的slab描述符之后。 将同一高速缓存里的多个slab进行分类。含有部分空闲对象的slab、不含有空闲对象的slab、只含有空闲对象的slab。 * 8.3.2 slab着色 硬件高速缓存处于CPU和RAM之间,一个硬件高速缓存由多个缓存行组成,一个缓存行有几十个字节。在高速缓存的不同slab内,具有相同偏移量的对象最终很可能映射到同一硬件高速缓存行。 着色就是利用空闲未用的字节数对slab进行着色,把slab中的一些空闲区域从末尾移到开头 着色后,具有不同颜色的slab,其第一个对象存放在不同偏移量处。可用的颜色数=(空闲未用的字节数free)/(某一给定正整数aln)。 * slab着色 * 8.4 高端内存区管理 没有虚地址的
文档评论(0)