0%

OS-内存

参考教材:《操作系统——精髓与设计原理》(第八版)

chp7内存管理

简答

*一&三、内存分区的七种方法&关系&异同

操作系统内存管理——分区、页式、段式管理 - 皇问天 - 博客园 (cnblogs.com)

item 描述 优点 缺点
固定分区 把内存划分为若干个固定大小的连续分区。分区大小可等可不等。 易于实现,开销小。 内部碎片造成浪费;
分区总数固定,限制了并发执行的程序数目。
动态分区 进程装入内存时,系统会给它分配一块与其所需容量完全相等的内存空间 没有内部碎片 有外部碎片;
只能是连续分配
简单分页 将内存和进程都划分为大小固定且相等的块。程序加载时,可将任意一页放入内存中任意一个页框,这些页框不必连续,从而实现了离散分配。 进程最后一页的一部分可能形成内部碎片;
不必连续存放
要求程序全部装入内存,没有足够的内存,程序就不能执行。
简单分段 将程序的地址空间划分为若干个段;进程中的各个段可以不连续地存放在内存的不同分区中 没有内碎片,外碎片可以通过内存紧缩来消除;便于实现内存共享。 与页式存储管理的缺点相同,进程必须全部装入内存
虚存分页 将虚拟内存和物理内存划分为固定大小的页;虚拟地址与物理地址之间通过页表来映射 消除外部碎片;
在加载程序的时候,不再需要一次性都把程序加载到物理内存中,提高了并发的进程数
内部碎片;
页表占内存;
对程序员不可见
虚存分段 段的大小不等且是动态的;通过段表实现地址转换 对程序员可见;
能够处理不断增长的数据结构;
支持共享和保护
外部碎片;
内存交换的效率低
段页式 用户的地址空间被程序员划分为许多段,每段划分为固定大小的页。 增加了硬件成本和系统开销 提高了内存的利用率

比较分页分段:P224 表8.2

二、段表&页表

页表

虚拟地址=页号+偏移量

物理地址=页框号+偏移量

简单页表

段表

段表项包括段号+段长+基址

简单段表

四、动态分区(放置)算法

  • 首次适配:按地址递增次序链接,顺序查找
    • 空闲分区表
    • 空闲分区链
  • 最佳适配:按容量递增次序链接,顺序查找
  • 下次(邻近)适配:每次从上次查找结束的位置开始检索
    • 循环链表

选择

  • 逻辑地址是对内存位置的引用,独立于实际位置(物理地址)
  • 覆盖Overlay:将程序和数据组织起来,使不同的模块分配到同一内存区域
  • 共享:进程间通信或共享模块
  • 保护:未经允许进程不能引用其他进程的内存地址
  • 重定向:发生在load、run
  • 分页-内部碎片,分段-外部碎片

chp8虚拟内存

简答

一、缺页异常的处理

即页面置换算法?页面置换算法详解 - Leophen - 博客园 (cnblogs.com)

item 描述 优点 缺点
FIFO 先入先出 简单 性能不总是好
OPT 最佳置换算法。置换下次访问时间距离当下最久的。 缺页中断率最低 要求操作系统必须知道将来的时间,因此不可能实现。
LRU 最近最少使用。置换最近最长时间未访问过的页面。 性能较好 难以实现(开销大)
Clock 时钟置换算法。页面替换后移动指针。

二、虚拟内存的意义

  • 在有限的内存中运行足够大的程序
  • 支持更有效的系统并发度
  • 解除用户与内存之间没有必要的紧密约束

*三、驻留集管理

image-20220614162442678

item 描述 优点 缺点
固定分配+局部置换 分配给进程的页框数固定; 总页数分配少时会产生很高的缺页率;
分配过多,内存中只能有很少的几个程序
可变分配+全局置换 从内存中的所有可用页框中选择被置换的页 最容易实现;有助于减少系统中的缺页中断总量 难以选择置换页
可变分配+局部置换 从产生缺页中断的进程的驻留集中选择置换页 性能好 评估复杂

选择

  • 内存管理设计取决
    • 是否使用虚拟内存技术
    • 使用分段/分页/段页式
    • 采用的策略算法
  • 抖动:处理器花费大量时间换入换出进程的页或段,而不是执行指令
  • 加载控制:决定驻留在主存中的进程数
  • 分段系统中实现共享:在两个及以上的进程中引用段表中的同一个段
  • 段页式:先分段再分页
  • 局部替换策略:发生页面错误时,仅在进程驻留的页面中选择页去替换

others

虚拟分页

虚拟页表项

页表项:

image-20220622153743917

  • 存在位P:用于指示该页是否已调入内存;
  • 修改位M(modify):表示该页在调入内存后是否被修改过;
  • Page number作为索引,不在页表项内

缺页异常

发生在查询页表时,页号没有对应的页框号,即对应数据还未加载到内存

*段页式地址转换

img

  1. 根据逻辑地址得到段号、页号、偏移量
  2. 判断段号是否越界(段表)
  3. 查询段表,找到对应的段表项,得到页号
  4. 检查页号是否越界(页号)
  5. 查询页表,找到对应页表项,得到页框号
  6. 根据页框号和偏移量得到物理地址