计算机操作系统23

第二十三课:内存管理基础


一、为什么需要内存管理?

我们先回到计算机最基本结构。

一个程序:

比如:

复制代码
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

1003

CPU:

通过地址:

找到数据。


六、逻辑地址和物理地址(★★★★★)

这是内存管理第一个重点。


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. 两种碎片

类型 特点
内部碎片 分配空间过大
外部碎片 空闲空间不连续
相关推荐
一只鹿鹿鹿1 天前
面向智能制造的 RPA 业务自动化整体解决方案(PPT)
大数据·安全·架构·系统安全·制造
Web3李李2 天前
读懂跨链安全:如何判断跨链消息风险,规避协议攻击陷阱
web3·区块链·系统安全·软件开发·web3开发·跨链安全·协议攻击
是逍遥子没错4 天前
一个斜杠,击穿整座网关:API网关路径前缀绕过认证实战
运维·服务器·web安全·网络安全·渗透测试·系统安全
是程不是序4 天前
信创终端安全管理怎么落地?纳管、控权、护数据三段走
运维·网络·安全·电脑·系统安全
Chengbei116 天前
红队新工具 ToShell 解析:自带 Web 控制台,AES+SM4 国密加密,载荷随机免杀,自主 Agent 自动完成渗透任务
人工智能·tcp/ip·安全·web安全·http·网络安全·系统安全
一只鹿鹿鹿7 天前
信息网络安全建设方案(PPT文件)
大数据·安全·web安全·系统安全·制造
HackTwoHub8 天前
AI自动化信息收集赋能渗透测试!集成多款主流扫描工具,多维智能评分,精准锁定高危资产
运维·人工智能·安全·web安全·网络安全·自动化·系统安全
智购科技自动贩卖机9 天前
自动售货机嵌入式系统安全加固实践:从Go语言国密算法到硬件防拆的工程化落地
大数据·人工智能·后端·安全·golang·系统安全
技术不好的崎鸣同学11 天前
第一章:PEB结构解析与内存定位
windows·安全·系统安全
一只鹿鹿鹿13 天前
水利信息化建设项目物联网(视频监控系统)施工方案(Word)
物联网·安全·web安全·系统安全