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程序地址空间的主要内容,如果未能解决你的问题,请参考以下文章

[ Linux ] 进程地址空间

Linux程序地址空间

Linux程序地址空间

Linux程序地址空间

Linux系统编程进程地址空间和虚拟地址空间

<Linux>进程地址空间