操作系统之内存管理基础(逻辑地址空间与物理地址空间,地址变换,内存共享,内存保护,内存分配与回收)

190 阅读3分钟

逻辑地址空间与物理地址空间

逻辑地址空间:程序编译时所用的相对地址,例如C语言中函数的名字就是一种地址。逻辑地址由基地址与偏移量组成。 物理地址空间:实际内存中的地址。逻辑地址空间和物理地址空间的映射由操作系统完成。

地址变换

重定位:把程序中的逻辑地址转换为运行时可由机器直接寻址的物理地址的过程。

静态重定位:当用户程序加载到内存时,一次性实现逻辑地址到物理地址的转换,一般可以由软件完成。 动态重定位:在进程执行过程中进行地址变换,即逐条指令执行时完成地址转换,需要硬件部分支持。动态重定位可将程序分配到不连续的存储区;在程序运行前只需要装入部分代码就可以投入运行,然后再程序运行期间,根据需要再动态申请分配内存空间;便于程序段的共享。

内存共享

多个合作进程可能需要访问同一块数据,因此必须支持对内存共享区域进行受控访问。

内存保护

含义:保证各进程在自己的内存空间内运行,不会越界访问。

方法: 在CPU中设置上、下限寄存器,存放进程在主存中的上限和下限地址。每当CPU要访问一个地址时,就分别和这两个寄存器比较,判断是否越界。 采用重定位寄存器(基地址寄存器)存放进程的起始物理地址,界地址寄存器(限长寄存器)存放进程的最大逻辑地址,进行越界检查。内存管理部件将逻辑地址与界地址寄存器进行比较,若没有发生地址越界,就加上重定位寄存器的值后映射成物理地址再送到内存单元。

内存分配与回收

含义:由操作系统负责内存空间的分配和管理,并且回收结束进程所占有的空间。

方法: 单一连续分配:内存被分为系统区(仅供操作系统使用,通常在低地址部分)和用户区(一道用户程序独占整个用户区)。是最简单的一种多道程序存储管理方式。

动态分区分配:又称可变分区分配。不会预先划分内存分区,而是在进程装入内存时,根据进程的大小动态地建立分区,使分区的大小正好适合进程的需要。因此系统分区的大小和数目是可变的。会产生外部碎片,即还没有被分配出去,但无法分配给申请内存空间的新进程的空闲内存空间。可以通过紧凑技术来解决。

分页存储管理:将内存空间分为一个个大小相等的分区,称为“页框”,将进程的逻辑地址空间分为和页框大小相等的一个个“页面”。页框和页面都有编号,编号都从0开始。操作系统以页框为单位为各个进程分配内存空间,进程的每个页面分别放入一个页框中。页框和页面有一一对应的关系,各个页面不必连续存放。不产生外部碎片,只会在最后一个不完整的块上产生内部碎片,即已经被分配出去却不能被利用的内存空间。