课后习题---存储器管理

Part A
为什么要配置层次式存储器?

几乎每一条指令都会涉及对存储器的访问,因此要求对存储器的访问速度上能跟得上处理机的运行速度

可采用哪几种方式将程序装入内存?他们分别适用于何种场景?

绝对装入方式:当计算机系统很小,且仅能运行单道程序时【只能装入事先指定的位置】
可重定向装入方式:适用于多道程序,根据内存的具体情况装入模块装入到内存的适当位置【不允许程序运行时在内存中移动】
动态运行时的装入方式:适用于程序在内存中的移动

何谓静态链接?静态链接时需要解决两个什么问题?

静态链接:先将各目标模块及他们所需的库函数链接成一个完整的装配的模块,以后不再拆开
需要解决:1.对相对地址进行修改;2.变换外部调用符号

何谓装入时动态链接?装入时动态链接的优点?

装入时动态链接:将用户源程序编译后所得到的一组目标模块,装入内存,当需要的时候,动态调入内存
优点:便于修改和更新;便于实现对目标模块的共享

何谓运行时动态链接?运行时动态链接方式有何优点?

运行时动态链接:将对某些模块的链接推迟到程序执行时才进行
优点:在执行过程中未被用到的目标模块,都不会被调入内存和被链接到装入模块上

在动态分区分配方式中,应如何将各空闲分区链接成空闲分区链?

在每个分区的起始部分设置一些用于控制分区分配的信息,以及用于链接各分区所用的前向指针,在分区尾部则设置一后向指针

为什么要引入动态重定位?如何实现?

因为在进行“紧凑”,就要对移动了的程序或数据的地址进行修改,而且还大大地影响到系统的效率

什么是基于顺序搜索的动态分区分配算法?它可分为哪几种?

依次搜索空闲分区链上的空闲分区,去寻找一个其大小能满足要求的分区
首次适应算法,循环首次适应算法,最佳适应算法,最坏适应算法

在采用首次适应算法回收内存时,可能出现哪几种情况?应该怎么解决?

低地址部分不断被划分,留下了许多难以利用的,很小的空闲分区
每次查找都是从低地址部分开始的,这增加了查找可用空闲分区的开销

什么是基于索引搜索的动态分区分配算法?它可以分为哪几种?

当系统很大时,系统中的内存分区可能会有很多,相应的空闲分区链也就可能很长,为了提高搜索空闲分区的速度,利用索引的方式来进行划分
快速适应算法,伙伴系统,哈希算法

令buddyk(x)为大小为2的k次方,地址为x的块的伙伴系统地址,试着写出buddyk(x)的通用表达式

buddyk(x)=x + 2的k次方(x mod 2的k+1次方 = 0)
buddyk(x)=x - 2的k次方(x mod 2的k+1次方 = 2的k次方)

分区存储管理中常用哪些分配策略?比较他们的优缺点

单一连续分配:将内存划分为系统区和用户区,系统开销大,资源利用不充分
固定分区分配:依据分区大小来划分,可等大小,也可不等大小,会造成一定程度的资源浪费
动态分区分配:依据进程的实际需求来分配

为什么要引入对换?对换可分为哪几种类型?

为了解决作业因内存空间不足而一直驻留在外存,导致系统吞吐量下降
对换:将内存中暂时不能运行的进程或者暂时不用的进程和数据换出到外存上
整体对换,页面(分段)对换

对文件区管理的目标和对对换空间管理的目标有何不同?

对文件区管理:采用离散分配的方式,因为文件通常是长时间驻留在外存上
对对换空间管理:采用连续分配的方式,因为对换区中驻留的时间是短暂的,而对换操作的频率较高

为实现对换,系统应具备哪些方面的功能?

在系统中配置相应的数据结构:用于记录外存对换区中的空闲盘块的使用情况
对换区的首地址及其大小,分别用盘块号和盘块数表示

在以进程为单位进行对换时,每次是否都将整个进程换出?为什么?

不一定,进程换出时,只能换出非共享的程序和数据段,而对于那些共享的,只要还有进程需要他,就不能被换出

基于离散分配时所用的基本单位不同,可将离散分配分为哪几种?

分页存储管理方式,分段存储管理方式,段页式存储管理方式

什么是页?什么是物理块?什么是页面大小?

页:将进程的逻辑地址空间分成若干个页
物理块:相应也把没内存的物理地址空间分成若干个块
页面大小:页面太小,会造成页表过长;页面太大,会增加内部碎片

什么是页表?页表的作用是什么?

页表项:存放页号和偏移量
页表:在内存中找到每个页面所对应的物理块(页面映像表)

为了实现分页存储管理,需要哪些硬件支持?

页表寄存器#存放页表在内存的始地址和页表长度
联想寄存器#苦逼表

在分页系统中,如何实现地址变换?

逻辑地址中的页号根据页面映射表,来定位胆物理块号,进而进行转换

具有快表时如何实现地址变换?

先在快表中进行查找,看是否有缓存逻辑地址中的页号
有则直接匹配获得物理块号
否则在页表中进行查找,找到后并将物理块号存储到快表中

详细描述说明引入分段存储管理是为了满足用户哪些方面的需求?

方便编程,信息共享,信息保护,动态增长,动态链接

在具有快表的段页式存储管理方式中,如何实现地址变换?

以段号为索引,去检索段表,从中得到该段的基地址和长度,将基址和段内地址相加得到物理地址

分页和分段存储管理有何区别?

页 # 信息的物理单位,分页是为了提高内存的利用率;段 # 信息的逻辑单位,能更好的满足用户需求
页的大小是固定的且由系统决定;段的长度不固定,且由用户所编写的程序决定
分页的地址空间是一维;分段的地址空间是二维

试全面比较连续分配和离散分配?

连续分配:大批量数据的存储速度【较快】,机制的复杂性【较简单】,内存的碎片【较大】,实现虚拟技术【较难】,实现动态链接【较难】
离散分配:大批量数据的存储速度【较慢】,机制的复杂性【较复杂】,内存的碎片【较小】,实现虚拟技术【较易】,实现动态链接【较易】

Part B

  • 下列正确的是

     即使在多道程序设计的环境下,用户也能设计出用物理地址直接访问内存的程序【错的】
     内存分配最基本的任务是为每道程序分配内存空间,其所追求的主要目标是提高存储空间的利用率【对的】
     为了提高内存保护的灵活性,内存保护通常由软件实现【错,还需要硬件的】
     交换技术已不是现代操作系统中常用的技术【错,交换技术依旧使用中】
     地址映射是指将程序空间中的逻辑地址变为内存空间的物理地址【对】
     虚拟存储器是物理上扩充内存容量【错】
    
  • 使每道程序能在不受干扰的环境下运行,主要是通过【内存保护】功能实现的;使分配到与其地址空间不一致的内存空间的程序,依旧正常运行则主要是通过【地址映射】功能实现

  • 静态重定位是在作业的【装入过程】中进行的,动态重定位是在作业【执行过程】中进行的

  • 在进程的地址空间中,有一条将第1000单元中的数据装入寄存器R1的指令“LOAD R1, 1000”,采用静态重定位技术时,装入内存后,该指令的第二个操作系统【修改为1000和装入该进程的内存启始地址之和】;采用动态重定位技术时,则【任然为1000】

  • 静态链接是在【装入程序之前】进行的;而动态链接是在【装入某段程序时】或【调用某段程序时】进行的,其中在【调用某段程序时】进行链接,可提高内存利用率;适用于动态链接的存储方式是【分段存储管理】

  • 要保证进程在主存中被改变了位置后依然能正常执行,则对主存空间应当采用【动态重定位】

  • 由连续分配方式发展为分页存储管理方式的主要推动力是【提高内存利用率】;由分页系统发展为分段系统,进而又发展为段页式系统的主要动力是【满足用户需要】和【既满足用户要求,又提高内存利用率】

  • 在动态分区式内存管理中,倾向于优先使用低地址部分空闲区的算法是【首次适应算法】;能使内存空间中空闲分区分布得较均匀的算法是【循环首次适应算法】;每次分配时,把既满足要求,又是最小的空闲区分配给进程的算法时【最佳适应算法】

  • 在首次适应算法中农,要求空闲分区按【空闲区起始地址递增】的顺序形成空闲分区链;在最佳适应算法中是按【空闲区大小递增】的顺序形成空闲分区链;最坏适应算法时按【空闲区大小递减】的顺序形成空闲分区链

  • 在动态分区式内存管理中,若某一时刻,系统内存的分配情况如:0-60已分配,110-200已分配,230-270已分配,295-390已分配,520-640已分配。当一进城要申请20k内存空间时,首次适应算法选中的起始地址为【60k】的空闲分区,最佳适应算法选中的是起始地址为【270k】的空闲分区,最坏适应算法选中的是起始地址为【390k】的空闲空间

  • 采用动态分区存储管理系统中,主存总容量为55MB,初始状态全空,采用最佳适应算法,内存的分配和回收顺序为:分配15MB,分配30MB,回收15MB,分配8MB,分配6MB,此时主存中最大的空闲分区大小是【9MB】;若采用的是首次适应算法,则应该是【10MB】

  • 在伙伴系统中,一对空闲分区为伙伴是指【两个大小均为2kB的相邻空闲分区,且前一个分区的起始地址是2k+1B的倍数】

  • 在回收内存时可能出现下述四种情况:

     1.释放区与插入点前一分区F1相邻接,此时应【以F1分区的表项作为新表项,但修改新表项的大小】;
     2.释放区与插入点后一个分区F2相邻接,此时应【以F2分区的表项作为新表项,同时修改新表项的大小和起始】;
     3.释放区不与F1和F2相邻接,此时应【为回收区建立一分区表项,填上分区的大小和起始地址】;
     4.释放区既与F1相邻接,又与F2相邻接,此时应【以F1分区的表项作为新表项,但修改新表项的大小且还要删除F2所对应的表项】
    
  • 对重定位存储管理方式,应【在整个系统中设置一个重定位寄存器】,当程序执行时,是由【有效地址】与【在整个系统中设置一个重定位寄存器】中的【起始地址】相加得到【物理地址】,用【物理地址】来访问内存

  • 对外存对换区的管理应以【提高换入换出的速度】为主要目标,对外存文件区的管理应以【提高存储空间的利用率】

  • 分页系统中,主存分配系统的单位是【物理块】,而地址转换工作是由【硬件】完成的

  • 在页式存储管理中,其虚拟地址空间是【一维】的,在段式存储管理中,其虚拟地址空间是【二维】的,在段页式存储管理中,其虚拟地址空间是【三维】的

  • 在没有快表的情况下,分页系统每访问一次数据,要访问【2】次内存,分段系统每访问一次数据,要访问【2】次内存,段页式系统每访问一次数据,要访问【3】次内存

  • 在段页式存储管理中,用于地址映射的映射表是【每个进程一张段表,每个段一张页表】

  • 通常情况下,在下列存储管理方式中,【固定分区】支持多道程序设计,管理最简单,但存储碎片多,【页式】使内存碎片尽可能少,而且使内存利用率最高

  • 下述存储管理方式中,会产生内部碎片的是【页式和段页式】,会产生外部碎片的是【动态分区方式和段式】

Part C

  • 使每一道程序能在内存中“各得其所”是通过【内存分配】功能实现的;保证每道程序在不受干扰的环境下运行,是通过【内存保护】功能实现的;为了缓和内存紧张的情况而将内存中暂时不能运行的进程调至外存,是【对换】功能实现的;能让较大的用户程序在较小的内存空间中运行,是通过【虚拟】功能实现的
  • 程序装入方式有【绝对装入方式】,【可重定位装入方式】,【运行时动态装入方式】三种方式
  • 程序的链接方式有【装入时动态链接】,【静态链接】,【运行时动态链接】三种方式
  • 把作业装入内存中随即进行地址变换的方式称为【静态重定位】;而在作业执行期间,当访问到指令和数据时,才进行地址变换的方式称为【动态重定位】
  • 地址变换机构的基本任务是将【地址空间】中的【逻辑地址】变换为【内存空间】中的【物理地址】
  • 通常,用户程序使用【逻辑】地址,处理机执行程序时则必须用【物理】地址
  • 在首次适应算法中,空闲分区以【地址递增】的次序拉链;在最佳适应算法中,空闲分区以【空闲分区大小递增】的次序拉链
  • 在连续分配方式中可以通过【紧凑】来减少内存零头,它必须得到【动态重定位】技术的支持
  • 在伙伴系统中,利用buddyk(x)表示大小为2的k次方,起始地址为x的块的伙伴的地址,则buddyk(x)的通用表达式【buddyk(x) = x + 2k- [(x / 2k%2)] * 2k+1
  • 实现进程对换应具备【对换空间的管理】,【进程换入】和【进程换出】三方面的功能
  • 分页系统中若页面较小,虽有利于【减少块内碎片】,但会引发【页表太长】;而页面较大,虽然可以减少【页表长度】,但会引起【块内碎片增大】
  • 分页系统中,页表的作用是实现【页号】和【物理块号】的转换
  • 在分页系统中为实现地址变换而设置了页表寄存器,其中存放了处于【执行】状态进程的【页表长度】和【页表起始地址】;而其他进程的上述信息则被保存在【他们的PCB】中
  • 引入分段主要是满足用户需要,具体包括【方便编程】,【分段共享】,【分段保护】,【动态链接】等方面
  • 在页表中最基本的数据项是【物理块号】,而在段表中则是【段的内存基址】和【段长】
  • 把逻辑地址分成页号和页内地址是由【机器硬件】进行的,故分页系统的作业地址空间是【一】维的;把逻辑地址分成段号和段内地址是由【程序员】进行的,故分段系统的作业地址空间是【二】维的
  • 在段页式系统中,为了获得一条指令或数据,都需要三次访存。第一次从内存中取得【页表的起始地址】;第二次从内存中取得【块号】;第三次从内存中取得【指令或数据】
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值