### 内存管理概述
我们知道操作系统实际上是分为内核态和用户态,而这里的存储管理实际上考虑的是对用户态的存储进行管理,从存储管理的目的出发,可以认为存储管理需要实现如下目标:
- 地址转换:即程序的逻辑地址与内存的物理地址的转换。
- 内存的分配与回收:即为进程分配内存并按一定的策略进行回收。
- 内存的地址保护:即让多个进程并行运行时不会影响其他进程。
- 内存的共享:允许多个程序同时使用存储器。
- 内存的扩充:即从逻辑上扩充内存,即实现小内存运行大程序。
### 理解程序的编译、连接与装入
由于计算机只能识别二进制数据,所以我们的程序需要由计算机(虚拟机)运行时,都需要将源程序经过编译的过程转换为二进制目标程序,然后将多个目标程序连接成可运行程序装入内存,所以连接和装入的过程往往是一起的。
- 编译:即源程序经过编译器处理转换为二进制程序(目标程序)的过程。
- 连接:将多个目标程序连接起来转换为可运行程序。
- 装入:将连接的可运行程序装入内存由CPU调度执行。
#### 连接:
1、静态连接:即在程序运行之前,就将多个目标模块连接在一起组成一个可执行文件。由于其在装入之前其逻辑地址已经确定,因此装入后就不能再移动和修改程序的逻辑地址。
2、动态连接:当程序装入时才将多个目标模块进行连接。当一个模块依赖另一个模块时,装入依赖模块可以修改其逻辑地址。
3、运行时连接:只有当程序运行时才将多个目标模块进行连接。只有程序依赖某个模块并找不到时才去寻找并装入,它节省空间且提高装入速度。
#### 装入
1、静态装入:程序的逻辑地址转换为物理地址的过程在程序编译的过程中发生,程序员需要清楚计算机的物理地址。
2、动态装入:程序的逻辑地址转换为物理地址的过程发生在程序装入时发生,它的缺点就是程序装入后无法移动。
3、运行时装入:只有程序运行时才装入程序并确定其物理地址。
### 存储管理的方式