计算机操作系统24
第二十四课:连续内存分配
一、什么是连续内存分配?
先理解名字。
连续:
表示:
一个程序:
必须:
占用一整块连续的内存空间。
例如:
程序A:
需要:
100MB。
那么:
分配:
----------------
程序A 100MB
----------------
必须:
连续。
不能:
拆成:
50MB + 50MB。
早期操作系统:
主要采用:
连续分配。
二、最简单方式:单一连续分配
这是:
最早的方法。
思想:
非常简单:
内存只分给一个用户程序。
结构:
高地址
-------------
用户程序
-------------
操作系统
-------------
低地址
例如:
电脑:
内存:
8GB。
系统:
占:
1GB。
剩下:
7GB:
全部:
给当前程序。
优点
简单。
容易实现。
缺点
最大问题:
浪费。
例如:
一个程序:
只需要:
1GB。
但是:
系统给它:
7GB。
剩下:
6GB:
没人用。
所以:
这种方式:
现在基本不用。
三、固定分区分配
为了:
提高利用率。
操作系统:
把内存:
提前:
划分:
几个固定区域。
例如:
内存:
100MB。
分成:
----------------
系统 20MB
----------------
分区1 20MB
----------------
分区2 30MB
----------------
分区3 30MB
每个程序:
进入:
一个分区。
例如:
程序A:
需要:
15MB。
进入:
20MB分区。
程序B:
需要:
25MB。
进入:
30MB分区。
四、固定分区的问题
最大问题:
内部碎片。
例子:
分区:
大小:
100MB。
程序:
需要:
70MB。
系统:
给:
100MB。
那么:
剩余:
30MB。
但是:
这个30MB:
别人:
不能使用。
为什么?
因为:
分区已经:
属于:
这个程序。
这就是:
内部碎片。
五、动态分区分配(重点)
固定分区:
太死板。
于是:
出现:
动态分区。
思想:
程序需要多少,就分多少。
例如:
内存:
----------------
系统
----------------
空闲100MB
----------------
程序A 50MB
----------------
空闲200MB
来了:
程序B:
需要:
80MB。
系统:
找:
100MB空闲区。
分:
80MB。
变成:
----------------
程序B 80MB
----------------
剩余20MB
优点:
减少内部碎片。
但是:
产生:
新的问题。
六、外部碎片出现
假设:
内存:
如下:
程序A
空闲10MB
程序B
空闲20MB
程序C
空闲30MB
总空闲:
60MB。
现在:
来了:
程序D。
需要:
50MB。
能放吗?
不能。
为什么?
虽然:
总共有:
60MB。
但是:
没有:
连续50MB。
这就是:
外部碎片。
七、动态分区如何选择空间?
重点来了。
假设:
有多个空闲区域。
程序来了。
选择哪个?
操作系统:
有几种算法。
1. 首次适应算法(First Fit)★★★★★
英文:
First Fit。
思想:
从低地址开始找,第一个满足的空闲区。
例如:
空闲:
100MB
50MB
200MB
程序:
需要:
40MB。
从头找:
第一个:
100MB。
够。
于是:
放进去。
结果:
简单。
速度快。
缺点:
低地址:
容易:
产生很多小碎片。
口诀:
首次适应:第一个能放就放。
2. 最佳适应算法(Best Fit)★★★★★
思想:
找最小但够用的空闲区。
例如:
空闲:
100MB
50MB
200MB
程序:
需要:
40MB。
比较:
100:
剩60。
50:
剩10。
200:
剩160。
选择:
50MB。
优点:
减少大空间浪费。
缺点:
容易产生大量小碎片。
因为:
总是切小空间。
口诀:
最佳适应:留下最小剩余。
3. 最坏适应算法(Worst Fit)
思想:
总是选择最大的空闲区。
例如:
空闲:
100MB
50MB
200MB
程序:
需要:
40MB。
选择:
200MB。
剩:
160MB。
优点:
剩余空间较大。
缺点:
大空间容易被消耗。
口诀:
最坏适应:拿大块,留大块。
八、三个算法比较(★★★★★)
| 算法 | 选择方式 | 特点 |
|---|---|---|
| 首次适应 | 第一个满足 | 速度快 |
| 最佳适应 | 最小满足 | 碎片多 |
| 最坏适应 | 最大空间 | 浪费大空间 |
九、考试计算题怎么做?
典型题:
空闲区:
100KB
500KB
200KB
300KB
600KB
进程:
P1=212KB
P2=417KB
P3=112KB
P4=426KB
问:
使用首次适应:
如何分配?
步骤:
第一步
P1:
212KB。
从头找:
100:
不够。
500:
够。
分配。
第二步
P2:
417KB。
继续:
找:
剩余空间。
注意:
考试:
一定:
按照顺序模拟。
不能:
凭感觉。
十、连续分配总结
我们学了:
① 单一连续分配
特点:
一个程序。
简单。
浪费大。
② 固定分区
特点:
提前划分。
产生:
内部碎片。
③ 动态分区
特点:
按需分配。
产生:
外部碎片。
④ 三种算法
首次适应 First Fit
最佳适应 Best Fit
最坏适应 Worst Fit
十一、本课重点(★★★★★)
必须掌握:
连续分配:
一个程序占连续内存。
内部碎片:
分给你的比需要的大。
外部碎片:
空闲总量够,但不连续。
三个算法:
口诀:
首次找第一个,最佳找最小,最坏拿大块。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)