本文是
操作系统系列
第三篇,介绍物理内存管理。操作系统对内存的管理是非常复杂的,和程序的执行、硬件、编译器等密切相关。本文从物理内存入手,介绍内存管理的重要概念,也为后续的虚拟内存管理内容做铺垫。原文链接,更多内容见公号机器学习与系统
,欢迎与我互动~
内存管理的需求
- 抽象,即给每个程序逻辑地址空间
- 保护,不同程序的地址空间互相隔离,无法越界访问
- 共享,对于一些公共函数库,可以只在内存中存一份,其它程序引用这一个库即可
- 虚拟化,通过逻辑地址和虚拟内存,可以使用更大的地址空间
地址的概念
地址是用来标志存储资源位置的,在计算机中用一串二进制数据表示。
一. 地址空间
地址空间就是指地址的范围,从最小值到最大值:
- 物理地址空间从0到物理内存的最大值:0~MAX_sys
- 逻辑地址空间从0到程序虚拟内存范围的最大值:0~MAX_prog
下图展示了物理地址空间,进程A、B的逻辑地址空间。
二. 地址生成
物理地址是已经确定的,逻辑地址的生成依赖于编译器。
- 编译:将高级语言编译成汇编语言。假设此时此时地址已知,如果起始地址改变,必须重新编译
- 汇编:将汇编语言翻译长机器能够识别的二进制代码,里面的地址是该程序执行时,对应地址空间中的位置
- 链接:将程序执行需要的函数库链接到可执行文件中,更新地址空间
- 加载:将函数加载到内存中时根据程序块在内存中的位置更新
逻辑地址空间
内的地址(重定位) - 执行:执行代码时,程序在内存中可能会移动,这里需要地址转换(映射)支持