内存中的地址空间

Address Space

地址空间

之前已经说过了, 地址空间分为两种:

  1. 物理地址空间: 硬件支持的地址空间

    这部分地址空间的管理和控制是由硬件来完成的.

  2. 逻辑地址空间: 一个运行的程序所拥有的内存范围

    相对于物理地址空间而言, 程序所能"看到的"逻辑地址空间更简单一点, 就是一个一维的线性的地址空间.

但是最终, 逻辑地址和物理地址都是需要对应上的, 这部分就是由OS来完成的.

地址生成

用一个C语言的函数来举个🌰


逻辑地址生成

从最开始的**‘符号逻辑地址’到最终的‘具体逻辑地址’**, 经过了上面的这些转换过程, 而这些过程是基本上不需要操作系统来帮助的, 而是通过应用程序、编译器或者Loader就可以完成. 但是当把这个地址放入到内存中之后也是逻辑地址而不是物理地址.

再把之前的操作系统架构中的图片拿出来:


物理地址生成
  • CPU方面:

    1. 运算器需要在逻辑地址的内存内容
    2. 内存管理单元(MMU)寻找在逻辑地址和物理地址之间的映射
    3. 控制器从总线发送在物理地址的内存内容的请求
  • 内存方面:

    1. 内存发送物理地址内存的内容给CPU
  • 操作系统方面:

    建立逻辑地址和物理地址之间的映射

**操作系统的一个重要的作用就是: 确保放在内存中的程序相互之间不能相互干扰, 每个程序去访问地址空间是合法的. 换而言之, 确保每个程序访问地址空间是在一个范围之内的. **

0%