image-20260608172813861

内存管理流程图

image-20260617142536825

无存储器抽象

无存储器抽象是早期操作系统的内存管理方式,程序直接访问物理内存没有地址空间隔离,也没有虚拟内存的概念

程序没有独立的地址空间,所有程序共用物理内存地址

典型内存布局变体(三种模式)

image-20260610201915055

模式操作系统位置用户程序位置存在问题
模式 aRAM (,随机存取存储器)底部RAM 中,从地址 0 向上用户程序错误会直接破坏操作系统
模式 bROM(只读存储器) 顶部RAM 中依赖 ROM 存储系统代码,仍无隔离
模式 cBIOS(基本输入输出系统) / 驱动在 ROM 顶部,系统在 RAM 底部RAM 中用户程序可直接修改系统数据,稳定性差

共性缺陷:用户程序和操作系统、用户程序之间没有隔离,错误会直接导致系统崩溃或数据冲突。

核心问题: 程序间内存冲突 程序无法重定位

解决办法:IBM 360 的硬件保护机制(硬件辅助隔离)使用静态重定位技术,加载程序时修改指令中的绝对地址,适配新的内存位置。

无存储器抽象是早期操作系统的内存管理方式,程序直接访问物理内存没有地址空间隔离,存在严重的稳定性和多任务缺陷,最终被虚拟内存(存储器抽象)取代。

一种存储器抽象:地址空间

定义 地址空间是进程可用来寻址内存的一系列地址集合,为每个进程提供一个抽象的、独立的内存环境。

  • 每个进程拥有自己的地址空间,相互隔离、互不干扰。
  • 逻辑地址相同也不会冲突,因为它们会被映射到不同的物理内存区域。

解决的核心问题 内存保护 地址重定位 多进程并行

原理:为每个进程分配独立的逻辑地址空间,通过映射到不同物理内存区域实现隔离

技术实现:动态重定位(基址 + 界限寄存器) (变址寄存器不常这样称呼)

原理:通过基址寄存器界限寄存器,建立进程地址空间与物理内存的映射关系

  • 基址寄存器:存放进程在物理内存中的起始地址。
  • 界限寄存器:存放进程的地址空间大小 / 最大偏移量。(也就是程序的长度)
  • 物理地址计算公式:物理地址 = 基址寄存器值 + 逻辑地址(偏移量)(指令中的逻辑地址(偏移量)必须小于界限寄存器值,否则视为越界访问,系统会终止进程。)

优势:程序加载到任意物理内存位置,只需修改基址寄存器值即可正常运行,无需修改程序代码。

交换技术

定义:交换是操作系统处理物理内存不足的一种技术,将一个进程完整地从内存移到磁盘(交换区),需要时再调回内存。

核心目的:让更多进程能 “同时” 存在于有限的物理内存中,解决内存资源紧张的问题。

技术核心特点粒度适用场景
交换(Swapping)进程整体换入 / 换出整个进程早期无分页 / 分段的系统
虚拟内存进程部分换入 / 换出(按需调页)页 / 段现代操作系统,按需加载

二、交换过程的核心流程

重定位问题

两种重定位方式(考研高频)

  1. 静态重定位:进程装入内存时,由软件一次性修改地址(早期技术,现在很少用)。

  2. 动态重定位

    :程序执行期间,通过硬件寄存器实现地址转换:

    • 基址寄存器(BR):存进程在内存的起始地址
    • 变址寄存器(LR):存变量 / 指令的相对偏移
    • 物理地址 = 基址寄存器 + 逻辑地址

动态重定位是交换技术的核心支撑,也是分页 / 分段地址转换的基础

三、交换带来的问题与解决技术

内存碎片

  • 定义:多次交换后,内存中会出现大量零散的空闲块(“空洞”),导致总空闲空间足够,但无法分配给需要连续内存的进程。
  • 解决方式:内存紧凑(Memory Compaction)
    • 把所有进程向低地址移动,合并零散空闲块为一个大的连续块。
    • 缺点:需要大量 CPU 时间复制数据,现代系统很少用(考研选择题常考 “内存紧凑的开销问题”)。

四、进程内存分段(考研超高频考点)

现代操作系统的进程内存空间,按用途划分为多个段

段名核心作用存储内容增长方向关键考点
代码段(Text)存放程序指令只读指令、常量字符串低地址向高地址只读,防止修改指令
数据段(Data)存放已初始化全局 / 静态变量int a=10;低地址向高地址可读可写
BSS 段存放未初始化全局 / 静态变量int b;(默认 0)低地址向高地址不占可执行文件空间,加载时清零
只读数据段(ROData)存放只读常量const int c=10;、printf 格式串-程序运行时不可修改
栈(Stack)存放局部变量、函数参数、返回地址函数内int d=10;高地址向低地址(向下增长)LIFO 原则,函数调用时分配,结束时回收
堆(Heap)动态内存分配malloc/new分配的内存低地址向高地址(向上增长)程序员手动管理,易内存泄漏

考研常考细节:

  1. BSS 段和数据段的区别:BSS 段的变量不占可执行文件的磁盘空间,加载到内存时才分配并初始化为 0。
  2. 栈和堆的增长方向:栈向下增长(向低地址),堆向上增长(向高地址),两者相向而行,中间是预留的增长空间。
  3. 段定义(汇编视角):考研可能考汇编中段的伪指令(segment/ends),理解段的本质是 “连续的内存区域” 即可。

五、数据段(Data Segment)动态增长的三种处理方式

当进程的数据段需要扩展,但相邻内存不是空闲时,操作系统有三种处理策略:

  1. 相邻空闲区分配
    • 条件:进程相邻的内存是空闲块
    • 操作:直接把空闲块分配给进程,无需移动 / 交换
    • 优点:开销小,效率高
  2. 进程重定位 / 交换
    • 进程重定位:把进程整体移动到内存中一个足够大的空闲区域(需要动态重定位硬件支持)
    • 进程交换:把相邻的进程换出到磁盘,释放连续空闲区给目标进程(需要 I/O 操作,开销大)
  3. 挂起 / 终止进程
    • 挂起进程:将进程置于挂起状态,等待内存资源释放(进程被换出到磁盘)
    • 终止进程:直接结束进程,释放内存资源(极端情况才用)

六、进程增长预留

核心思想 进程创建 / 换入内存时,预留额外的内存空间,应对未来数据段 / 栈的增长需求,减少频繁交换 / 移动带来的开销。

交换进程时,不需要把预留的增长空间也换出,只换出实际使用的内存页,减少 I/O 开销。

空闲内存管理

考研主要考两种方法:位图(Bitmap)空闲链表(Free Lists)

image-20260616143823172

1. 位图(Bitmap)

原理

  • 把内存划分成一个个固定大小的分配单元(比如 4B、16B、1KB),每个单元对应位图中的 1 位。
  • 0表示空闲,1表示已占用(也可以反过来)

关键考点

  • 空间开销:分配单元越小,位图需要的位数越多。
  • 优点:实现简单,内存占用小。
  • 缺点
    • 分配内存时,需要遍历位图找连续的 0 位,效率低
    • 如果进程大小不是分配单元的整数倍,最后一个单元会产生内部碎片

2. 空闲链表(Free Lists)

原理

  • 用链表把内存中的空闲块和已占用块串起来,每个节点记录:
    • 类型(空闲 / 进程)
    • 块的长度
    • 指向下一个节点的指针
  • 通常按内存地址顺序排列链表,方便合并相邻空闲块。

关键考点:进程回收时的四种合并情况(考研超高频)

当进程 X 终止释放内存时,要检查它和前后块的相邻情况,合并相邻空闲块,减少碎片:

  1. 前后都是进程:直接把 X 标记为空闲块,插入链表。
  2. 前进程,后空闲:和后面的空闲块合并。
  3. 前空闲,后进程:和前面的空闲块合并。
  4. 前后都是空闲:和前后两个空闲块合并成一个大空闲块。

优点

  • 动态灵活,不需要预先划分固定单元,无内部碎片(分配多少用多少)。
  • 合并空闲块方便,减少外部碎片。

缺点

  • 链表本身有额外开销(每个节点的类型、长度、指针)。
  • 分配内存时需要遍历链表,效率不如位图。

基于空闲链表,操作系统会用不同的策略给进程分配空闲块,核心是这四种

算法核心规则优点缺点考研重点
首次适配(First Fit)从链表头开始找,找到第一个足够大的空闲块分配速度快,一旦找到就停止;内存碎片分布均匀,大空闲块保留在后面容易在链表前部留下小碎片,后续分配效率下降算法流程、优缺点对比
下次适配(Next Fit)上次分配结束的位置开始往后找,不再从头开始避免重复遍历前面的块,减少重复搜索容易错过链表前部的大空闲块,导致大碎片被浪费;性能通常不如首次适配与首次适配的区别、性能对比
最佳适配(Best Fit)遍历整个链表,找能装下进程的最小空闲块分配的块大小最匹配,内存利用率高产生大量微小碎片(外部碎片),后续无法利用;遍历整个链表,效率低核心缺陷(小碎片问题)、与最差适配对比
最差适配(Worst Fit)遍历整个链表,找能装下进程的最大空闲块分配后剩余的块较大,不容易形成微小碎片破坏大空闲块,后续大进程可能无法分配;同样需要遍历链表,效率低核心缺陷(大空闲块被破坏)、与最佳适配对比

优化算法:快速适配(Quick Fit) 核心思想

  • 为不同大小的空闲块,维护多个独立的链表(比如 4KB、8KB、16KB 各一个链表)。
  • 分配时,直接根据进程大小找对应链表,快速取出空闲块,无需遍历整个链表。

虚拟地址

核心思路:不用把整个程序放进内存,只放当下正在用的一小段,暂时不用的存在硬盘。

给每个程序单独分配一套专属地址(虚拟地址)

核心硬件:MMU 内存管理单元

image-20260616153929681

基本流程

1 CPU 执行代码,输出虚拟地址,发给 MMU(专门做地址转换的硬件);
2 MMU 查页表,把虚拟地址翻译成真实物理地址;
3 MMU 把翻译好的物理地址发到总线,访问内存;
4 如果 MMU 发现这个虚拟地址对应的内容不在内存里 → 触发缺页中断,交给操作系统处理。

分页

image-20260616172104653

把程序的虚拟地址空间,切成固定大小的小块,每一块叫

物理内存也切成一模一样大小的块,叫页框 / 物理页框

规定:页的大小一定是 2 的 n 次方(4KB、8KB、16KB 这种),方便硬件快速计算。 12为 2^12=4kb

image-20260616154343983

虚拟地址 = 高位【页号】 + 低位【页内偏移】

页内偏移:表示在这一页内部,第几个字节,虚实转换全程不变

页号:用来去页表里查,这个虚拟页存在内存哪一个物理页框。

图里面 页表有16个  2^4=16 所以页号占用4位 
页面大小也就是偏移量 2^12=4096B

页表

image-20260616160200549

页表是每个进程独立拥有的数组结构,虚拟页号 = 数组下标,一条数组元素 = 一个页表项

页表本身存放在物理内存

每个程序一张页表,表格每一行对应一个虚拟页,记录两条关键信息:

  1. 在 / 不在位(有效位):0 = 页面在硬盘,不在内存;1 = 页面在内存,后面跟着物理页框号;
  2. 物理页框号:如果页面在内存,MMU 拿这个编号拼接偏移,得到最终物理地址。

页表项结构

image-20260616155808645

字段别名取值含义
页框号PFN十进制 / 二进制编号
在 / 不在位有效位 Present1 = 页面在内存;0 = 缺页
修改位脏位 Dirty1 = 页面被写过;0 = 只读未修改
访问位引用位 Referenced1 = 近期访问过;0 = 长期未访问
保护位读写权限位读 / 写 / 执行权限标记
高速缓存禁止位辅存地址位1 = 禁用 CPU 缓存;0 = 允许缓存
禁止位保留位系统预留
脏位:减少不必要磁盘写操作;
访问位:辅助页面置换,降低缺页率;
缓存禁止位:保证硬件 I/O 数据实时准确

缺页中断完整全过程

场景:程序执行 MOV REG,32780,虚拟地址 32780 对应的页表条目在 / 不在位 = 0

第一步:硬件操作(MMU)

MMU 检测有效位为 0,立刻触发缺页中断,暂停 CPU,把控制权交给操作系统。

第二步:操作系统内核 5 步处理(软件)

1淘汰一页:找当前内存里最少使用的物理页框;
如果淘汰的页面修改过(脏页),先把内容写回硬盘;没修改过直接覆盖;
2读入缺失页面:从硬盘把虚拟页 8,读到刚腾出来的物理页框;
3更新旧页表:刚才被淘汰的虚拟页,有效位改成 0;
4更新当前页表:虚拟页 8 条目,有效位改成 1,填入新物理页框号;
5返回 CPU:操作系统结束中断,CPU 重新执行刚才失败的 MOV 指令,这次 MMU 就能正常翻译地址。

概念类重点

页:虚拟地址空间分块;页框:物理内存分块,二者大小完全相等

虚拟地址:程序看见的地址;物理地址:内存真实硬件地址;

MMU:硬件,唯一作用:虚拟地址→物理地址转换,检测缺页;

页表:操作系统维护的数据结构,保存虚拟页→物理页框映射;

缺页中断:硬件触发的故障异常,页面不在内存时发生,处理完重新执行指令

页大小必须是 2 的整数次幂:硬件不用做除法,直接截取二进制低位当偏移,速度快。

加速分页

1.为什么需要 TLB

痛点 1:地址转换效率极低

无优化分页访存流程:一次 CPU 访存 = 两次物理内存访问

  1. 第一次读内存:读取页表项,完成虚拟→物理地址映射;

  2. 第二次读内存:访问目标数据 / 指令。

    现代 CPU 单条指令执行仅 1ns,页表查询必须控制在 0.2ns 内;两次内存访问直接将内存性能腰斩,成为系统瓶颈,必须优化。

痛点 2:页表规模爆炸

32 位虚拟地址、4KB 页:约 100 万条页表项;

64 位虚拟地址页面数量几乎不可估量。

完整页表常驻内存开销极大,进程切换时重载整个页表会严重掉性能。

2. TLB 基础概念

  1. 全称:Translation Lookaside Buffer,别名**快表、地址翻译缓存、相联存储器 ** 页表高速缓存;
  2. 硬件位置:集成在 MMU 内存管理单元内部,处于 CPU 与内存缓存之间;
  3. 设计原理:依托程序局部性原理(程序只会频繁访问少量页面),缓存近期高频使用的「虚拟页号→物理页框」映射(页表项 PTE);
  4. 核心价值:命中 TLB 时仅需1 次内存访问,消除两次访存的性能损耗。

3. TLB 表项结构

TLB 每条表项完整复制页表项全部标记:

有效位、虚拟页面号、修改位(脏位)、保护位、访问位、高速缓存禁止位、页框号。

  • 虚拟页号:TLB 匹配检索的唯一标识;
  • 保护位:校验读写 / 执行权限,非法访问触发保护异常;
  • 修改位:页面写入时同步更新,淘汰 TLB 条目时同步写回内存页表。

4. 硬件 TLB 完整访存流程

image-20260616161935348

页表是存放在内存里的 “完整字典”,TLB 是 CPU 芯片里的 “高频单词小抄”。查单词先看小抄,有就直接用;没有再翻厚厚的字典,同时把单词抄到小抄上。

TLB 命中判断两个必要条件:①虚拟页号完全匹配;②有效位为 1;③访问操作符合保护位权限。

5.两种 TLB 失效类型

失效分类关键区分:有无磁盘 IO,无 IO = 软失效,有磁盘读 = 硬失效(本质就是缺页中断)

失效类型触发条件处理流程速度
软失效(Soft Miss)页面已在物理内存,仅映射未缓存进 TLB仅内存操作,OS 从内存页表读取 PTE 写入 TLB,无磁盘 IO极快(纳秒级)
硬失效(Hard Miss)页面既不在 TLB,也不在物理内存触发缺页中断,磁盘 IO 读页面进内存,更新页表后写入 TLB极慢(毫秒级,百万倍耗时)

6.TLB 条目淘汰策略

TLB 硬件容量有限,新增映射时必须淘汰旧条目,通用策略LRU(最近最少使用):淘汰最久未访问的页面映射,降低后续再次失效概率;淘汰时同步将 TLB 内修改位同步更新至内存页表。

针对大内存的页表

多级页表

计算题

级页表本身必须完整存放在1 个物理页面内,不能跨页存储 。 当前不需要的页表先放在磁盘

image-20260616171048729

多级页表缺点

无 TLB 命中时,n 级页表需要 n 次额外内存访问:二级页表需要 2 次内存读页表,三级页表需要 3 次,访存延迟更高。

倒排页表(了解)

image-20260617111053108

哈希 最简单理解就是对下标取模

传统单层 / 多级页表:1 个虚拟页对应 1 条页表项,页表长度 = 进程虚拟页面总数;

倒排页表:1 个物理页框对应 1 条页表项,页表长度 = 机器物理内存总页框数,和虚拟地址空间大小无关。

每条条目存储:

  1. 虚拟页号 + 进程 ID:唯一标识某进程的某虚拟页;
  2. 控制位:有效位、访问位、修改位、保护位;
  3. 链表指针:哈希冲突时,链接同哈希值的其他页表项。

页面置换算法

置换的是内存中的物理页面(页框

置换的原因 物理内存容量有限 发生缺页异常 内存无空闲页框

最优页面置换算法 OPT

  1. 核心原理

缺页中断发生时,预测内存中每个页面未来多久才会被访问,淘汰未来最久才用到 / 永远不会再访问的页面,最大限度减少缺页次数。

  1. 关键特点
  • 理论性能天花板,缺页中断次数最少;

  • 无法实际实现:操作系统不能提前预知程序未来的页面访问序列,仅作为衡量其他算法好坏的理论标杆。

    1. 适用场景

仅用于理论分析

NRU 最近未使用置换算法

image-20260617141647741

  1. 前置基础:页面两个标记位 每个页表项维护 2 个标志位:
  • R 位(访问位):页面被读写访问时置 1;时钟周期定时清零所有页面 R 位;
  • M 位(修改位 / 脏位):页面内容被修改写入数据时置 1,代表页面和磁盘副本不一致,置换时需要写回磁盘。
  1. 页面四分类(按 R、M 组合),置换优先级从高到低(先淘汰靠前类别)

0 类:R=0,M=0 → 很久没访问、未修改(优先淘汰)

1 类:R=0,M=1 → 很久没访问、已修改

2 类:R=1,M=0 → 近期访问、未修改

3 类:R=1,M=1 → 近期访问、已修改(最后淘汰)

  1. 执行流程

缺页时,从编号最小的非空分类里随机选一页淘汰;先找 0 类,没有就找 1 类,依次类推。

  1. 优缺点
  • 优点:逻辑简单、开销低,不用记录页面进入顺序,只靠两个标记位分类;
  • 缺点:同一类内随机淘汰,无法区分页面闲置时长;定时清零 R 位会带来少量系统开销。

FIFO 先进先出置换算法

image-20260617143458877

  1. 核心原理

维护一条链表记录内存页面,按页面进入内存的先后顺序管理

  • 链表头部:最早载入内存的页面;链表尾部:最新载入;

  • 缺页且内存占满时,直接淘汰链表头部最早进入的页面;新页面插入链表尾部。

    1. 核心缺陷:Belady 异常(贝尔迪怪象)

分配更多物理页框时,缺页次数反而增多,性能不稳定;会无差别淘汰早期载入、但高频使用的页面。

  1. 优缺点
  • 优点:实现极简,只维护链表,无额外硬件标记需求;
  • 缺点:完全不考虑页面近期访问情况,经常淘汰热点页面,存在 Belady 异常,缓存命中率差。

第二次机会算法

image-20260617143910350

  1. 设计目的:修复 FIFO 的缺陷

FIFO 不区分页面是否被访问,会误删常用页面;第二次机会基于 FIFO 改造,引入R 访问位给页面 “二次存活机会”。

  1. 执行逻辑

    缺页淘汰时,从链表最老页面(表头)开始检查它的 R 位;

    若 R=0:页面长期未访问,直接淘汰;

    若 R=1:页面近期用过,给它第二次机会 —— 清零 R 位,移到链表尾部(模拟刚载入),继续检查下一个最老页面;

    循环直到找到 R=0 的页面淘汰。

  2. 时钟 Clock 算法(简化版第二次机会)

把链表改成环形循环队列 + 一个扫描指针,不用频繁移动页面,指针循环转圈检查页面 R 位,大幅降低内存移动开销,是操作系统实际最常用的实现。

  1. 优缺点
  • 优点:保留 FIFO 简单特性,同时规避热点页面被错误置换,无严重 Belady 异常;时钟版本性能、开销均衡;
  • 缺点:最坏情况所有页面 R 位全为 1 时,会退化成纯 FIFO,需要遍历全部页面。

时钟页面置换算法

image-20260617144012959

最近最少使用页面置换算法LRU

  1. 核心思想

局部性原理:很久没访问的页面,未来大概率也不会访问;近期频繁访问的页面,短期内还会用到。缺页时淘汰最长时间未被访问的页面。

  1. 两种硬件 / 软件实现方案

    1 双向链表实现(软件模拟)

    这个图里面的也叫 老化算法

    image-20260617145621337

    • 链表表头:最近刚访问的页面;表尾:最久未使用页面
    • 页面被访问:从原位置删除,移动到表头;缺页淘汰表尾页面
    • 缺点:每次访问都要遍历链表调整顺序,开销大,纯软件效率低

    2 计数器硬件实现(主流硬件方案)

    • 全局 64 位自增计数器,每条指令执行后 + 1;每个页表项保存访问时的计数值
    • 缺页时扫描所有页表,计数值最小的页面 = 最久未访问,直接淘汰
    • 局限:计数器位数有限,长时间高频访问后数值差距过小,无法精准区分闲置时长;多进程需独立计数器隔离
  2. 优缺点

✅ 优点:性能接近最优 OPT 算法,无 Belady 异常,缓存命中率高

⚠️ 缺点:完整 LRU 依赖专用硬件,纯软件实现开销极高,真实系统极少完整实现;工程上多用近似 LRU(NRU、时钟、二次机会)替代

工作集页面置换算法

是集合 要记住

  1. 前置核心概念

    局部性原理:程序运行只频繁访问一小部分页面,该集合称为工作集 w (k,t)

    • w (k,t):过去 k 次访问 / 时间 t 内进程访问过的全部页面

    • 特性:k 增大时,工作集先快速扩张,后趋于稳定;内存不足、频繁换页称为**颠簸 **

    • 请求调页 + 预先调页

    • 请求调页:缺页中断才加载页面,启动初期缺页多

    • 预先调页:进程运行前把完整工作集提前载入内存,大幅减少缺页

  2. 页表关键标记

  3. image-20260617151349572

每个页表项保存:R 访问位、上次使用时间;定时时钟周期清零所有页面 R 位

  1. 置换淘汰逻辑(缺页时扫描全部页表)

    扫描页面 R 位:

    • R=1:本周期访问过,属于工作集,更新「上次使用时间」为当前系统时间,不淘汰
    • R=0:本周期未访问,计算页面生存时长 = 当前时间 - 上次使用时间

    分情况决策:

    • 生存时长 > 阈值 t:页面已脱离工作集,优先标记为淘汰候选
    • 生存时长 ≤ 阈值 t:仍属于工作集,保留

    兜底策略:

    • 存在多个 R=0 且超时页面:淘汰生存时间最长的
    • 全部页面 R=1(都在工作集):随机淘汰一页,优先选未修改(M=0)干净页,减少写盘 IO
  2. 优缺点

✅ 优点:精准识别进程工作集,从根源避免颠簸,多道程序环境内存利用率高

⚠️ 缺点:缺页时需要完整遍历所有页表,扫描开销大,性能损耗明显

工作集时钟置换算法

image-20260617151518549

  1. 设计目的

优化原版工作集算法「全页表扫描」的低效问题,结合时钟环形指针+ 工作集阈值 t,是工程落地版本。

  1. 核心机制
  • 存储结构:环形循环页框链表 + 单一循环扫描指针(时钟指针),无需遍历全部页表
  • 判定逻辑同时满足两套规则:
    1. 时钟规则:检查 R 访问位,R=1 则清零 R 位,指针下移,给页面二次机会

    2. 工作集规则:R=0 时计算页面生存时长,超过阈值 t 直接淘汰

    3. 优缺点

✅ 优点:规避全页表扫描,开销远低于原版工作集;兼顾时钟算法高效性与工作集防颠簸能力,现代操作系统广泛使用

⚠️ 缺点:需要维护时间阈值 t,参数调优会影响置换效果

页面置换算法小结

image-20260617150652054

image-20260617150832414

总之,最好的算法是老化算法和WSClock算法。他们分别是基于 LRU 和工作集算法。他们都具有 良好的性能并且能够被有效的实现。还存在其他一些好的算法,但实际上这两个可能是最重要的

习题

1

image-20260618164258069

image-20260618162840349

![84b797a8586f617ee469f322c6485b78_720](操作系统_内存管理.assets/84b797a8586f617ee469f322c6485b78_720.jpg

完整理由

  1. 页面 4KB,偏移占 3 位十六进制,(1565\mathrm{H}) 页号 1、偏移(565\mathrm{H});
  2. 初始页 1 不在内存,缺页;驻留集大小为 2,当前内存有页 0、页 2;
  3. LRU 算法淘汰最久未访问的页 0,页 0 占用页框(101\mathrm{H});
  4. 页 1 被装入页框(101\mathrm{H});
  5. 物理地址 = 页框号拼接页内偏移 = (101\mathrm{H}565\mathrm{H} = 101565\mathrm{H})。

image-20260618164446261

2

image-20260618164320130

image-20260618164516234

附录

本次学习3.5章节的代码没有实现

习题 只看了前两题

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐