参考教材:《操作系统——精髓与设计原理》(第八版)
chp7内存管理
简答
*一&三、内存分区的七种方法&关系&异同
操作系统内存管理——分区、页式、段式管理 - 皇问天 - 博客园 (cnblogs.com)
item | 描述 | 优点 | 缺点 |
---|---|---|---|
固定分区 | 把内存划分为若干个固定大小的连续分区。分区大小可等可不等。 | 易于实现,开销小。 | 内部碎片造成浪费; 分区总数固定,限制了并发执行的程序数目。 |
动态分区 | 进程装入内存时,系统会给它分配一块与其所需容量完全相等的内存空间 | 没有内部碎片 | 有外部碎片; 只能是连续分配 |
简单分页 | 将内存和进程都划分为大小固定且相等的块。程序加载时,可将任意一页放入内存中任意一个页框,这些页框不必连续,从而实现了离散分配。 | 进程最后一页的一部分可能形成内部碎片; 不必连续存放 |
要求程序全部装入内存,没有足够的内存,程序就不能执行。 |
简单分段 | 将程序的地址空间划分为若干个段;进程中的各个段可以不连续地存放在内存的不同分区中 | 没有内碎片,外碎片可以通过内存紧缩来消除;便于实现内存共享。 | 与页式存储管理的缺点相同,进程必须全部装入内存 |
虚存分页 | 将虚拟内存和物理内存划分为固定大小的页;虚拟地址与物理地址之间通过页表来映射 | 消除外部碎片; 在加载程序的时候,不再需要一次性都把程序加载到物理内存中,提高了并发的进程数 |
内部碎片; 页表占内存; 对程序员不可见 |
虚存分段 | 段的大小不等且是动态的;通过段表实现地址转换 | 对程序员可见; 能够处理不断增长的数据结构; 支持共享和保护 |
外部碎片; 内存交换的效率低 |
段页式 | 用户的地址空间被程序员划分为许多段,每段划分为固定大小的页。 | 增加了硬件成本和系统开销 | 提高了内存的利用率 |
比较分页分段:P224 表8.2
二、段表&页表
页表
虚拟地址=页号+偏移量
物理地址=页框号+偏移量
段表
段表项包括段号+段长+基址
四、动态分区(放置)算法
- 首次适配:按地址递增次序链接,顺序查找
- 空闲分区表
- 空闲分区链
- 最佳适配:按容量递增次序链接,顺序查找
- 下次(邻近)适配:每次从上次查找结束的位置开始检索
- 循环链表
选择
- 逻辑地址是对内存位置的引用,独立于实际位置(物理地址)
- 覆盖Overlay:将程序和数据组织起来,使不同的模块分配到同一内存区域
- 共享:进程间通信或共享模块
- 保护:未经允许进程不能引用其他进程的内存地址
- 重定向:发生在load、run
- 分页-内部碎片,分段-外部碎片
chp8虚拟内存
简答
一、缺页异常的处理
即页面置换算法?页面置换算法详解 - Leophen - 博客园 (cnblogs.com)
item | 描述 | 优点 | 缺点 |
---|---|---|---|
FIFO | 先入先出 | 简单 | 性能不总是好 |
OPT | 最佳置换算法。置换下次访问时间距离当下最久的。 | 缺页中断率最低 | 要求操作系统必须知道将来的时间,因此不可能实现。 |
LRU | 最近最少使用。置换最近最长时间未访问过的页面。 | 性能较好 | 难以实现(开销大) |
Clock | 时钟置换算法。页面替换后移动指针。 |
二、虚拟内存的意义
- 在有限的内存中运行足够大的程序
- 支持更有效的系统并发度
- 解除用户与内存之间没有必要的紧密约束
*三、驻留集管理
item | 描述 | 优点 | 缺点 |
---|---|---|---|
固定分配+局部置换 | 分配给进程的页框数固定; | 总页数分配少时会产生很高的缺页率; 分配过多,内存中只能有很少的几个程序 |
|
可变分配+全局置换 | 从内存中的所有可用页框中选择被置换的页 | 最容易实现;有助于减少系统中的缺页中断总量 | 难以选择置换页 |
可变分配+局部置换 | 从产生缺页中断的进程的驻留集中选择置换页 | 性能好 | 评估复杂 |
选择
- 内存管理设计取决于
- 是否使用虚拟内存技术
- 使用分段/分页/段页式
- 采用的策略算法
- 抖动:处理器花费大量时间换入换出进程的页或段,而不是执行指令
- 加载控制:决定驻留在主存中的进程数
- 分段系统中实现共享:在两个及以上的进程中引用段表中的同一个段
- 段页式:先分段再分页
- 局部替换策略:发生页面错误时,仅在进程驻留的页面中选择页去替换
others
虚拟分页
虚拟页表项
页表项:
- 存在位P:用于指示该页是否已调入内存;
- 修改位M(modify):表示该页在调入内存后是否被修改过;
- Page number作为索引,不在页表项内
缺页异常
发生在查询页表时,页号没有对应的页框号,即对应数据还未加载到内存
*段页式地址转换
- 根据逻辑地址得到段号、页号、偏移量
- 判断段号是否越界(段表)
- 查询段表,找到对应的段表项,得到页号;
- 检查页号是否越界(页号)
- 查询页表,找到对应页表项,得到页框号;
- 根据页框号和偏移量得到物理地址