操作系统要点总结-内存篇

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 著,《现代操作系统》,第三版本,机械工业出版社

原创文章 32 获赞 12 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_35469756/article/details/103828185