目录
- 一. 内存的基础知识
- 1.1. 什么是内存
- 1.2 指令的工作原理
- 1.2.1 装入的三种方式 - 绝对装入
- 1.2.2 可重定位装入
- 1.2.3 动态重定位装入
- 1.3 从写程序到程序运行
- 二. 基本内存管理的概念
- 三. 覆盖与交换
- 3.1 覆盖技术
- 3.2 交换技术
- 四. 连续分配管理方式
- 4.1 单一连续分配
- 4.2 固定分区分配
- 4.3 动态分区分配
- 五. 动态分区分配算法
- 5.1 首次适应算法(First Fit)
- 5.2 最佳适应算法(Best Fit)
- 5.3 最坏适应算法(Worst Fit)
- 5.4 邻近适应算法(Next Fit)
\quad
一. 内存的基础知识
\quad
1.1. 什么是内存
\quad
\quad
\quad
\quad
1.2 指令的工作原理
\quad
可见,我们写的代码要翻译成CPU能识别的指令。这些指令会告诉CPU应该去内存的哪个地址读/写数据,这个数据应该做什么样的处理。在这个例子中,我们默认让这个进程的相关内容从地址#O开始连续存放,指令中的地址参数直接给出了变量x的实际存放地址(物理地址)。
思考:如果这个进程不是从地址0开始存放的,会影响指令的正常执行吗?
\quad
\quad
\quad
1.2.1 装入的三种方式 - 绝对装入
\quad
\quad
1.2.2 可重定位装入
\quad
\quad
1.2.3 动态重定位装入
\quad
\quad
1.3 从写程序到程序运行
\quad
先链接后装入
\quad
边装入边链接
\quad
需要用到时才装入链接
\quad
二. 基本内存管理的概念
\quad
内存空间的分配与回收
\quad
三. 覆盖与交换
\quad
\quad
3.1 覆盖技术
\quad
\quad
调用顺序, A, B, C…
同一层, 比如: B和C不能同时调用
\quad
3.2 交换技术
\quad
\quad
\quad
\quad
四. 连续分配管理方式
\quad
\quad
4.1 单一连续分配
\quad
\quad
\quad
4.2 固定分区分配
\quad
\quad
4.3 动态分区分配
\quad
\quad
\quad
\quad
\quad
第一种情况(进来的比原来的小)
\quad
第二种情况(进来的和原来的相等)
\quad
五. 动态分区分配算法
\quad
\quad
5.1 首次适应算法(First Fit)
\quad
\quad
5.2 最佳适应算法(Best Fit)
\quad
缺点:每次都选最小的分区进行分配,会留下越来越多的、很小的、难以利用的内存块。因此这种方法会产生很多的外部碎片。
\quad
5.3 最坏适应算法(Worst Fit)
\quad
缺点:每次都选最大的分区进行分配,虽然可以让分配后留下的空闲区更大,更可用,但是这种方式会导致较大的连续空闲区被迅速用完。如果之后有“大进程”到达,就没有内存分区可用了
\quad
5.4 邻近适应算法(Next Fit)
\quad
首次适应算法每次都要从头查找,每次都需要检索低地址的小分区。但是这种规则也决定了当低地址部分有更小的分区可以满足需求时,会更有可能用到低地址部分的小分区,也会更有可能把高地址部分的大分区保留下来(最佳适应算法的优点)
邻近适应算法的规则可能会导致无论低地址、高地址部分的空闲分区都有相同的概率被使用,也就导致了高地址部分的大分区更可能被使用,划分为小分区,最后导致无大分区可用(最坏适应算法的缺点)
四种算法中,首次适应算法的效果反而更好