第二十三课:内存管理基础
一、为什么需要内存管理?
我们先回到计算机最基本结构。
一个程序:
比如:
QQ.exe 浏览器.exe 游戏.exe它们存放在哪里?
答案:
硬盘。
例如:
硬盘 ↓ 程序文件但是:
CPU不能直接运行硬盘里的程序。
为什么?
因为:
硬盘速度太慢。
CPU速度:
非常快。
如果CPU每次执行:
都去硬盘找数据。
整个计算机:
会慢到无法使用。
所以:
程序运行时:
必须:
进入:
内存(Memory)
流程:
硬盘 ↓ 加载 ↓ 内存 ↓ CPU执行二、什么是内存?
这里说的内存:
主要指:
主存(Main Memory)
也就是:
我们平时说的:
RAM。
例如:
电脑:
8GB内存。
16GB内存。
32GB内存。
内存:
可以理解为:
CPU旁边的工作桌。
举个例子:
你的房间:
仓库 = 硬盘 书桌 = 内存 你 = CPU你学习:
不会:
每看一个字:
跑仓库拿书。
你会:
先:
把书放桌子。
然后:
直接看。
三、为什么需要管理?
问题来了。
假设:
你的电脑:
内存:
只有:
8GB但是:
你同时打开:
浏览器:
3GB游戏:
6GB视频软件:
2GB总共:
11GB超过:
8GB。
怎么办?
操作系统:
必须:
管理内存。
包括:
1. 分配
谁:
使用:
哪一块内存。
2. 回收
程序关闭后:
释放:
内存。
3. 保护
一个程序:
不能:
随便:
访问:
另一个程序:
的数据。
4. 扩充
让程序:
感觉:
自己拥有:
更大的内存。
这就是:
虚拟内存。
四、程序如何进入内存?
我们先理解:
程序:
不是:
一整块搬进去。
例如:
一个程序:
结构:
程序 ├── 代码段 │ ├── 数据段 │ ├── 堆 │ └── 栈运行时:
这些部分:
需要:
放入内存。
简单理解:
程序:
像一本书。
内存:
像书桌。
操作系统:
负责:
安排:
这本书:
怎么摆放。
五、地址是什么?
这是内存管理最核心概念。
CPU访问内存:
靠:
地址。
例如:
内存:
像酒店。
每个房间:
有编号。
1号房 2号房 3号房 4号房这个编号:
就是:
地址。
计算机:
也是:
类似。
内存:
被划分:
很多存储单元。
每个单元:
有:
唯一编号。
例如:
1000 1001 1002 1003CPU:
通过地址:
找到数据。
六、逻辑地址和物理地址(★★★★★)
这是内存管理第一个重点。
1. 物理地址(Physical Address)
什么意思?
真正:
在内存里的地址。
例如:
真实内存:
0x1000 0x1001 0x1002这个:
叫:
物理地址。
2. 逻辑地址(Logical Address)
也叫:
虚拟地址。
是:
程序自己看到的地址。
例如:
程序A:
认为:
自己的数据:
在:
100号位置程序B:
也认为:
自己的数据:
在:
100号位置冲突吗?
不会。
为什么?
因为:
这是:
逻辑地址。
操作系统:
负责:
转换。
过程:
CPU产生逻辑地址 ↓ 地址转换 ↓ 真实物理地址 ↓ 访问内存七、为什么需要逻辑地址?
如果:
没有逻辑地址。
程序:
直接使用:
物理地址。
会怎样?
假设:
程序A:
写:
100号地址。
程序B:
也写:
100号地址。
怎么办?
数据:
全部乱掉。
所以:
现代操作系统:
让每个程序:
拥有:
自己的地址空间。
八、什么是地址空间?
一个程序:
能看到的:
地址范围。
叫:
地址空间。
例如:
程序A:
看到:
0~9999程序B:
也看到:
0~9999但是:
实际:
对应:
不同:
物理位置。
例如:
程序A 逻辑100 ↓ 物理5000 程序B 逻辑100 ↓ 物理8000两个程序:
互不影响。
九、内存管理的发展历史
操作系统:
一步一步:
发展。
第一阶段:单道程序
最简单。
内存:
一次:
只有:
一个程序。
例如:
内存: 系统 程序A问题:
资源浪费。
第二阶段:固定分区
把内存:
提前:
切成:
几个区域。
例如:
内存 -------------- 系统 -------------- 区域1 -------------- 区域2 -------------- 区域3每个程序:
占一个区域。
问题:
产生:
内部碎片。
第三阶段:动态分区
程序来了:
再分配。
例如:
程序A:
需要:
10MB。
就:
给:
10MB。
问题:
产生:
外部碎片。
第四阶段:
分页。
这是:
现代操作系统:
核心。
后面:
重点学习。
十、碎片是什么?
考试:
常考。
内部碎片
什么意思?
分给你的空间:
比你需要的大。
多出来:
浪费。
例子:
一个盒子:
10厘米。
你只有:
7厘米东西。
剩余:
3厘米:
无法利用。
这叫:
内部碎片。
外部碎片
什么意思?
空闲空间:
很多。
但是:
不连续。
无法使用。
例如:
内存:
已用 空 已用 空 已用 空虽然:
总空闲:
很多。
但是:
没有:
连续大空间。
十一、本课核心总结
今天先掌握:
1. 为什么需要内存管理?
因为:
- 程序需要进入内存运行。
- 多程序同时运行需要协调。
- 防止程序互相影响。
2. 两种地址
| 地址 | 含义 |
|---|---|
| 逻辑地址 | 程序看到的地址 |
| 物理地址 | 内存真实地址 |
关系:
逻辑地址 ↓ 地址转换 ↓ 物理地址3. 内存管理任务
四个:
分配 回收 保护 扩充4. 两种碎片
| 类型 | 特点 |
|---|---|
| 内部碎片 | 分配空间过大 |
| 外部碎片 | 空闲空间不连续 |