装入

Q: 使用绝对装入与可重定位装入的程序, 地址的使用上有什么区别?
A: 绝对装入: 使用绝对地址.
可重定位装入: 使用相对地址

Q: 静态重定位与动态重定位区别
A: 都是使用了相对地址, 装入物理内存的时候, 需要对相对地址进行转换
静态重定位在装入的时候就进行了转换
动态重定位则在执行的时候进行转换

Q: 静态重定位与动态重定位哪个更加适合程序的浮动?
A: 动态
为什么我也不清楚 Q W Q

Q: 编译与链接阶段产生的逻辑地址有什么区别?
A: 编译产生单个目标文件(*.o文件)的逻辑地址
链接产生可执行程序的逻辑地址

Q: 可执行程序和目标文件的关系
A: 多个目标文件+库文件(*.lib, *.a, *.so, *.dll),处理之后得到可执行文件

内存分配算法

基于顺序搜索的内存分配算法

Q: 为什么首次适应算法低地址会有很多外部碎片?
A: 首次适应算法从低地址开始, 找到第一个能满足大小的空闲内存块, 分配给作业
导致低地址有大量的小空闲内存碎片

Q: 循环首次适应算法与首次适应算法顺序搜索区别
A: 首次适应算法: 从低地址开始寻找满足大小的空闲内存块
循环首次适应算法: 从上次查找结束的地址开始搜寻满足大小的空闲内存块

Q: 循环首次适应算法与首次适应算法, 哪个效率更好?
A: 一般情况下, 还是首次适应算法效果更好

Q: 最佳适应与最坏适应算法顺序搜索区别
A: 最佳适应算法: 空闲内存块从小到大搜索, 第一个满足大小的空闲内存块, 分配给作业
最坏适应算法: 空闲内存块从大到小搜索, 第一个满足大小的空闲内存块 (一般就是最大的空闲内存块) 划分之后, 分配给作业

Q: 首次适应, 循环首次适应, 最佳适应, 最坏适应
四大顺序搜索算法, 哪个产生的外部碎片最多?
A: 最佳适应算法
每次都分配最接近作业需要大小的空闲内存块, 导致每次作业分配几乎都能产生外部碎片
名叫最佳其实性能很差, 外部碎片也是最多

Q: 首次适应, 循环首次适应, 最佳适应, 最坏适应
四大顺序搜索算法, 哪个性能最好?
A: 首次适应算法
循环首次适应算法, 内存很少保留大块的空闲内存块
最佳适应和最坏适应算法, 需要维护按照空闲内存块大小排序的队列, 每次分配或者释放内存, 都需要修改队列
使得最简单的首次适应算法, 性能最好

分页的内存分配算法

Q: 如何从页表得到页框的物理地址?
A: 页表划分为页表项
查找第 页框的物理地址, 就看第 页表项的值
该值就是对应的页框的物理地址

Q: 为什么即使多层页表增加了存储空间占用与页表查询时间, 也用要引入多级页表?
A: 一个页表大小与一个页的大小相等
, 一个页能够保存 个页对应的物理地址
存在个页, 就需要 个连续的页表, 来映射页与物理地址之间的关系.
在现实的计算机中, , 这导致需要大量的连续空间
如果使用多级页表, 只需要一级页表大小的连续空间, 二级页表可以离散存储.
甚至可以在不需要的时候, 放入外存, 需要的时候, 再从外存调入内存.
总的来说是增加了存储空间占用与页表查询时间, 但是不需要占用连续的内存空间, 而且可以通过调度策略, 增加可用内存大小

虚拟内存

实现虚拟内存管理的实现
请求分页系统基本分页系统的基础之上, 增加了{请求调页}和{页面置换}功能

Q: 虚拟内存的大小由什么决定?
A: 1. 虚存的实际容量小于等于内存容量和外存容量之和
2. 虚存的最大容量小于等于计算机的地址位数能容纳的最大容量

虚拟内存
实际容量与最大容量是不同的吗

页面置换算法

常见的页面置换算法

Q: 最佳 (OPT) 页面置换算法与最近最久未使用 (LRU) 页面置换算法的区别
A: 最佳 (OPT) 页面置换算法: 向后看, 淘汰掉未来不可能使用, 或者下次使用间隔最长的页面
最近最久未使用 (LRU) 页面置换算法: 向前看, 淘汰掉上次调用与此时时间间隔最长的页面

Q: 为什么工程上不适用 OPT 页面置换算法, 仅仅用来作为其他算法性能的评估参照?
A: OPT 页面置换算法要求”向后看”的能力, 每次淘汰掉未来不可能使用, 或者下次使用间隔最长的页面
人类目前还没有这样的能力

Q: 什么是 Belady 异常?
A: 为进程分配的物理块增多, 缺页次数不减反增的异常现象

Q: 哪种页面置换算法会发生 Belady 异常?
A: FIFO, 可能会发生

Q: 简单 Clock 算法运行过程 (装入, 替换)
A: 装入:
为每个页面设置一位访问位, 当某页首次被装入或被访问时, 其访问位被置为 1
内存中的页面链接成一个循环队列
替换:
在选择淘汰一页时, 只需检查页面的访问位:
若为 0, 直接换出
若为 1, 将它置为 0, 暂不换出
指针指向下一个页面

Q: 改进 Clock 算法运行过程 (装入,修改, 替换三大过程)
A: 装入:
为每个页面设置一位访问位, 当某页首次被装入或被访问时, 其访问位R被置为 1
内存中的页面链接成一个循环队列
修改:
为每个页面设置一个修改位M, 当某页被修改时, 其修改位被置为 1
替换:
在选择淘汰一页时, 需检查页面的访问位与修改位:
第一轮扫描:
找到 R=0M=0的页面,直接淘汰;否则进入第二轮扫描.
第二轮扫描:
找到 R=0M=1的页面,直接淘汰;若无,清零所有页面的访问位,回到第一轮.

内存保护

内存分配管理方式的主要保护措施是{界地址}保护