为了能对内存分配知识的整体有个对比了解,所以将内存的连续分配与非连续分配在这一节进行介绍。
一、内存分层
内存分层如下图所示,其中的主存表示内存。
二、 操作系统的目标
1、抽象
使用逻辑地址空间(后面有介绍),运行的程序不需要关心设备的相关信息。
2、保护
每个运行的程序都享有自己独立的地址空间。
3、共享
不同的程序可以访问相同的内存,实现进程间的通信。
4、虚拟化
当运行的程序很多时,可能存在内存不足,此时操作系统会虚拟内存空间,将一些程序存储到硬盘上。
三、地址空间
程序重定位、分段、分页、虚拟内存、按需分页虚拟内存
在讲解内存管理之前需要提一下地址空间与地址生成。
1、地址空间
我们常说的地址空间包括物理地址空间与逻辑地址空间。
物理地址空间是指主存,也就是我们常见的内存条、磁盘(物理地址空间是硬件支持的地址空间)。
逻辑地址空间是指一个运行的程序所拥有的地址范围,是线性的。
2、逻辑地址——>物理地址
真正的数据或指令是存在主存中的,所以需要逻辑地址到物理地址的映射,程序才能从逻辑地址中获取真正物理地址上的指令数据。逻辑地址到物理地址包含以下几个步骤:
①、当CPU执行某条指令时,计算逻辑单元(ALU)需要该指令的内容,请求时会携带该逻辑地址。
②、CPU的内存管理单元(MMU)(后面会讲MMU)会查找是否有该逻辑地址所对应的物理地址,若没有会去内存中的map中查找。
③、如果找到了,CPU的控制器会给主存发请求,获取该指令的内容。
④、主存会通过总线将指令内存发给CPU。
操作系统在这个过程中所起的作用为:提前将逻辑地址与物理地址建立联系。
四、操作系统管理内存的方式
在程序运行时,操作系统将会给应用程序分配相应的内存,内存的分配方式有连续内存分配与非连续内存分配。
1、连续内存分配
连续内存分配是指给程序分配连续的内存空间。由于每个程序需要的内存空间不一样大,操作系统将内存空间分配给程序后可能会存在有一小部分内存空间由于太小无法分配给其他程序使用,这就是内存碎片,内存碎片会导致空闲的内存不能被利用。内存碎片又分为内部碎片与外部碎片。
内部碎片:当主存中的某一部分分配给应用程序后,程序无法使用该内存的部分内存。