没有合适的资源?快使用搜索试试~ 我知道了~
存储器管理存储器管理.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 166 浏览量
2022-07-06
04:22:19
上传
评论
收藏 251KB DOC 举报
温馨提示
试读
29页
存储器管理存储器管理
资源推荐
资源详情
资源评论
83
第 5 章 存储器管理
5.2 例题解析
例 5.2.1 为什么要引入逻辑地址?
解 引入逻辑地址有如下原因:
(1) 物理地址的程序只有装入程序所规定的内存空间上才能正确执行,
如果程序所规定内存空间不空闲或不存在,程序都无法执行;
(2) 使用物理地址编程意味着由程序员分配内存空间,这在多道程序
系统中,势必造成程序所占内存空间的相互冲突;
(3) 在多道程序系统中,程序员门无法事先协商每个程序所应占的内
存空间的位置,系统也无法保证程序执行时,它所需的内存空间都空闲。
(4) 基于上述原因,必须引入一个统一的、在编程时使用的地址,它
能够在程序执行时根据所分配的内存空间将其转换为对应的物理地址,这
个地址就是逻辑地址。
(5) 逻辑地址的引入为内存的共享、保护和扩充提供方便。
例 5.2.2 静态重定位的特点有哪些?
(1) 实现容易,无需增加硬件地址变换机构;
(2) 一般要求为每个程序分配一个连续的存储区;
(3) 在重定位过程中,装入内存的代码发生了改变;
(4) 在程序执行期间不在发生地址的变换;
(5) 在程序执行期间不能移动,且难以做到程序和数据的共享,其内存
利用率低。
例 5.2.3 动态重定位的特点有哪些?
(1) 动态重定位的实现要依靠硬件地址变换机构,且存储管理的软件算
法比较复杂;
(2) 程序代码是按原样装入内存的,在重定位的过程中也不发生变化,
重定位产生的物理地址存放在内存地址寄存器中,因此不会改变代码;
(3) 同一代码中的同一逻辑地址,每执行一次都需要重位一次;
(4) 只要改变基地址,就可以很容易地实现代码在内存中的移动;
(5) 动态重定位可以将程序分配到不连续的存储区中;
(6) 实现虚拟存储器需要动态重定位技术的支持;
84
尽管动态重定位需要硬件支持,但他支持程序浮动,便于利用零散的内
存空间,利于实现信息共享和虚拟存储,所以现代计算机大都采用动态重定
位。
例 5.2.4 装入时动态链接的优点有哪些?
(1)便于软件版本的修改和更新
在采用装入时动态链接方式时,要修改或更新各个目标模块,是件非常
容易的事,但对于经静态链接以装配在一起的装入模块,如果要修改或更新
其中的某个目标模块时,则要求重新打开装入模块,这不仅是低效的,而且
对于普通用户是不可能的。
(2)便于实现目标模块共享
若采用装入时动态链接方式,OS 能够将一个目标模块链接到几个应用
程序中去。即实现多个应用程序对该模块的共享;然而,采用静态链接方式
时每个应用模块都必须含有该目标模块的拷贝,则无法实现共享。
例 5.2.5 覆盖技术与虚拟存储技术有何本质不同?交换技术与虚存中
使用的调入调出技术有何相同和不同之处?
解 覆盖技术与虚拟存储技术的本质不同是:
(1) 虚拟存储器对于程序员时透明的,不需要程序员了解程序结构、
覆盖的区域、时机,不需要精心的设计程序及其数据结构,所有的操作由
操作系统自动完成。
(2) 覆盖的程序段的最大长度要受到物理内存容量的限制,而虚拟存
储器的最大长度不受物理内存容量的限制,只受计算机地址结构的限制。
交换技术与虚存中使用的调入调出技术相同和不同之处:
(1) 主要相同点是都要在内存与外存之间交换信息;
(2) 主要区别在于交换技术换出换进一般是整个进程(proc 结构和共
享正文段除外),因此一个进程的大小受物理存储器的限制;而虚存中使用
的调入调出技术在内存与外存之间来回传递的是存储页或存储段,而不是
整个进程,从而使得进程映射具有了更大的灵活性,且允许进程的大小比
可用的物理存储空间大的多。
例 5.2.7 有一计算机系统,内存容量为 512K,辅存容量为 2G,逻辑
地址形式如下:
段号
段内地址
29 20 19 0
求其虚拟存储器的实际容量?
解 虚拟内存的实际大小由系统的逻辑地址结构、主存辅存容量共同决
定。虚拟内存容量的理论值是 2
10
*2
20
=1G;最大段内地址为 2
20
=1M,远大
85
于内存容量,其段长超过 512K 的内存容量,故最大实际段长为 512k 而不
是 1M。
所以可计算虚拟存储容量为 2
10
*512K =2
10
*0.5M=0.5G。 0.5G<2G,因
此虚拟存储器的实际容量是 0.5G。
例 5.2.8 段页式存储系统中,为了获得一条指令或数据,需几次访问内
存?
解 在段页式系统中,为了获得一条指令或数据,需三次访问内存。第
一次访问,是访问内存中的段表,从中取得页表始址;第二次访问,是访问
内存中的页表,从中取出逻辑页面对应的内存物理块号,并将该块号与页内
地址一起形成指令或数据的物理地址;第三次访问,才是真正从第二次访问
所得的地址中,取出指令或数据。
例 5.2.9 在实存管理上,管理方法主要分成哪两种类型?
解 实存管理的方法主要分成:
(1) 用户程序需要占用连续的内存空间,如分区存储管理;
(2) 用户程序不需要占用连续的内存空间,如分页、分段、段页等管理,
一个用户程序在内存可能是不连续的,如果它有不只一页或一段的话。
例 5.2.10 解释静态链接、装入时动态链接和执行时动态链接的不同。
解 “链接”(link),本应是编译系统的任务,但是,随着程序执行方式
的改进,当出现了“动态链接”之后,“程序链接”就不仅仅是编译系统的
事情,它还需要 OS 的支持。
程序的静态链接,指的是在程序装入内存之前,由链接程序将已编译好
的多个目标模块(.obj 文件)链成一个统一的可执行文件。其特点是:①链
接好的可执行文件可以重复使用和执行;②被链接的模块一般不可能再拆开,
因而不便修改和更新;③不便于多个程序共享某些模块,需使用同一模块的
多个程序需分别将该模块链入自己的程序空间。
装入时动态链接,指的是在程序加载入内存(准备执行)时,由 OS 中
的装入程序(如 exec())将存放在盘上的诸多目标模块边装入边在内存链接
成一个统一的可执行程序。其特点是:①链接好的可执行程序只存在于内存,
因而每次执行都要重新链接;②被链接的诸目标模块在盘上是各自独立存放
的,因而便于修改;③便于共享,当多个程序需使用同一模块时,该模块在
内存只需一个副本。
执行时动态链接,是把程序的链接推迟到程序执行时根据执行的需要动
态地装入和链接。它除了有与“装入时动态链接”相同的特点外,还有一个
显著的特点,是不会将本次执行中不需要的模块(如错误处理模块)装入内
存,从而减少时空开销。当然,它也增加了链接的复杂性,且需要一定的硬
件支持。动态链接需要 OS 的支持和服务。
86
例 5.2.11 说明静态重定位和动态重定位的区别。
解 “重定位”,在实际上指的是这样相互联系的两件事情:一是确定一
个待执行程序在内存中的位置;二是将程序中的逻辑地址转换成物理地址。
说它们是相互联系的,是因为后一件事情是由前一件事情决定的。
静态重定位,指的是在程序装入时实现的重定位。具体的讲,就是将程
序装入内存后,立即根据其装入位置将程序中需重定位的逻辑地址转换成物
理地址,包括指令地址、数据地址、子程序入口地址等。这种“定位”的特
点是“定位”之后,内存中的代码发生了变化,程序不能在内存移动,CPU
按物理地址运行程序。
动态重定位,是在程序执行的过程中,根据执行的需要动态地装入、链
接和定位。它不是根据程序在内存的位置立即将指令和数据的逻辑地址转换
成物理地址,而是把这种位置信息送入一个称之为“地址映射机构”的硬件
中,然后,CPU 按逻辑地址执行程序。在执行中,由“映射机构”将逻辑
地址及时地转换成正确的访存物理地址。这种定位方法的主要特点是重定位
后,内存中的代码没有发生了变化,允许程序在执行的过程中在内存移动位
置,这只要更换“映射机构”中的启址信息就可将同一程序映射到内存不同
的地方。这种位置移动对提高内存空间的利用率是有好处的。
例 5.2.12 存储空间分配的“边界要求”是什么意思?为什么有的系统
有这种要求?
解 空间分配的“边界要求”,指的是要求所分得的空间的起始地址落在
所分得空间的大小的整数倍上。例如,若要求分一个 4K 大的空间,则实际
分得的空间的起始地址应是 0,4K,8K,12K,…;有的系统之所以有这种
要求,主要是为了便于机器的判断和管理。例如,在分页存储管理系统内,
每一个页面在内存的起始地址都应是页面大小的整数倍,这样才能正确地将
一个地址划分成页号和页内位移量两部分,并正确地实现分页管理下的地址
映射;又如,若为一个数组分配空间,则所分空间的起始地址也应落在数组
元素个数(假定一个元素需要偶数个字节)的整数倍上,这样就可以根据当
前地址算出当前处理的是第几个元素,并且,当数组中的所有元素都处理一
遍后,此时地址的低部分会与数组起始地址的低部分相同,这样,机器就很
容易判断该数组已处理完一遍。
例 5.2.13 为什么在分页和分段管理下取一条指令或一个操作数通常需
两次访存?如何解决这一问题?
解 这是因为用于地址变换的页表或段表也是存放在内存的,为了将
CPU 给出的逻辑地址变成物理地址,首先就要访问内存的页表和段表,然
后,根据形成的物理地址再取指令或数据,这就要两次访存。解决这一问题
87
的办法是提供一个称之为“快表”的硬件,用以存放当前运行进程的页表或
段表的部分内容,“快表”的访问时间很快,因此可以节约访问页表和段表
的时间。 存储器访问具有时间和空间的“局部性”,因此快表的命中率一般
可达 70%到 90%;页表和段表是在系统执行过程中,每时每刻都需要访问
的,因此,访问时间的微小缩短,其累计节约的时间却可以达到很大。
例 5.2.14 在分页存储管理系统中,存取一次内存的时间是 8us,查询一次
快表的时间是 1us,缺页中断的时间是 20us,假设页表的查询与快表的查询
同时进行 。当查询页表时,如果该页在内存但快表中没有页表项,系统将
自动把该页页表项送入快表。
(1) 求对某一数据进行一次次存取可能需要的时间?
(2) 现连续对同一页面上的数据进行 4 次连续读取,求每次读
取数据可能需要的时间?
解
(1) 当系统对数据进行存取时,有 3 种可能性。
① 所存取的数据的页面在内存,其页表项已经存储到快表,此时
存取数据的时间是:
查询快表的时间+存取内存数据的时间=1us+8us= 9us
② 所存取的数据的页面在内存,但是其页表项没有存储到快表,
没有命中快表,此时存取数据的时间是:
查询页表的时间+存取内存数据的时间=8us+8us= 16us
③ 所存取的数据的页面不在内存,发生缺页中断,此时存取数据
的时间是:
查询页表的时间+缺页中断的时间+查询页表的时间+
存取内存数据的时间=8us+20us+8us+8us = 44us
(2) 当对某一数据进行 4 次连续读取时:
① 第 1 次可能的时间为:
1us+8us= 9us;8us+8us= 16us;8us+20us+8us+8us。
② 第 2 次时,对应页面的页表项已经交换到快表中。因为存取是连
续的,不存在页面被淘汰的可能性,所以第 2 次、第 3 次、第 4 次的存取时
间是一样的,消耗的时间为 1us+8us= 9us。
例 5.2.15 为什么说分段系统较之分页系统更易于实现信息共享和保
护?如何实现。
解
(1) 在分页和分段存储管理系统中,多个进程并发运行,共享同一内存
块里的程序或数据是可行的。为了实现共享,必须在各共享者的段表或页表
中分别有指向共享内存块的表目。
剩余28页未读,继续阅读
资源评论
oligaga
- 粉丝: 50
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功