第三章数据存储与管理.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第三章数据存储与管理

第3章;如何对存储器加以有效的管理,不仅直接影响到存储器的利用率,而且还对系统性能有重大影响。存储器管理的主要对象是内存。 ;3.1.1 存储系统的结构;如何将一个用户源程序变成一个可在内存中执行的程序,通常要经过3步骤: 编译:由编译程序(Compiler)将用户源代码编译成若个目标模块 (Object Module)。 链接:由链接程序(Linker)将编译后形成的一组目标模块,以及它们所需要的库函数链接在一起,形成一个完整的装入模块 。 装入:由装入程序(Loader)将装入模块装入内存。 ;编辑―――编译―――链接―――装入―――运行 ;三种装入方式:绝对装入方式、可重定位装入方式 、运行重定位方式。 1、绝对装入: 编译后,装入前已产生了绝对地址(内存地址),装入时不再作地址重定位。 绝对地址的产生:(1)由编译器完成,(2)由程序员编程完成。 对(1)而言,编程用符号地址。 程序每次必须装入同一内存区;程序员必须事先了解内存的使用情况,根据内存情况确定程序的逻辑地址;程序的修改将引起整个程序中指令地址的变动;程序所有的存储引用(函数调用),在装入之前都必须转换为物理地址,这不利于存储共享。;2、可重定位装入方式 目标模块的起始地址通常是从0开始的,程序中的其它地址也都是相对于起始地址计算的。 由装入程序将装入模块装入内存后,装入模块中程序所访问的所有逻辑地址与实际装入内存的物理地址不同 ,必须进行地址映射,将逻辑地址转换为物理地址。 静态重定位技术:地址映射在程序装入时进行,以后不再更改程序地址。;;3.运行时重定位 在程序运行时动态进行程序的地址转换。 硬件的支持,即重定位寄存器,用于保存程序的在内存中的起始地址。 能保证进程的可移动性,有效的提高内存的使用效率。 运行时重定位有利于多道程序环境下,进程的换进/换出及实现紧凑技术。 ;;2. 程序的链接;模块A if x1 CALL B; else CALL C; RETURN;3.2 存储管理 ;3.2.1 单一连续分配;3.2.2 分区管理——固定分区方式;分区号;3.2.2 分区管理——动态分区方式;系统区;分区号;二、分区分配 1.首次适应算法FF。 每次???从头开始,寻找第一个满足需求的空闲分区。 特点:找到第一个大小满足的分区,划分。有碎片(外零头),低址内存使用频繁。 2.循环首次适应算法。 与1类似,从上次找到的空闲分区的下一个开始查找。 特点:空闲分区分布均匀,提高了查找速度;缺乏大的空闲分区。 3.最佳适应算法 分区按大小递增排序;分区释放时需插入到适当位置。 特点:产生无法利用的小碎片。;;;3.2.2 分区管理——紧凑与动态重定位;紧凑;2、动态重定位的实现;图 动态分区分配算法;  固定分区和动态分区方式都有不足之处。固定分区方式限制了活动进程的数目,当进程大小与空闲分区大小不匹配时,内存空间利用率很低。动态分区方式算法复杂,回收空闲分区时需要进行分区合并等,系统开销较大。伙伴系统方式是对以上两种内存方式的一种折衷方案。   伙伴系统规定,无论已分配分区或空闲分区,其大小均为2的k次幂,k为整数,l≤k≤m,其中:21表示分配的最小分区的大小,2m表示分配的最大分区的大小,通常2m是整个可分配内存的大小。;  当需要为进程分配一个长度为n的存储空间时,首先计算一个i值,使2i-1n≤2i,然后在空闲分区大小为2i的空闲分区链表中查找。若找到,即把该空闲分区分配给进程。否则,表明长度为2i的空闲分区已经耗尽,则在分区大小为2i+1的空闲分区链表中寻找。若存在2i+1的一个空闲分区,则把该空闲分区分为相等的两个分区,这两个分区称为一对伙伴,其中的一个分区用于分配,而把另一个加入分区大小为2i的空闲分区链表中。若大小为2i+1的空闲分区也不存在,则需要查找大小为2i+2的空闲分区,若找到则对其进行两次分割:第一次,将其分割为大小为2i+1的两个分区,一个用于分配,一个加入到大小为2i+1的空闲分区链表中;第二次,将第一次用于分配的空闲区分割为2i的两个分区,一个用于分配,一个加入到大小为2i的空闲分区链表中。若仍然找不到,则继续查找大小为2i+3的空闲分区,以此类推。由此可见,在最坏的情况下,可能需要对2k的空闲分区进行k次分割才能得到所需分区。 ; 与一次分配可能要进行多次分割一样,一次回收也可能要进行多次合并,如回收大小为2i的空闲分区时,若事先已存在2i的空闲分区时,则应将其与伙伴分区合并为大小为 2i+1的空闲分区,若事先已存在2i+1的空闲分区时,又应继续与其伙伴分区合并为大小为2i+2的空闲分区,依此类推。   在伙伴系统中,其分配和回收的时间性能取决于查找空闲分区的位置和分割、合并空闲分区所花费的时间。与前面所

文档评论(0)

sheppha + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:5134022301000003

1亿VIP精品文档

相关文档