计算机操作系统 - 内存管理/逻辑地址
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
...省略部分...
结论
- 编译阶段生成的模块使用相对模块起始位置的逻辑地址。
- 链接阶段将各个模块(例子中只有一个)进行逻辑地址重定位(把各个模块“安排”到逻辑地址空间的不同位置上)。
- 运行阶段(也可以是装入阶段)执行逻辑地址到物理地址的转换(程序中的逻辑地址仍为逻辑地址,只是在访存时根据逻辑地址进行了转换)。
以上是关于计算机操作系统 - 内存管理/逻辑地址的主要内容,如果未能解决你的问题,请参考以下文章