ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

软考存储管理核心考点:分页分段、地址转换与页面置换算法全解析

软考存储管理核心考点:分页分段、地址转换与页面置换算法全解析 软考软件设计师的存储管理这块说难不难说简单真不简单。上午选择题基本是年年必考分页、分段、段页式、虚拟存储、页面置换算法这几个词绑定出现很多考生在地址转换计算上卡壳在置换算法模拟题上丢分其实根本原因不是题目难而是没有把这些机制串成一条逻辑线。这篇就把存储管理的核心考点完整拆一遍重点讲清楚“为什么这么做”和“怎么算答案”顺便把历年真题的常见坑也翻出来。1. 为什么会有分页、分段这套东西1.1 物理内存的困境与地址抽象先回到最原始的问题程序跑起来就得多块内存操作系统要把程序和数据放进物理内存里才能让CPU执行。早期采用连续分配一个进程占一整块连续区域。这样做的后果是进程创建、撤销的过程中会产生大量不连续的小空间也就是碎片尤其是外部碎片无法分配给新进程内存利用率很低。分页、分段的本质就是打破“必须连续”的限制。把进程的逻辑地址空间切成若干小块装进离散的物理块中通过某种映射关系页表、段表把“程序看到的地址”翻译成“硬件访问的地址”。这就是逻辑地址抽象它让你写代码时根本不用关心自己的数据到底放在内存的哪个物理角落。软考很喜欢考这套思想的出发点常见的问法是“分页存储管理的主要优点是”答案就是消除外部碎片、提高内存利用率同时也方便进程共享公共代码比如让多个进程共用同一份库函数代码只要把它们映射到同一物理页框就行。1.2 逻辑地址与物理地址的映射关系无论是分页还是分段核心是两张表的概念。分页里面是页表记录逻辑页号到物理页框号的对应分段里面是段表记录段号到段起始地址和段长度的映射。段页式则是先查段表再查页表多走一步。你只要抓住一个公式逻辑地址 页号 页内偏移分页物理地址 页框号 × 页框大小 页内偏移。这个公式是上午题计算题的命根子后面会反复用到。2. 分页存储管理考点拆解2.1 页、页框与地址拆分的计算方式分页将逻辑地址空间等分为页面页物理地址空间等分为页框帧。页面大小和页框大小一致典型值是4KB2^12字节。为什么必须是2的幂因为只有页面大小是2的幂时地址中的页号和页内偏移才能直接通过截位得到硬件做地址转换就不需要额外做除法运算直接拿逻辑地址的低12位当偏移剩下高位当页号。来看一道典型计算题系统页面大小为4KB逻辑地址为1024页表内容为页号0→页框号2页号1→页框号3页号2→页框号5页号3→页框号7。求逻辑地址1024对应的物理地址。计算过程页内偏移 1024 mod 4096 1024因为1024小于4096直接是偏移页号 1024 / 4096 0。查页表得页框号2。物理地址 2 × 4096 1024 8192 1024 9216。注意这类题的陷阱在于如果逻辑地址大于等于页面大小要记得先整除得页号取余得偏移。而且物理地址计算时页框号要乘以页框大小不是简单拼接。考试偶尔直接给出十进制地址偶尔给十六进制两种都要会换算。2.2 页表结构与页表项的关键字段页表是每个进程一张记录逻辑页号和页框号的映射。页表本身存放在内存中CPU要访问一个数据得先访问页表。这个过程想想就觉得慢每次数据访问都要先去内存取页表项再去内存取数据显然不能这么奢侈所以硬件引入了快表TLB缓存最近使用的页表项。在具有快表的系统中如果快表命中一次访问即可快表未命中需要先访问内存获取页表项再访问数据共两次内存访问。考试还常考页表项包含哪些字段除页框号外还有状态位有效位指示该页是否在内存、访问字段用于记录最近被访问情况帮助实现LRU、修改位记录该页是否被修改过置换时决定是否写回磁盘、外存地址该页在磁盘上的位置。这些字段不是八股而是虚拟存储能工作的基础。有效位用于缺页判断修改位用于减少不必要的磁盘I/O访问位则是页面置换算法实现LRU和Clock的数据来源。2.3 页面大小选择的权衡题目可能会问页面大小是大好还是小好逻辑上页面越小内部碎片越小内存利用率越高但是页面越小进程所需页面数越多页表就越大占用内存越多且磁盘I/O时每次传输的数据量小换入换出次数增多效率反而降低。页面过大则内部碎片严重。所以存在折中常见4KB到64KB之间。这块属于考试中的概念辨析题理解就好了不用死背。关键是内部碎片和页表大小、I/O次数之间的矛盾关系。2.4 两级页表与地址结构单个逻辑地址空间很大的情况下页表本身可能大到无法装入连续内存。比如32位地址空间、4KB页面页表项4字节就需要2^20个页表项占4MB。这时引入两级页表把页表本身再分页。逻辑地址拆成一级页号、二级页号、页内偏移三个部分。一级页表指向二级页表二级页表指向页框。考试常给一个两级页表算缺页中断次数或地址位数分配常见的类型是逻辑地址32位页面大小4KB一级页表占10位、二级页表占10位、页内偏移12位算一页能装多少页表项之类的题目。解题时抓住页内偏移位数由页面大小决定log2(页面大小)剩下的位数分给页号部分二级分几段取决于页表多级。3. 分段存储管理与分页的对比3.1 分段的基本概念和段表分段是按程序的逻辑结构函数、模块、数据段、堆栈段等把地址空间分成若干段每段有独立的逻辑含义长度可以不同。逻辑地址是段号段内偏移。段表记录段号到段基址和段长度的映射。地址转换时先查段表找到该段的基址然后检查偏移与段长进行比较如果偏移大于等于段长产生越界中断。说明这个机制自带保护也是分段比单纯分页更贴合逻辑的原因之一。物理地址 段基址 段内偏移。注意分段有内存碎片问题。由于各段长度不等反复加载和释放必然产生外部碎片但可以有紧凑技术来缓解。段的共享也是按段来共享因为段是用户可见的逻辑单位所以方便实现代码和数据共享。3.2 分页与分段的对比表格对比项分页分段划分依据系统自动划分页面大小固定程序逻辑结构划分段长度可变对用户可见性用户不可见透明用户可见地址空间维度一维线性二维段号偏移主要目的提高内存利用率消除外部碎片满足逻辑模块化、共享和保护需求碎片类型内部碎片外部碎片共享单位页难实现段按逻辑模块更方便这个表基本是考试常考知识点务必记牢。关键一句话分页是系统行为分段是用户逻辑行为。3.3 段页式存储管理的查表流程段页式就是先分段再对每个段分页。逻辑地址分成段号段内页号页内偏移。系统为每个进程建立一张段表每个段对应一张页表。访问时先查段表得到该段页表的起始地址和长度再查页表得到页框号最后加上页内偏移得到物理地址。整个过程需要两次查表因此为了速度必须借助快表。出题时最常见的是问段页式的三次访问次数。没有快表时访问一个数据需要3次内存访问取段表、取页表、取数据。有快表时若段表项和页表项均命中快表则只需1次访问。要看清题目条件。4. 虚拟存储与请求分页机制4.1 局部性原理虚拟存储的理论基础是局部性原理。程序运行时的内存访问并不是随机的大部分时间集中在少数几个页面。时间局部性指刚被访问的数据很可能再次被访问空间局部性指某地址附近的存储单元很可能很快被访问。这个原理解释了为什么内存里只装进程的一部分内容就能让程序基本正常运行。软考如果出概念题常把局部性原理与虚拟存储可行性挂钩你可以回答正是因为局部性程序执行时只在少数页面之间来回才可以用较小的物理内存运行较大的进程。4.2 请求分页与缺页中断过程在请求分页系统中程序装入时只装入当前需要的页面。当访问到不在内存的页面时产生缺页中断。操作系统暂停进程把所需页面从磁盘读入空闲页框。如果没有空闲页框就按置换算法淘汰一个页面。这个流程几乎是必考简答题或选择题。缺页中断与一般中断的区别是缺页中断在指令执行期间产生而且一条指令可能触发多次缺页中断比如一条指令访问多个地址每个地址对应的页都不在内存时。考试偶尔会问到这一点属于细节考点。页面调入时还涉及到一个选项局部置换还是全局置换。局部置换只在当前进程的内存空间中选择淘汰页不会干扰其他进程全局置换在整个内存范围内选择。对于虚拟存储的隔离性来说局部置换更安全但内存利用率略低。4.3 缺页率与有效访问时间计算存储管理中非常喜欢考一道计算题缺页率已知算有效访问时间EAT。公式需要背下来EAT (1-p) × 内存访问时间 p × 缺页处理时间其中p是缺页率。缺页处理时间通常包括缺页中断服务时间、磁盘读入时间、重新访问时间。题目如果给出哑数据比如内存访问时间为100ns缺页处理时间为8ms缺页率为万分之一则EAT (1-0.0001)×100ns 0.0001×8ms 99.99ns 800ns 899.99ns。建议答题时先写公式再代入不要跳步。如果题目还要求比较“不加快表”和“加快表”的访问时间记住加快表的命中率会显著降低有效访问时间。4.4 页面置换算法核心串联页面置换算法是这块的重头戏上午题纯粹就是模拟。四种算法最佳置换OPT、先进先出FIFO、最近最久未使用LRU、时钟Clock。最佳置换OPT淘汰以后永不再用或最长时间不被访问的页。它是理论算法无法实现因为系统无法预知未来。但考试中会用它作为最优参照来比较其它算法的缺页次数。先进先出FIFO淘汰最先进入内存的页面。实现简单用一个队列即可。但是FIFO有一个著名问题Belady异常也就是分配的物理页框增多缺页次数反而增加。这和直觉相反考试会问哪些算法有Belady异常答案就是FIFO有些教材认为OPT和LRU不会产生Belady异常FIFO可能产生。最近最久未使用LRU淘汰最长时间没有被使用的页面。它基于局部性原理性能好但硬件开销较大需要记录访问时间。软考模拟题中的经典题型是给定访问序列和页框数手动推演缺页情况。时钟Clock算法是LRU和FIFO的折中为每页设置访问位组织成环形链表缺页时从指针位置扫描遇到访问位为0的页淘汰访问位为1的页置0并继续扫描。考试常将其描述为“时钟置换算法”或“二次机会算法”。来看一个典型LRU模拟题访问序列为 1,2,3,4,1,2,5,1,2,3,4,5页框数4求缺页次数。计算方法按序列逐个处理维护一个按“最近使用时间”排序的页面集合。当期页面未在集合中且集合已满时淘汰最久未使用的页面。我建议用表格法模拟笔试时不容易出错表格的列是访问顺序行是页框打叉表示缺页。4.5 页面置换算法对比表格算法实现难度优点缺点是否产生Belady异常OPT理论上不可实现缺页率最低作为参照标准需预知未来访问序列否FIFO简单实现成本低可能产生Belady异常性能不稳定是LRU较高性能好符合局部性原理需要记录访问时间硬件开销大否Clock中等开销比LRU低性能接近LRU访问位精度有限可能出现选择不优否这四种算法中模拟题出现频率最高的是FIFO和LRU必须会手算。Clock的出现频率近年来有所上升因为它贴近现代操作系统实际采用方案。4.6 页面置换补充抖动、工作集与驻留集抖动是指系统中频繁发生的页面对换现象。当内存中同时运行的进程过多每个进程可用的物理页框太少缺页率极高CPU大部分时间都在处理缺页中断而不是执行用户程序。系统效率急剧下降。工作集是进程在一段时间内实际访问过的页面集合。工作集模型通过跟踪进程的活跃页面来预测其内存需求当可用页框小于工作集大小时就容易发生抖动。考试问“防止抖动的最好办法”时答案通常是基于局部性原理采用工作集模型为进程提供足够大的工作集。驻留集大小决定了进程在内存中的页面数量。驻留集过小会导致频繁缺页过大则浪费内存且增加页表规模。系统可以根据缺页率动态调整驻留集。5. 常见题型与答题实战技巧5.1 地址转换三步走套路所有地址转换题不管分页、分段还是段页式都能用固定套路解。第一步从逻辑地址中分离出索引号和偏移量。分页是页号和页内偏移分段是段号和段内偏移段页式是段号页号页内偏移。第二步查相应表找到物理页框号或段基址。第三步计算物理地址。多说一句段页式题容易卡壳的地方是两次查表的具体过程。很多人只记得“先查段表再查页表”这八个字但计算时容易忘了段表项长度和页表长度的位数分配。遇到具体数字时先写清楚每个部分的位数再画地址结构图整个过程顺下来基本不会出错。5.2 置换算法模拟题的表格化方法模拟题一定要写草稿表格不要凭空在脑中推演。表格化方法的步骤是第一行写访问序列下面每个页框占一行已装入的页面写在对应页框格中当前帧是否缺页在表头打勾或写F。整个过程按时间从左到右推进。对于LRU每次访问后注意按照“最近使用时间”重新排序页面淘汰时分清谁是当前最老。对于FIFO最简单的办法是维护一个队列往右推进时从队头淘汰新页入队尾。在实际考场上用表的方式不会漏掉页面。5.3 容易踩的三个坑与排查方法第一个坑是页内偏移位数算错。页面大小为1KB时页内偏移是10位页面大小为4KB时是12位。很多人在十六进制地址转换时忘记这一点把低12位和低12位后面的位都算到偏移里。第二个坑是逻辑地址整除时忘了最大页号范围导致页表越界。第三个坑是多个进程共享同一页时页表项的共享计数不可忽略置换时如果该页被多个进程共享不应当被换出但考试一般不会深挖只要记住共享页可能存在多张页表指向同一页框就行。排查方法就是逆向验算算出物理地址后用物理地址除以页框大小应该得到页框号余数应该和逻辑地址的低位偏移相等。这个自检步骤能显著减少低级失误。6. 备考策略与真题运用建议6.1 上午题最常考的六个方向历年软考上午题中存储管理部分的考点集中在逻辑地址与物理地址转换计算、页表题目含多级页表、分页与分段对比、虚拟存储与局部性原理、页面置换算法模拟、有效访问时间计算。这六个方向你只需要各准备三到四道真题做完之后把错题原因归类基本就能覆盖大部分考点。备考时的最低要求是看到地址转换题不能犹豫超过两分钟。如果在考试时还需要现场推导基本公式说明熟练度不够。6.2 计算细节与答题策略考场上的计算题一定要先把公式写出来再代入数据。例如有效访问时间计算题阅卷时更看重公式和单位是否正确最后的数值反而不会过于苛刻。地址转换题要在草稿纸上把逻辑地址写成二进制或者十六进制按位拆分成索引和偏移两部分再操作。页面置换题中如果题目没有明确说明初始内存为空通常默认初始为空。如果初始内存已经有若干页面要看清题目给出的初始页面状态和访问位置。少数题目会设置一个“初始已装入”条件这时候就不能从零开始算否则整个模拟结果都会偏。6.3 我的刷题顺序建议我喜欢先做分页计算题再做分段概念题再做段页式地址题最后连做置换算法模拟题。因为前面三个是一个递进关系分页理解到位后分段和段页式都是概念叠加而置换算法相对独立需要额外练习手算速度。做置换算法题时我建议只练FIFO、LRU、Clock这三种。OPT基本不考你模拟实现更多是问“最佳置换算法为什么无法实现”或“哪种算法缺页率最低”。遇到OPT题直接答出它与未来访问序列相关这类理由即可。各位复习的时候不要满足于看懂答案要亲手把每一步写在纸上。我见过很多考生在考场上算法题做错不是不会而是草稿太乱导致自己都看迷糊了。结构化的草稿才是考场拿分的真正保障。
返回列表