内存管理

← MOC |← 主页


内存管理主要功能包括:

  1. 内存空间的分配与回收
  2. 地址转化:把逻辑地址转化成物理地址
  3. 内存空间的扩充:虚拟存储技术
  4. 内存共享 : 允许多个进程安全地访问同一块物理内存地址
  5. 存储保护 : 确保各进程只能访问自身被授权的内存区域

逻辑地址与物理地址:

编译后的每个 .o 目标文件从 0 开始编址,这是逻辑地址。

链接器把多个 .o 拼成可执行文件时,统一分配代码段、数据段在逻辑地址空间里的实际起始位置(比如 Linux 下默认 0x400000)。

程序看到的永远是逻辑地址,真正运行时由 OS 分配物理页框 + MMU 实时翻译。程序员不用管物理地址。

程序的链接:

学c++的时候学过:编译与链接

静态链接就是都拼在一起加偏移量,动态链接是声明外部模块,运行时去外部寻找

程序的装入:

  1. 绝对装入:编译时就确定物理地址,程序里直接用物理地址,只适合单道、地址已知的场景
  2. 可重定位装入:逻辑地址从0开始,装入时一次性把逻辑地址加上起始地址换算成物理地址(静态重定位),装入后不能再移动
  3. 动态运行时装入:装入时不换算,程序运行、真正访问时才由硬件(MMU)把逻辑地址转成物理地址,程序可在内存中移动,是现代系统的做法

连续分配管理方式:

  1. 单一连续分配:操作系统和单一进程独占内存
  2. 固定分区分配:内存分区,每个分区一个进程,分区大小固定
  3. 动态分区分配:按进程实际需要动态划分分区,进程结束后再回收并合并空闲分区
算法描述
首次适应算法按地址顺序查找空闲分区,找到第一个满足大小要求的分区就分配
邻近适应算法从上次查找结束的位置继续找,找到第一个满足要求的空闲分区就分配
最佳适应算法选择最小但仍能满足要求的空闲分区进行分配,为了大进程安全
最坏适应算法选择最大的空闲分区进行分配,让分配后的剩余空间尽量大,为了减小碎片化
快速适应算法按空闲分区大小分类管理,进程可快速找到对应大小的空闲链表
伙伴系统按 2 的幂次划分分区,需要时拆分,回收时按伙伴关系合并
哈希算法用哈希表记录空闲分区信息,加快空闲分区的定位与分配

页式管理:如何,以什么方式,去把ROM氛围主要内容包括内存空间的分配与回收

段式管理:程序不在是一个笼统的代码,而是根据功能划分区域,提升效率

虚拟内存:以什么规则,如何统筹规划,把ROM里的页面装到RAM里的页框