目录
什么是内存管理
内存管理需要做四件事
内存空间的分配与回收
内存空间的扩展
地址转换
内存保护
操作系统需要提供内存保护功能。保证各进程在各自存储空间内运行,互不干扰。
小结
逻辑地址转成物理地址的基本思路
内存的更多基础知识可学习计算机组成原理,此处仅记录操作系统相关内容
指令的工作原理
因为指令不能总是存放在0开始的内存空间,所以程序中不能直接使用物理地址。
重要概念:逻辑地址
如果装入模块装入内存时起始地址不是0
所以,如何将指令中的逻辑地址转换成物理地址呢?
编译链接后得到的是逻辑地址,但是要装入的是实际的物理地址。
那么,怎么才能使得装入时能定位到实际地址呢?
绝对装入
静态重定位
动态重定位
补充:从写程序到程序运行
其实链接也有三种方式
静态链接
装入时动态链接
运行时动态链接
小结
内存空间的扩充
覆盖技术
交换技术
小结
内存空间的分配与回收
连续分配:指为用户进程分配的必须是一个连续的内存空间。
单一连续分配
固定分区分配
动态分区分配
动态分区分配时会动态更新空闲分区表
内存回收的四种情况
小结
动态分区分配算法
首次适应算法
最佳适应算法
最坏适应算法
邻近适应算法
小结
上面讲的几种都是连续内存分配;
接下来讲离散内存分配;
二者地址转换的思路是类似的,只是离散内存分配时的地址转换中间多了一些计算。
分页存储管理
页表
总结的内容:
具体计算过程直接参考:
3.1_6_基本分页存储管理的概念_哔哩哔哩_bilibili
注意,地址变换机构指的是硬件实现。
3.1_8_具有快表的地址变换机构_哔哩哔哩_bilibili
快表也是一种硬件实现。
引入快表后的地址变换过程
能否把整个页表都放在快表中?
为什么快表的命中率通常能达到90%以上?
局部性原理
快表小结
两级页表
单级页表存在的问题
解决第一个问题
解决第二个问题
两级页表小结
分段存储管理
段名会被转成对应的段号
和页表类似,分段存储有一个段表
注意,分段是将进程分段,这里并不涉及将内存分段
地址变换过程
分页管理和分段管理的对比
分段管理小结
段页式管理方式
分段和分页存储管理的优缺点
结合二者的优缺点,就有了段页式管理
段页式的逻辑地址结构
段表和页表
逻辑地址到物理地址的转换过程
虚拟内存
传统存储管理方式的缺点
重新回顾局部性原理
虚拟内存的定义和特征
虚拟内存的三个主要特征
如何实现虚拟内存技术
![]()
小结
请求分页存储管理
页表机制
缺页中断机构
地址变换机构
页面置换算法
最佳置换算法
无法被实现
先进先出置换算法
该算法性能差
最近最久未使用置换算法
时钟置换算法
改进型的时钟置换算法
页面分配策略
页面分配和置换策略
附:
考虑一个极端情况,若某进程共有100个页面,则该进程的驻留集大小为100时进程可以全部放入内存,运行期间不可能再发生 缺页。若驻留集大小为1,则进 程运行期间必定会极频繁地缺页。
具体的三种分配策略
附:系统会锁定一些页面,这些页面中的内容不能置换出外存,比如重要的内核数据可以设为“锁定”。
何时调入页面
实际应用中,一般是二者的结合使用。
从何处调入页面
抖动现象
![]()
工作集
小结
内存映射文件
传统的文件访问方式
如果系统采用了内存映射
内存映射还能实现进程间的内存共享
小结