linu复习 第四章 内存管理 考试要点整合

上传人:jin****ng 文档编号:110345069 上传时间:2022-06-18 格式:DOC 页数:11 大小:165.50KB
返回 下载 相关 举报
linu复习 第四章 内存管理 考试要点整合_第1页
第1页 / 共11页
linu复习 第四章 内存管理 考试要点整合_第2页
第2页 / 共11页
linu复习 第四章 内存管理 考试要点整合_第3页
第3页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第四章 内存管理1、 内存管理的组成(5个内存管理器)物理内存管理器:负责物理内存的分配、释放和回收,以页 为单位实施管理。内核内存管理器:负责内核中小内存的分配和回收,采用 slab 算法。虚拟内存管理器:在物理内存管理器的基础上,通过页目录、 页表及交换机制,为每个进程提供4GB的虚拟地址空间。内核虚拟内存管理器:负责内核中大内存的分配和回收。 用户空间内存管理器:负责用户态虚拟内存的分配和回收。2、物理内存管理器:(1 )基本内存单位:页(存储文件数据、充当buffer), 大小为4KB,每一个物理页在mem_map数组数组中 对应一个mem_map_t结构。(2 ) mem_map_t结构:描述一个物理页的信息。xinodebuffersoffsetnext hashwait qpprev_hashcount Qnextprevflags缓冲区等待的进程】引用计数页的状态结构加入页缓存同_文件 页的链表文件页在文 彳牛由的位置(3)物理内存的分配基本思想:伙伴算法一次分配的内存大小: 1个页块;将页块加入free_area中时:合并伙伴页块。 释放过程:实现函数_get_free_pages:判断所请求的页块大小是否能够被满足,若不能满足, 则函数返回0;判断当前空闲内存是否充足,充足则直接分配,不足则 先回收再分配;按照伙伴算法从free_area中分配空闲页块。(4)物理内存的释放: 基本思想:伙伴算法一次分配的内存大小: 1个页块;若没有大小相符的页块:要分割伙伴。释放过程:实现函数free_pages:根据要释放的页块首地址addr算出页块编号;判断是否为保留页、是否正在被使用;若可释放,则将该页块加入free_area数组。(5)物理内存回收的主要途径: Cache链表(找出一个无用slab最多的cache,将它的空闲 slab回收)mem_map数组(选择其中已经分配出去但可以废弃的物 理页)共享内存(每次交换出去一个共享页)进程队列(将进程的某些页交换到外存)dentry_unused链表(记录目前系统不再使用的目录项)3、内核内存管理器(1) 特点:不参与交换、使用时间短、响应速度快、尺 寸较小。(2) 数据结构:个cache管理一组slab,每个slab管理一组大小相等的内 存块,每个内存块都可用作一种数据结构。一个slab是来自物理内存管理器的一到多个物理页,这些物 理页被分成一组固定大小的块,称为slab对象。 Cache结构所在的链表信息: Cache环形链表; Slab双向链表;第一个有空闲对象的Slab;Slab管理的对象的信息(slab对象只能是2n个字节,大于等于32B、小于等于128KB)各对象的位置;各对象管理结构的位置;第一个空闲对象;:5Mb对象!Skib对象;引Rb对象L :曽lab对碁Sbb分配器物理内存(3 )内核内存管理器通过slab与物理内存管理器交互。当一个cache的所有slab中都没有空闲的内存块时,内核内存管理器会从物理内存中申请新页,将其划 分成小块,从而构成一个新的slab ;当一个slab中 的所有块都变成空闲时,将其归还给物理内存管理器。(4 )内核内存的分配(每次只能分配1个slab对象):确定要分配的对象所在cache;找到有空闲对象的slab或创建Slab;将该Slab中的第一个空闲对象分配出去; 返回该对象的首地址。(5 )内核内存的释放(以slab对象为单位释放):根据对象首地址找到它所属cache结构和slab结构;找到该对象的kmem_bufctl_s结构;将该对象加入所属Slab的空闲对象链表中;判断是否需调整cache结构中的Slab链表:(6 )内核内存的回收(以slab对象为单位回收):按时钟算法顺序搜索cache链表;每次搜索10个cache ;从中选出空闲Slab最多的cache;调整下次搜索的开始位置指针clock_searchp;将该cache中所有空闲的slab从链表上摘下来; 将其占用的内存归还给物理内存管理器。4、虚拟内存管理器(1) 虚拟内存抽象模型数据结构:虚拟内存区域结构:进程4GB的虚拟地址空间划分成小的虚拟内存区域(一段具 有相同属性的、连续的虚拟地址空间),4KB 1个虚拟内 存区域缺页异常:将需要的页读入内存。内存紧张:将进程暂时不用的页换出内存(虚拟内存 回收)。进程结束:释放其所有虚拟地址空间(虚拟内存释放)虚拟内存管理一拷贝方法 vfork:完全共享父进程的虚拟内存(直到子进程调用exec 或退出); Copy on Write (写时拷贝):仅拷贝mm_struct、vma结构、 页目录和页表;不拷贝页面内容(父/子进程要修改某个 页时才拷贝)。拷贝函数:copy_mm:若进程创建标志中设置了 CLONE_VM标志,则父子进程共 用同一个虚拟地址空间;否则,拷贝父进程的mm_struct结 构。 虚拟内存管理重建将可执行映像文件划分成不同的区域(函数exec和系统调用 old_mmap);对每一个区域调用 do_mmap建立其vma的结构。虚拟内存管理一回收将进程占用的某些内存上的信息暂且交换到外存中,释 放该内存,并归还给物理内存管理器。虚拟内存回收函数:swap_out执行一次,最多只回收一物理页。重复调用该函数,可回收多个物理页 虚拟内存管理释放部分释放一 do_munmap函数找到所涉及到的所有vma,从vma队列中摘下来;逐个处理这些vma:全部释放- -exit_mmap 函数找到该进程的vma队列;清除mm_struct结构中与vma有关的信息;顺序释放每个vma及其物理页;释放进程的页表。5、内核虚拟内存管理器 作用:当内核需要大内存时,空闲内存总量可以满足,但连续的空闲内存不能满足。解决方法:借鉴虚拟内存管理器的思想,在虚拟地址空间分配一块连续的虚拟内存,但对应的物理内存不连续。内核内存管理器分配内存的基本原则:分配的最大内存为128KB;分配的内存是连续的。 基本思路:在虚拟地址空间分配一块连续的虚拟内存区域,为其中每 个虚拟页申请物理页。 管辖的虚拟内存范围:虚拟内存内核部分的高端空间(high_memory+VMALLOC_OFFSET以上)
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!