Linux程序地址空间
Posted Huang_ZhenSheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux程序地址空间相关的知识,希望对你有一定的参考价值。
目录
验证地址空间的基本排布:
进程地址空间是什么?
#include<unistd.h>
2 #include<stdio.h>
3 int g_val = 0;
4
5 int main()
6
7 printf("begin....:%d\\n",g_val);
8 pid_t id = fork();
9 if(id == 0)
10
11 int count = 0;
12 while(1)
13
14 printf("child:pid:%d,ppid:%d,[g_val:%d] [&g_val:%p]\\n",getpid(),getppid(),g_val,&g_val);
15 sleep(1);
16 count++;
17 if(count == 5)
18
19 g_val = 100;
20
21
22
23 else if(id > 0)
24
25 while(1)
26
27 printf("father:pid:%d,ppid:%d,[g_val:%d] [&g_val:%p]\\n",getpid(),getppid(),g_val,&g_val);
28 sleep(1);
29
30
31 else
32
33
34 return 0;
35
==》任何学过的语言里面的地址都不可能是物理地址!由操作系统给我们提供的,且由于数据和代码一定在物理内存上<冯诺依曼>,需要将虚拟地址转化成我们的物理地址!(这里的转化由OS自动完成)
==》所有的程序,都必须运行起来,运行起来之后,该程序立马变成了进程!
所以虚拟地址大概率可能与进程有某种关系?
地址空间本质是进程看待内存的方式,抽象出来的一个概念,内核struct mm_struct,这样的话每个进程都认为自己独占系统内存资源
区域划分本质:将线性地址空间划分为一个个的area,[start,end]
虚拟地址本质:在[strat,end]之间的各个地址
虚拟地址和物理内存之间的关系?
为什么要存在地址空间?
虚拟地址到物理地址的一个转化,由操作系统来完成!
1:保护物理内存,不受到任何进程内的地址的直接访问,方便进行合法性校验
2:将内存管理和进程管理进行解耦
3:让每个进程,以同样的方式,来看待代码和数据
进程和程序有什么区别?
以上是关于Linux程序地址空间的主要内容,如果未能解决你的问题,请参考以下文章