1 什么叫做虚拟内存
一个32位的PC,内存的最大容量不超过CPU的寻址范围是2^32B,即4G。如果完全装入一个桌面游戏程序所需要的内存为5G,是不是就不能好好玩耍?答案是否定的,可以使用虚拟内存技术。简单点说就是程序不需要全部装入即可运行,运行时根据需求动态调入数据,若内存不够还要换出部分数据。
那虚拟内存有哪些特征呢?1)多次性:无需在作用运行时候一次性全部装入内存,而是被运行多次调入内存;2)对换性:无需再作用运行时一直常驻内存,而是运行在作业运行过程中,将作业换出、换入。3)虚拟性:从逻辑上扩充了内存的容量,使用户看到的内存远大于实际的容量。
2 说说分段和分页
分段和分页都属于离散分配管理方式,即为用户进程分配的可以是一些分散的内存空间。
存储管理方式 | 定义 | 优点 | 缺点 |
---|---|---|---|
分页 | 把进程分页,各个页面可以离散地放到各个内存块中 | 内存空间利用率高,不会产生外部碎片,只会有少量的页内碎片 | 不方便按照逻辑模块实现信息的共享和保护 |
分段 | 将地址空间按照程序自身的逻辑关系划分为若干段,每段从0开始编址。每个段在内存中占据连续空间,但隔段之间可以不相邻 | 很方便按照逻辑模块实现信息的共享和保护 | 如果段过大,为其分配很大的连续空间会很不方便。另外,段式管理会产生外部碎片(可以通过紧凑技术来解决碎片问题,但是时间代价比较大) |
3 四种动态分区分配算法的对比
动态分区分配属于连续分配管理方式之一,即为用户进程分配的必须是一个连续的内存空间。使用动态分区分配时,只有在进程装入内存时,才会根据进程大小动态地建立分区,并使分区的大小正好适合进程的需求。无论用以下哪种算法,都会产生很多外部碎片,虽繁可以用“紧凑”技术来处理,但是“紧凑”的时间代价很高。
算法 | 算法思想 | 分区排列顺序 | 优点 | 缺点 |
---|---|---|---|---|
首次适应 | 从头到尾找到合适的分区 | 分区以地址递增次序排列 | 综合看性能最好,回收分区后一般不需要对空闲分区队列重新排序 | |
最佳适应 | 优先适应更小的分区,以保留更大的分区 | 空闲分区以容量递增次序排列 | 会有更多大的分区被保留下来,能满足大进程的需求 | 会产生很多太小的难以利用的碎片;算法开销大回收后可能需要对空闲分区队列进行重新排序 |
最坏适应 | 优先使用更大的分区,以防止产生太小不可用的碎片 | 空闲分区以容量递减次序排列 | 可以减少难以利用的小碎片 | 大的空闲分区容易被用完,不利于大进程;算法开销大回收后可能需要对空闲分区队列进行重新排序 |
邻近适应 | 由首次适应演化而来,每次从上次查找结束位置开始查找 | 空闲分区以地址递增次序排列(可排列成循环链表) | 不用每次都从低地址的小分区开始检索,同时算法开销也小 | 会使高地址的大空闲区也被用完 |
4 常见的页面置换算法
当内存不够时,操作系统负责将内存种暂时不用到的信息换出到外存。当访问的信息不再内存的时,操作系统需要将页面从外存调入内存后,程序才能继续执行。因此,某个时刻,进程中某个页面的调入调出问题,就需要通过页面置换算法来解决。
算法 | 算法规则 | 优缺点 |
---|---|---|
最佳置换算法(OPT) | 优先淘汰最长时间内不会被访问的页面 | 缺页率最小,性能最好,但无法实现 |
先进先出置换算法(FIFO) | 优先淘汰最先进入内存的页面 | 实现简单,但性能很差,因为最早进去的页面可能是较频繁使用的页面 |
最近最久未使用置换算法(LRU) | 优先淘汰最近最久没访问的页面 | 性能很好,但需要硬件支持,算法开销大 |
时钟置换算法(CLOCK) | 循环扫描各页面,第一轮淘汰访问位为0,且将扫描过的页面访问位改为1。若第一轮没选中,则进行第二轮扫描 | 实现简单,算法开销小;但未考虑页面是否被修改过 |
改进型的时钟置换算法(改进型CLOCK) | 若用(访问位, 修改位)的形式表述,则第一轮:淘汰(0,0); 第二轮:淘汰(0,1);并将扫描过的页面访问位置为0;第三轮:淘汰(0,0);第四轮:淘汰(0,1); | 算法开销小,性能也不错 |
5参考文献
1) 王道考研操作系统视频
2) Andrew S·Tanenbaum 著,《现代操作系统》,第三版本,机械工业出版社