- 1、本文档共72页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 存储管理 4.1 概述 4.2 连续存储管理 4.3 分页式存储管理 4.4 分段式存储管理 4.5 虚拟存储 学习目标 虚拟设备 多个进程和线程可以共享一个CPU 多个进程和线程应该可以共享一个存储器 多个进程和线程还可以共享一个IO设备(第5章) 如何共享一个存储器? 各进程/线程自己的数据有自己的执行区域,程序变成进程时是如何映射到那个区域去的? 对各进程/线程在内存中的数据要加以保护,如何实施? 为了更好地利用CPU,就应该让更多的进程/线程并发执行,如果内存不够用了怎么办? 虚拟存储器 源代码的伪中间代码 int demo(){ int a = 0; while(a2){ a++; } return 0; } 代码执行时,这些行号需要改变吗? 0 demo: 1 int a = 0 2 loop: 3 temp = a – 2 4 if (temp0) goto done 5 a++ 6 goto loop 7 done: 8 return 0 存储地址及地址转换 存储器使用的地址叫物理地址(绝对地址),其空间是由存储器地址总线扫描出来的空间,其大小取决于实际安装的主存容量。 目标程序地址叫逻辑地址(相对地址),被限制从0开始编址,一个用户程序的逻辑地址集合称为该程序的逻辑地址空间。 地址转换(重定位、地址映射):将程序的逻辑地址转成物理地址的过程。 静态转换 动态转换 程序执行步骤(地址转换时机) 执行步骤: 编译 链接/装载 执行 静态地址转换 静态转换:当用户程序被装入内存时,一次性实现逻辑地址到物理地址的转换,以后不再转换。一般在装入内存时由软件完成。若编译时完成则需要程序员事先知道要装载的地址。 动态地址转换 动态转换:在程序执行过程中要访问数据时再进行地址变换,需要额外的硬件来记录程序装载的内存基址。 存储保护 使在内存中的各道进程,只能访问它自己的区域,避免进程内存空间重叠,特别是不能访问OS的内存空间。 通常需要两个硬件支持(不需要转换地址): 基址寄存器(Base Register):存放装载的起始地址 限长寄存器(Limit Register):存放的最大逻辑地址 看管好用户进程 策略: 将用户进程关在一个内存区域 它不能自己切换到内核模式 它不可以直接改变基址和限长寄存器的值 它不可以随意更改中断控制 它不可以访问其它进程的内存空间数据 两个问题 内存中的进程如何交互? 内核模式和用户模式如何切换? 连续存储管理 所谓连续,是指进程在主存里占用一块连续的空间。 如果系统事先把内存用户区划分为若干分区,分区大小可以相等,也可以不等,一个进程占据一个分区。我们称其为固定分区存储管理。 若内存不预先划分好,而是等进程装入时,根据进程的需求和内存空间的使用情况来决定是否分配。我们称其为可变分区存储管理。 固定分区存储管理 存储分配:系统维护一张主存分配表,里面记载了内存的分区划分和使用状态。分配主存时总选择那些分区占用标志为0且长度小于等于进程所需空间的分区块。回收只要相应分区占用位置0即可。 固定分区的地址转换和存储保护 静态转换:装入时检查绝对地址是否落在分区内 动态转换:执行时检查,如下图所示。 可变分区存储管理 存储分配: 系统维护两张表,一张记录尚未分配的内存状态,另一张记录已分配的情况。 初始状态已分配表为空,未分配表仅有一条记录,整个用户区就是空闲区。系统总是从空闲中选择一个足够容纳进程的分区分配,并将分配情况记在已分配表中,剩余的分区空间记录进未分配表。 回收:将已分配表的标志改为“空”,再将其加入未分配表中。 某一时刻的分配状态 可变分区分配算法 首次适应 分配第一个足够大的分区,可以从头开始查找,也可以从上次分配结束的地点开始查找 最优适应 查找整个分区表,分配最小的足够大的分区 总是产生最小剩余分区,不浪费一个更大的空间,但会导致剩余分区太小难被再利用 最坏适应 查找整个分区表,分配最大的足够大的分区 总是产生最大剩余分区,它可能比最优适应产生的剩余分区更容易利用 可变分区的地址转换和存储保护 紧凑技术 “碎片”问题 经过一段时间的分配回收后,内存中存在很多很小的空闲块。它们每一个都很小,不足以满足分配要求;但其总和满足分配要求。这些空闲块被称为碎片,造成存储资源的浪费。 解决方法(紧凑) 通过在内存移动程序,将所有小的空闲区域合并为大的空闲区域。 使用静态地址转换的不可以使用紧凑。 如果采用紧凑技术前要评估开销。 紧凑技术的实现过程 复习:固定分区和可变分区 碎片 内部碎片 外部碎片 都是“连续”惹得祸 如何将逻辑地址空间分割 最自然的分割方法就是按段划分,通常一个进程都包含几个基本段。 这些段可以在内存中分散存储,为了能找到它们,每个段都设
文档评论(0)