收藏 分销(赏)

操作系统---存储管理.pptx

上传人:a199****6536 文档编号:4290011 上传时间:2024-09-03 格式:PPTX 页数:30 大小:167.92KB
下载 相关 举报
操作系统---存储管理.pptx_第1页
第1页 / 共30页
操作系统---存储管理.pptx_第2页
第2页 / 共30页
操作系统---存储管理.pptx_第3页
第3页 / 共30页
操作系统---存储管理.pptx_第4页
第4页 / 共30页
操作系统---存储管理.pptx_第5页
第5页 / 共30页
点击查看更多>>
资源描述

1、10.2.1 物理内存的管理内存用途内存用途存储内核映像存储内核映像其它可动态加载内核模块内存需求其它可动态加载内核模块内存需求进程用户页面的需求进程用户页面的需求缓冲需求缓冲需求功能要求功能要求快速响应请求快速响应请求尽可能地利用内存同时减少内存碎片尽可能地利用内存同时减少内存碎片解决方案解决方案基于区域的伙伴系统及基于区域的伙伴系统及slabslab分配器分配器 用户虚空间对应固定物理内存8M4.动态分配用(可以DMA)静态内核使用动态分配用进程虚地址空间物理内存硬件使用 mem_map(数组大小为页帧数)896M空间03G4G1016M896M页帧页帧 物理内存以页帧为基本单位,页帧的大

2、小固定为4K。区域区域:物理内存分成如下三个区域:DMA ZONE DMA ZONE 低于16MB的内存,是DMA方式能够访问的物理内存。一般用于I/O缓冲区 NORMAL ZONE NORMAL ZONE 介于16MB与896MB之间,直接被内核虚地址映射。部分用于内核程序及常数,部分用于动态表格或用于用户空间页 HIGHMEM ZONE HIGHMEM ZONE 高端内存,超过896MB以上的部分。用于存放动态映射页面。一、一、页帧与区域页帧与区域 在内存分配时要根据区域访问优先级别来决定分配次序。比如为DMA方式分配内存,DMA ZONE是唯一符合要求的区域。而通常的内存分配,则可先在N

3、ORMAL ZONE 进行,如果不能满足要求,则在DMA ZONE尝试。二、二、伙伴算法伙伴算法伙伴算法伙伴算法 Linux对每个区域采用了伙伴算法来对管理空闲内存页帧减少外部碎片。当要为进程用户空间页面、系统I/O缓冲区、系统存储对象(如表格;动态模块等)分配页帧时调用伙伴算法。以16个页面为例,空闲页面构成五个链表 (1)初始态 连续16个页面 1-16 连续8个页面连续4个页面连续2个页面连续1个页面(2)分配两个页面,剖分1-16,1-2被使用,状态如下 连续16个页面 连续8个页面 9-16连续4个页面 5-8连续2个页面 3-4连续1个页面分配方法:尽可能从合适大小的链表寻找,如有

4、,则摘除返回页面。否则寻找更大的连续空闲页面,剖成两个大小相等伙伴,将后者插入合适位置。再看前者是否满足要求,若不,继续剖分。(3)再申请四个页面,1-2 5-8被使用 连续16个页面 连续8个页面 9-16连续4个页面连续2个页面 3-4连续1个页面(4)释放页面1-2,看能否合并伙伴 连续16个页面 连续8个页面 9-16连续4个页面 1-4连续2个页面连续1个页面释放过程:看能否与空闲伙伴合并,若可以,则合并成更大的连续页面并继续重复能否与空闲伙伴合并的过程。最后插入合适位置。两两组组连连续续页页面面块块被被认认为为是是一一对对 伙伙伴伴 必必须须满满足足如下条件如下条件:(1)大小相同

5、,比如说都有b个页面(2)物理空间上连续(3)位于后面那个块的最后页面号必须是 2b的倍数 伙伴算法的优点伙伴算法的优点 分配页面时尽量动用小的连续页面,回收页面时则尽可能将空闲的伙伴合成大的连续页面伙伴系统的操作伙伴系统的操作申请空间的函数为_alloc_pages()释放函数为_free_pages_ok()当在申请内存发现页面短缺时还会唤醒kswapd内核线程运行,该线程会腾出一些空间以满足要求 三、slab分配器存在问题 伙伴系统是以页帧为基本分配单位,对于小对象容易造成是内部碎片解决办法 基于伙伴系统的slab分配器。slab分配器的基本思想:为经常使用的小对象建立缓冲,小对象的申请

6、与释放都通过slab 分配器来管理。slab 分配器再与伙伴系统打交道好处 其一是充分利用了空间,减小了内部碎片。其二是管理局部化,尽可能少地与伙伴系统打交道,从而提高了效率。slabslab分配器的构成分配器的构成为不同的常用对象生成不同的缓冲,每个缓冲存储相同类型的对象。某种对象的缓冲区由一连串的slab构成,每个slab又由一个或多个连续的物理页帧组成,包含了若干同种类型的对象。slab对象用结构slab_t来描述,某种特定对象建立的slab队列都有个队头kmem_cache_t系统有一个slab队列头的slab队列,其对象是其它对象的队头,其队头也是一个kmem_cache_t结构,叫

7、cache_cache。除了上面讨论的特定对象的缓冲外,Linux还提供了十三种通用的缓冲,其存储对象的单位大小分别为32字节,64字节,128字节,256字节,512字节,1KB,2KB,4KB,8KB,16KB,32KB,64KB和128KB。这些缓冲用来满足特定对象之外的普通内存需求。单位大小级数增长保证了内部碎片率不超过50%。slabslab分配器的相关操作分配器的相关操作:(1)(1)kmem_cache_create()kmem_cache_create()该函数创建一种特定对象的kem_cache_t结构,并加入cache_cache 所管理的队列。如下代码创建了inode_c

8、ache:kmem_cache_create(inode_cache,sizeof(structinode),0,SLAB_HWCACHE_ALIGN,init_once,NULL);kmem_cache_create()函 数 一 开 始 分 配 一 个kmem_cache_t结构,然后进行一系列运算,以确定最佳的slab 构成。包括:每个slab由几个页面组成,可包含几个对象;slab的控制结构应该在slab外面集中存放还是放在每个slab的尾部。(2)(2)kmem_cache_alloc()kmem_cache_alloc()与与kmem_cache_free()kmem_cache_

9、free()当需要分配一个拥有专用slab队列的对象时,应该通 过 kmem_cache_alloc()函 数,相 反 的 动 作 则 是 kmem_cache_free()函数。分配的对象来自slab缓冲,释放的对象归还slab缓冲,通过某种标识表明对象是可用还是已被占用。(3)kmem_cache_grow()(3)kmem_cache_grow()与与kmem_cache_reap()kmem_cache_reap()kmem_cache_create()函数只是建立了所需的专 用缓冲区队列的基础设施,所形成的slab队列是 个空队列。而具体slab的创建则要等需要分配缓冲区时,却 发现

10、队列中并无空闲的缓冲区可供分配时,再通 过kmem_cache_grow()向伙伴系统申请空间。kswapd会定时调用kmem_cache_reap()来“回收”缓冲区队列的页帧。(4)kmalloc()(4)kmalloc()函数与函数与kfree()kfree()函数函数 从通用的缓冲区队列中申请和释放空间。10.2.2 10.2.2 进程空间的管理进程空间的管理 每个进程都有自己独立的虚拟地址空间。虚拟内存以页为基本单位,大小等同于物 理页帧 每个进程空间通过进程的页目录、页表实 现与物理内存间的映射。进程通过按需分页得到物理内存 进程空间主要由mm_struct结构描述。该 结构包含了

11、进程空间的两个组成部分:进程的页目录以及指向vm_area_struct结 构的指针。一、一、页表机制页表机制以X86体系结构为例。i386系列既支持分段机制,也支持分页机制,Linux主要采用了分页机制,页面可以映射到任一物理页帧。i386下进程的线性地址为32位,分为以下三个部分:页目录段页目录段 置于高10位。记录在页目录中的索引。页表段页表段 占据中间的10位。记录在页表中的索引。偏移段偏移段 占据低12位。用来表示在4KB的页帧中 的偏移。进程空间线性地址转换成为物理地址的过程进程空间线性地址转换成为物理地址的过程 每个进程都有一个页目录,当进程运行时,寄存器CR3指向该页目录的基址

12、。(1)从CR3取得页目录的基地址。页目录用一个物理页帧存储,用来保存页表的基址。(2)以线性地址的页目录段为索引,在页目录中找到页表的基址。每一页表也是用一个物理页帧存储,用来保存物理页帧号。(3)以线性地址的页表段为索引,在页表中找相应的物理页帧号。(4)物理页帧号加上线性地址的偏移段即得到了对应的物理地址。物理页帧是4KB对齐的,页目录项和页表项都只需要20位保存物理地址的12-31位,还有12位可以用于控制或其它目的。几个重要的标志位是:存在位:表示项对应的物理页是否存在。读/写位:表示是只读还是可写,起保护作用。访问位:表明该页是否被访问过。脏标志位:表明该页是否被写过。采用两级分页

13、的好处是节省了存储空间。Linux采用的是三级页表模型,在页目录和页表之间还有页中间目录层。对于32位机器,页中间目录层实际不起作用。80X86处理器内部有称作TLB的专门缓冲用来加速地址转换过程二、二、进程空间的管理进程空间的管理1.vm_area_struct1.vm_area_struct结构结构对于32位机器,共有4G地址空间。其中前3G可以为进程直接访问,称为用户空间,而后1G空间为内核所用,称为内核空间。目前绝大多数程序都不会使用全部的3G空间。组成进程空间的映象由多个区间,Linux用一系列的vm_area_struct 结构描述不同的区间。进程页面必定属于某个vm_area_s

14、truct结构,但是属于vm_area_struct结构的页面不一定在页表中有数据项 task_structmm_structvm_area_struct进程虚空间03G页目录表pgt_t页表 页帧2.2.进程空间的相关系统调用进程空间的相关系统调用exec调用会抛弃原来的地址空间并根据可执行文件内容生成相应的新的地址空间。fork系统调用,通常情况下:(1)子进程会拷贝一份父进程的地址空间,包括父进程的vm_area_struct结构以及页目录、页表均会被拷贝(2)写时拷贝写时拷贝(COPY ON WRITE)(COPY ON WRITE)父进程页表项所标识的有效物理页帧并不会立即拷贝,而是

15、为子进程和父进程共享,即父进程和子进程的同一页表项指向同一个物理页帧,并且页表项的相应标志位均标记位“只读”,写入该页帧时就会引发页面异常进一步处理。好处是:(1)节省了开销,(2)懒惰策略,分散式复制的效果相比起一次性集中复制即时响应效果更好。系统调用brk()用来改变堆的大小,增大进程空间。exit()结束进程并销毁进程空间。mmap()创建文件的内存映象,扩展进程空间,而munmap()行为与之相反。shmat()创建一个共享内存区而shmdt()则释放共享内存区.三、页面异常的处理导致页面异常的原因有导致页面异常的原因有:(1)编程错误 可分为内核程序错误和用户 程序错误。(2)操作系

16、统故意引发的异常 操作系统合理利用硬件机制在适当时间触发异常,使得该异常的处理程序被调用以达到预期目的。如缺页页面异常的处理程序是do_page_fault()函数,该函数有两个参数一个是指针,指向异常发生时寄存器值存放的地址。另一个错误码,由三位二进制信息组成 第0位 访问的物理页帧是否存在 第1位 写错误还是读错误或执行错误 第2位 程序运行在核心态还是用户态do_page_fault()函数的执行过程如下:(1)首先得到导致异常发生的线性地址,对于X86该地址放在CR2寄存器中。(2)检查异常是否发生在中断或内核线程中,如是,则进行出错处理。(3)检查该线性地址属于进程的某个vm_are

17、a_struct区间。如果不属于任何一个区间,则需要进一步检查该地址是否属于栈的合理可扩展区间。一但是用户态产生异常的线性地址正好位于栈区间的vm_start前面的合理位置,则调用expand_stack()函数扩展该区间,通常是扩充一个页面,但此时还未分配物理页帧。至此,线性地址必属于某个区间。(4)根据错误码的值确定下一个步骤:如果错误码的值表示为写错误,则检查该区间是否允许写,不允许则进行出错处理。如果允许就是属于前面提到的写时拷贝。如果错误码的值表示为页面不存在,这就是所谓的按需分页(demand paging)。写时拷贝的处理过程写时拷贝的处理过程首先改写对应页表项的访问标志位表明其

18、刚被访问过,这样在页面调度时该页面就不会被优先考虑。如果该页帧目前只为一个进程单独使用,则只须把页表项置为可写。如果该页帧为多个进程共享,则申请一个新的物理页面并标记为可写,复制原来物理页面的内容,更改当前进程相应的页表项,同时原来的物理页帧的共享计数减一。按需分页的处理过程:第一种情况页面从未被进程访问,这种情况页表项的值全为0。(a)如果所属区间的vm_ops-nopage不为空,表示该区间映射到一个文件并且vm_ops-nopage指向实现页面装入的函数,此时调用该函数装入该页面。(b)如果vm_ops或vm_ops-nopage为空,则该调用do_anonymous_page()申请一个页帧;另一种情况是该页面被进程访问过,但是目前已被写到交换分区,页表项的存在标志位为0,但其它位被用来记录该页面在交换分区中的信息。调用do_swap_page()函数从交换分区调入该页面

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 通信科技 > 操作系统相关

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服