计算机操作系统 - 内存管理/逻辑地址

Posted amazing-1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机操作系统 - 内存管理/逻辑地址相关的知识,希望对你有一定的参考价值。

计算机操作系统 - 内存管理/逻辑地址

〇、定义

逻辑地址:指程序使用的地址,该地址处于用户地址空间。
物理地址:指机器内存的地址,地址处于主存储器地址空间,对应主存储器存储单元。

一、实例

以一个C语言程序的编译运行为例。

环境
gcc version 8.3.0 (Raspbian 8.3.0-6+rpi1)
Target: arm-linux-gnueabihf

#include <stdio.h>

int global_value_a = 0x10;
int global_value_b = 0x10;

int main()
{
  printf ("&global_value_a=%p,main=%p
", 
    &global_value_a,main);
  return 0;
}

编译
gcc test.c -c -o test.o
gcc test.o -o a.out

> ./a.out
&global_value=0x21028,main=0x10408
> nm test.o
00000000 D global_value_a
00000004 D global_value_b
00000000 T main
         U printf
> nm a.out
...省略部分...
00021028 D global_value_a
0002102c D global_value_b
         w __gmon_start__
000102c8 T _init
00020f14 t __init_array_end
00020f10 t __init_array_start
000104a4 R _IO_stdin_used
00010498 T __libc_csu_fini
00010438 T __libc_csu_init
         U __libc_start_main@@GLIBC_2.4
00010408 T main
...省略部分...

结论

  • 编译阶段生成的模块使用相对模块起始位置的逻辑地址。
  • 链接阶段将各个模块(例子中只有一个)进行逻辑地址重定位(把各个模块“安排”到逻辑地址空间的不同位置上)。
  • 运行阶段(也可以是装入阶段)执行逻辑地址到物理地址的转换(程序中的逻辑地址仍为逻辑地址,只是在访存时根据逻辑地址进行了转换)。





以上是关于计算机操作系统 - 内存管理/逻辑地址的主要内容,如果未能解决你的问题,请参考以下文章

计算机操作系统 - 内存管理/逻辑地址

计算机操作系统之存储管理

操作系统----内存管理

计算机操作系统 - 内存管理

操作系统--页式段式段页式内存管理的逻辑与物理地址对应关系

操作系统-存储管理