OS-内存管理 真题复盘总结
内存管理
- 2010 选择
- 2017 选择
- 2019-选择
- 2010-选择
- 2019-选择
- 分段存储管理复习
- 2020-选择
- 2011-选择
- 2014-选择
- 2022-选择
- 2016-选择
- 2015-大题
- 2013-大题
- 2020-大题
- 2009-大题
- 结语
内存管理
- 2010 选择
- 2017 选择
- 2019-选择
- 2010-选择
- 2019-选择
- 分段存储管理复习
- 2020-选择
- 2011-选择
- 2014-选择
- 2022-选择
- 2016-选择
- 2015-大题
- 2013-大题
- 2020-大题
- 2009-大题
- 结语
2010 选择
对于这道题目怎么来入手呢 首先我们要明确的是这道题采用的是最佳适应算法 我们回顾最佳适应算法 是不是将空闲的磁盘块按从小到大链接起来啊 所以如下图所示 在经历了几次分配和释放之后 此时我们内存里面显然最大的空闲分区是9MB
2017 选择
这道题依旧采用 最佳适应算法 所以我们思考的逻辑是一样的 首先我们利用空闲分区表进行初始化 也就是对于一开始内存的情况有一个具体的了解 在初始化完毕之后我们按照题目的需求进行地址回收 我们只需要依据回收空闲块的原则来进行就好 而这题并不需要考虑合并之后空闲表的情况
2019-选择
- 对于这道题目我们首先排除A和D 因为首次适应算法是按地址来查找空闲的空间的 所以并不存在我们的内部碎片问题循环首次适应(临近适应)只是它的一个改进 相比于首次适应,改为分配内存时从上次查找结束的位置开始继续查找
- 对于B D之间的抉择 我觉得是这样的最佳适应算法每次都是找到一个最小的满足需求的空闲块
- 而我们的最坏适应算法恰好相反 每次都是寻找一个最大的空闲块 但是由于动态分区分配算法 当目前的需求小于它给你分配的空间的时候 往往会有一个切割操作 而最佳适应算法就会出现一种情况 如果给你分配的空闲块是目前最小的了 而你的需求比他还要小 这时候就会产生内部碎片 当内部碎片越来越多的时候 操作系统就会使用“紧凑”这种技术来消除内部碎片 所以这道题选C
2010-选择
- 对于这道题我们需要知道对于页目录这个表项的个数代表的是我们二级页表的个数 而题目中告诉我们整个进程的空间大小有2^16这么多页 一页的大小也告诉你了 大小为2的10次方B 所以我们只需要让整个进程的总页数去乘以每个页表项的大小是不是就可以算出 整个进程的空间了呢
- 然后回顾我们之前对页表进行分页(二级页表)的一个流程 是不是就是将一个大的页表按页的大小分成很多个大小相等的二级页表
- 所以 我们只需要将整个进程的逻辑空间大小去除以每一个页的大小即可得到一共分成了多少个二级页表呢
- 而二级页表的个数就对应了页目录表(顶级页表/一级页表)里表项的个数
2019-选择
- 这道题考察了分段存储管理系统
- 首先A C D显然是正确的 由于题目告诉我们了S为共享段 意味着我们的段长和起始地址是一样的 也就是我们的内存里只保存一份就可以 因为是共享 所以只有当他俩都不用的时候才可以回收S
- B显然错误 它就像在说 我跟你共享一个东西 但是并不意味着 这个东西在我们各自进程中的位置一样
分段存储管理复习
- 我们回顾一下 分段管理系统他是不存在内部碎片的 因为分段管理系统是不需要对内存进行分页的 它本质上是站在程序员的角度对我们的进程进行了分段
- 例如我们写了一个函数 我们想让他存在一个段里而不想让他分成两页去存储
- 而我们的段表里就存储了当前段的起始地址和长度 这个思想我觉得是非常重要的 首先我们要弄清楚为什么我们这里不想分页存储那里的页表 只存储页号和块号的映射 这是因为分页存储管理 它首先就将内存分成了一个个大小相同的页框 类似于数组 我们只需要知道首地址就可以随机的进行访问
- 而对于分段存储 我们只知道当前段在内存哪是不够的 我们还得知道到哪结束 所以添加了长度这个字段
- 类似的思想在文件系统当中也有应用 我们如果采用长度不一的方式进行存储 如果让我们设计字段 那么就会有两种组合——<起始地址,结束地址> 、<起始地址,文件长度>
- 总的来说就是对于长度不一的东西 我们总需要两个字段来确定它具体的位置
2020-选择
首先题目当中的请求分页系统有效访存时间指的是我们从VA(虚拟地址)——>PA(物理地址)转换的整个流程 所以发生缺页的时候我们就会去磁盘的交换区进行调页 相应的 缺页率和磁盘I/O时间肯定会影响我们的时间 而III和IV显然也影响 所以D正确
2011-选择
回顾我们抖动的本质 指的就是频繁的缺页 进行换入换出的操作 根本原因就是因为给进程分配的页框(物理块)太少了 导致页频繁的换入换出 所以我们如果撤销部分进程 我们整个内存的空间就会得到释放 从而有更多的空闲页框分配给进程使用 而II和III却解决不了我们抖动的根本原因 所以这题选A
2014-选择
-
加快VA——>PA的转换的措施
-
首先I是一定可以的 回顾我们之间学习的机构地址转换的流程 因为我们只要TLB命中就省去了一次读页表的操作(访存操作)II也是可以的因为如果页表常驻内存 我们每次就不需要将页表调入内存了 所以该题选择C
-
II建立在请求分页存储管理的基础之上 我们一开始并不会将这个页表加载到内存里
-
一开始页表是在外存里面的 随着进程的执行,操作系统会根据需要将程序的各个部分从外存分页加载到内存,并且更新相应的页表以反映这些新加载的页面与物理内存之间的映射关系。
-
如果内存不足,一些不常用的页面以及它们的页表项可以被换出到外存,从而释放内存给其他更需要的进程使用
2022-选择
- 首先不同的页面置换算法是一定会影响缺页率的 甚至对于IFIO算法还会出现Belady异常(增加物理块的数量 缺页率反常的上升)
- 工作集指的是某一时刻访问页面的集合(不允许重复) 根据程序的局部性原理 我们可以理解为 我们用过去一段时间经常访问的页的集合来预测未来我们将要访问的页
- 我们操作系统在给进程分配物理块(驻留集)的时候会参考我们的工作集 保证驻留集不小于工作集大小 不然会频繁发生缺页
- 本质上其实是这样的 例如工作集的大小是4 它就告诉我们的OS最近频繁访问这4个页面 这时候我们的操作系统将驻留集大小设置为4或者大于4是一个合适的值 否则一定会频繁的发生缺页
- 对于C选项 我们举个例子假如进程的数量足够的多 以至于每个进程只能分到一个页框 这样的话每个进程的缺页率就直接爆了
- D选项提到了缓冲这个概念 本质上就是解决页调入调出过程中内存与外存速度不匹配的问题
起到协调的作用 类比于炸薯条的例子
2016-选择
工作集工作集 本质上是一个集合 而一个集合里面是不允许有重复元素的 它自身的窗口大小往往是不一样大的 所以t时刻的工作集为{2,3,0,6} 集合是无序的 所以选择A选项
2015-大题
2013-大题
- (1)首先页的大小是不是看我们页内偏移量的位数啊 那么页内偏移占了12位 而且是按字节编址
那么页大小=2^12B 第一小问采用一级页表 它问你最大占用多少字节
一个页表项是4B 一共有2^20次方页 那么一共占用2的22B这么大 - (2)如果采用二级页表 问你对应页目录号和页号的表达方式
- 则页目录号(LA>>22)&0x3FF (因为右移22位我们的高位是需要补0的 所以其实我们只需要保留末尾11位就可以了)
- 那么我们与运算(&)的一个原则就是任何数字与上1都是它本身 任何数字与上0都是0
- 同理 页号:(LA>>12)&0x3FF
- (对了 0x只是代表16进制而已 而3FF刚好就是10个全1 说白了就是装个13 你当然可以写10个1)
- (3)
2020-大题
2009-大题
结语
若各位觉得我的思路不错 想听视频讲解视频——关注抖音:Blooming / Blibili:曦月逸霜
- ***没扣字的时候在思考哦 o(╥﹏╥)o 今天不嘻嘻 沉淀中~***