1、为什么要配置层次式存储器?

使读取速度、存储容量、价格三个条件相互平衡

2、可采用哪几种方式将程序装入内存?它们分别适用于何种场合?

1、绝对装入

程序的相对地址实际物理地址相同

适合于“单道程序”,要求程序员熟悉内存使用情况

2、可重定位装入

  • 程序装入到内存后,立即把所有的逻辑地址转换成实际地址
  • 实际物理地址由程序的相对地址加偏移量构成,而偏移量是根据内存使用情况动态变化

适合于“多道程序”,程序员不用考虑实际内存情况

3、动态运行时装入

把程序装入到内存后,不立即修改对应的逻辑地址,而是在程序真正执行时才转换成实际地址

3、什么是静态链接?静态链接时需要解决两个什么问题?

静态链接,指在程序运行前,将各种目标模块需要的库函数链接成一个完整的装配模块

要解决的两个问题:

1、修改相对地址:

不同模块的相对首地址都是0,链接到一个完整的模块后,需要指定唯一首地址

如:有三个模块A、B、C,长度分别为L、M和N;链接成一个完整模块后,B、C的首地址就不是0

  • A首地址为0,A末尾地址为L-1;
  • B首地址为L,B末尾地址为L+M-1
  • C首地址为L+M,C末尾地址为L+M+N-1

2、更换外部调用符号:

如:A模块内部调用了B模块,语句为“call B;”,但链接到一个完整模块后,需要修改成B所在的相对地址

  • A调用B,从call B变为jsr L   (L为B首地址)
  • B调用C,从call C变为jsr L+M   (L+M为C首地址)

4、什么是“装入时动态链接”?装入时有什么优点?

把一个模块装入内存时,如果该模块调用了其它模块,再把被调用模块装入内存并链接

优点:

1、方便修改和更新模块

各种模块分开存放,方便修改模块内容。不像静态链接,需要对一个完整的模块重新打开再修改

2、方便对目标模块共享

  • 静态链接,每个应用模块调用其它目标模块时,装入的是其它目标模块的拷贝不能实现共享
  • 动态装入,一个目标模块可以被链接到几个不同应用模块

5、什么是“运行时动态链接”?装入时有什么优点?

程序运行时,部分目标模块可能不会被用上,但也被装入了应用模块,这样很低效。

当程序运行时,如果某个被调用模块未被装入,才将其装入内存链接

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

每个分区的起始位置设置一些控制分区分配的信息,以及在分区首设置一个前向指针,在分区末尾设置一个后向指针,用来将不同空闲分区链接成一个双向链表。

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

让系统对内存更方便的进行紧凑,减少无法被利用的小分区。

需要在系统中添加一个重定位寄存器,用来存放程序在内存中的起始地址

程序在执行时,真正的访问的内存地址是相对地址加上重定位寄存器地址,随后再更新重定位寄存器

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

空闲分区构成一个链,按照顺序搜索空闲分区,找到一个大小能满足要求的分区。

适合不大的系统,当系统大时,内存分区很多,查找会变慢

1、首次适应

链首开始查找,直到找到一个能满足要求的空闲分区,现在此分区划分一片空间给进程

2、循环首次适应

上次找到的空闲分区的下一个分区开始查找,直到找到一个满足要求的分区

3、最佳适应

找一个能满足要求,而且是最小的空闲分区

4、最坏适应

当前最大的分区,分割一部分给进程

缺点:导致系统缺少大分区

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

1、分类搜索

将空闲分区按容量大小进行分类,每类有相同容量的构建一个分区链表。

按照进程长度,从索引表中找到能容纳的最小分区链表,再从链接中找到一个分区

2、伙伴系统

10、动态分区分配进行内存回收时,有几种情况?

1、回收区和插入点前一个空闲分区F1相邻

回收区与前一个分区合并,不用添加新表项,只要修改F1大小

2、回收区和插入点后一个空闲分区F2相邻

后一个分区和回收区合并,添加新表项新空闲分区首地址为回收区首地址,大小为回收区和F2大小

3、回收区和前、后都相邻

把回收区、F2添加到F1,取消F2表项,F1大小为三个分区和

4、回收区不与前后其它分区相邻

添加一个新空闲区,地址为回收区首地址,大小为回收区大小

11、分区管理中常用哪些策略?比较它们的优缺点

为了不让程序之间发生干扰,将用户空间划分为若干区域

1、固定分区

为进程运行前分配到一片固定内存

2、动态分区分配

根据进程实际需要,动态分配内存

12、为什么要引入对换?对换可以分为哪些策略?

某些因缺少资源而阻塞的进程占用了大量内存空间,而有些进程因为缺少内存空间一直停留在外存。此时需要提高系统吞吐量,设置了对换。

1、整体对换

cpu的中级调度实际就是对换功能

2、页面(分段)对换

如果按进程的一个“页面”或“分段”为单位,则称为“页面对换”或“分段对换”。

13、对“文件区”管理的目标和对“对换空间”管理的目标有什么不同?

文件区管理主要目标是“提高文件存储空间利用率”,其次是提高文件访问速度

换空间管理主要目标是“提高进程换入和换出速度”,其次是提高文件存储空间的利用率

14、为了实现对换,系统应该具有哪些功能?

1、对换空间的管理

2、进程的换入和换出

15、什么是页面?什么是物理块?页面的大小应如何确定?

进程逻辑地址空间分成若干个页面,页面强调是进程的逻辑地址合集

内存物理地址空间分成若干个块,块强调是内存的物理地址合集

进程多个不同页可以装入内存多个不同的块中

页面大小

若页面容量过小,可以减少页内碎片同时,每个进程需要的页面数目就增多了,就需要更多的页表来记录,也会占用大量内存

若页面容量过大,每个进程需要的页面数目减少,增加了换进换出速率增加了页内碎片

合适的页面大小为2的幂,1KB~8KB

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

为了能在内存找到每个页面对应的,系统为每个进程建立一张页面映像表,简称页表

页表记录的是每个页面对应的块号

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

页表,地址变换机构

18、分页系统是如何实现地址变换的?

地址变换机构将逻辑地址分成页号页内地址两个部分

如果页号合法(没有大于页表长度),则将页号为索引去检索页表

页表开始地址+页号*页表项长度=该表项在表中的位置

从而得到物理块号,再加上页内地址得到实际物理地址