第三章
主要内容:操作系统的物理内存管理
内存分层体系
运行内存(主存)、磁盘(虚拟内存),主存是运行程序时所需要保存数据的数据空间,磁盘是用于持久化数据的数据空间。
层次
寄存器
cache
主存
磁盘
内存管理目标
-
抽象:逻辑地址空间
-
保护:独立地址空间
-
共享:访问相同内存
-
虚拟:更多的地址空间
内存管理方法
-
程序重定位
-
分段
-
分页
-
虚拟内存
-
按需分页虚拟内存
地址空间
地址空间的定义
-
逻辑地址空间 - 一个运行的程序所拥有的内存范围
-
物理地址空间 - 硬件支持的地址空间
连续内存分配
内存碎片问题
内存碎片问题指的是空闲的内存无法被利用
-
外部碎片:分配
单元间
的未使用内存 -
内部碎片:分配
单元内
的未使用内存
分区的动态分配
分区的动态分配方式有以下三种:
-
首次分配:在内存中找到的第一块满足需求的内存空间,分配给应用程序
-
最优适配:在内存中找到满足需求的最小的内存空间,进行分配
-
最差适配:在内存中找到最大的空闲块,分配给应用程序
分配方式的区别
分配方式 | 第一匹配分配 | 最优适配分配 | 最差适配分配 |
---|---|---|---|
分配方式实现需求 | 1. 按地址排序的空闲块列表 2. 分配需要寻找一个合适的分区 3. 重分配需要检查是否可以合并相邻空闲分区 | 1. 按尺寸排序的空闲块列表 2. 分配需要寻找一个合适的分区 3. 重分配需要检查是否可以合并相邻空闲分区 | 1. 按尺寸排序的空闲块列表 2. 分配最大的分区 3. 重分配需要检查是否可以合并相邻空闲分区 |
优势 | 简单 / 易于产生更大空闲块 | 比较简单 / 大部分分配是小尺寸时高效 | 分配很快 / 大部分分配是中尺寸时高效 |
劣势 | 产生外部碎片 / 不确定性 | 产生外部碎片 / 重分配慢 / 产生很多没用的微小碎片 | 产生外部碎片 / 重分配慢 / 易于破碎大的空闲块以致大分区无法被分配 |
三种分配方式并无优劣之分,适用于不同的情况
碎片整理方法
三种分区动态分配的方式都会产生外部碎片,因此我们需要对碎片进行一定的整理来解决碎皮问题
-
压缩式碎片整理
-
重置程序以合并碎片
-
要求所有程序是动态可重置的
-
问题
-
何时重置?
-
内存拷贝开销问题
-
-
-
交换式碎片整理
-
运行程序需要更多的内存时,抢占等待的程序并且回收他们的内存
-
问题
-
那些程序应该被回收?
-
-