跳转至

内存管理

背景

创建进程首先需要将程序数据装入内存

而将用户的源程序变为可在内存中执行的可执行程序通常需要经过编译链接装入三个步骤

假设内存从地址0x1000之后才可以使用,那么需要对程序进行重定位操作

重定位

为了执行程序而对其中出现的地址所做的修改称为重定位

重定位可以执行的时机

  • 在编译链接时:将程序中的地址符号转换为实际的内存地址

这样的代码只能放在事先确定的位置上

  • 载入时:将程序从磁盘载入内存时,将程序中的地址符号转换为实际的内存地址

装载时的重定位依然存在缺点:一旦载入后便不能移动程序

为了让更多进程并发执行,提高内存的利用率,最好在代码运行时重定位

  • 运行时重定位:内存中的代码总是可以重定位的

除了可以随时重定位,还有进程保护的优点:每个进程都有一个独立的地址映射表,可以将程序中的逻辑地址翻译为物理地址。这个翻译工作通常交给内存管理单元(MMU)完成

对于一些嵌入式操作系统而言,内存管理是十分简单的,大多数情况下,虚拟地址=物理地址

内存分配和管理方案

连续内存分配

分段内存管理

分页内存管理

段页结合内存管理