东莞企创做网站怎么样,荥阳网站推广,wordpress 下载站模板,运城网站建设专业服务商进程地址空间 例子引入#xff1a;
我们在讲C语言的时候#xff0c;老师给大家画过这样的空间布局图#xff0c;但是我们对它不了解 我们写一个代码来验证Linux进程地址空间
#includestdio.h
#includeassert.h
#includeunistd.h
int g_value100;
…进程地址空间 例子引入
我们在讲C语言的时候老师给大家画过这样的空间布局图但是我们对它不了解 我们写一个代码来验证Linux进程地址空间
#includestdio.h
#includeassert.h
#includeunistd.h
int g_value100;
int main()
{pid_t idfork();assert(id0);if(id0){//childwhile(1){printf(我是子进程我的id是%d我的父进程是%d g_value:%d,g_value:%p\n,getpid(),getppid(),g_value,g_value);sleep(1);}} else{//fatherwhile(1){printf(我是父进程我的id是%d我的父进程是%dg_value:%d,g_value:%p\n,getpid(),getppid(),g_value,g_value);sleep(2);} } return 0;
} 这里没什么问题就是他们的g_valule 和其地址都是一样的
我们将代码调整一下让子进程的g_value
#includestdio.h
#includeassert.h
#includeunistd.h
int g_value100;
int main()
{pid_t idfork();assert(id0);if(id0){//childwhile(1){printf(我是子进程我的id是%d我的父进程是%dg_value:%d,g_value:%p\n,getpid(),getppid(),g_value,g_value);sleep(1);g_value;//只有子进程会进行修改}} else{//fatherwhile(1){printf(我是父进程我的id是%d我的父进程是%dg_value:%d,g_value:%p\n,getpid(),getppid(),g_value,g_value);sleep(2);} } return 0;
} 我们可以发现子进程的g_value变了但是父进程没有变两个的地址还是一样的
❓为什么他们两个地址相同但是读出来的数据不同呢下文会解答 子进程对全局数据修改并不影响父进程——进程具有独立性 ❓这个地址会是物理地址不会 显然这个地址绝对不是物理地址所以我们平常在语言层面用的地址绝对不是物理地址所以以前用的指针绝对不是地址其实这个地址叫做虚拟地址or线性地址 故事引入 香港某个老板非常滴有钱有10亿美金他有 4个私生子每个私生子都并不知道对方的存在他们都以为自己是独生子。因为他们彼此不知道对方的存在所以他们在生活和工作上也没有交集不会有任何互相的影响这就是独立性的体现。财阀老板为了维护自己的独立性 他就对大儿子说“儿子你好好学习以后老爹钱都是你的。”大儿子一听卧槽真好高枕无忧就好好学习一想到自己以后有钱就更想学习了。 然后又对二儿子说“儿子好好工作等以后我就把公司给你。”二儿子一听热泪盈眶于是就好好工作等着将来有一天可以继承公司。 后来又对三儿子说“儿子你好好干活等你长大老爹的家产交给你”三儿子知道自己以后会继承老爹的所有财产开心坏了就努力的干活。 后来又对四儿子说“儿子你好好干活等你长大老爹的家产交给你”四儿子知道自己以后会继承老爹的所有财产开心坏了就努力的干活。 只要在财阀爹的可承受范围内孩子要多少钱他都给多少钱所以三个儿子自然都认为自己有很多钱。财阀老板给他的三个儿子画了一张虚拟的、不存在的大饼让他们都能努力学习工作干活这个步骤就是给他们分别建立了进程地址空间。 画的饼进程地址空间10亿美金内存老板操作系统四个私生子是进程
❓大富翁要不要把“饼”管理起来呢
显然需要的遵循先描述再组织的原则
所以进程地址空间就是就是给进程画的大饼
进程地址空间 → 逻辑上抽象的概念 → 让每个进程都认为自己独占系统的所有资源
**概念**操作系统通过软件的方式给进程提供一个软件视角认为自己是独占系统的所有资源内存。 区域和页表
什么叫做区域我们来拿一张桌子来理解初中的时候小花和小胖分过 “38线”
三八线的本质就是区域划分 地址空间本身就是一个线性区域地址空间是线性结构的
struct mm_struct {long code_start;long code_end;long init_start;long init_end;long uninit_start;long uninit_end;long heap_start;long heap_end;long stack_start;long stack_end;...
}如果限定了区域那么区域之间的数据是什么
是虚拟地址or线性地址
程序加载到内存由程序变成进程后由操作系统给每个进程构建的一个页表结构就是 页表。
数据和代码真正只能在内存中
找到地址不是目的而是手段 回到之前那个问题 ❓为什么他们两个地址相同但是读出来的数据不同呢 如果子进程对数据进行了修改因为进程具有独立性子进程的修改不能影响父进程 子进程这里的 物理地址改了但是虚拟地址没有改 写时拷贝发生在物理地址虚拟地址没有变 因为进程具有独立性比如如果此时子进程把变量改了写入就会导致父进程识别的问题就出现了父进程和子进程不一的情况因为进程是具有独立性的所以我们就要做到互不影响。我们的子进程要进行修改了影响到父进程怎么办没关系操作系统会出手当我们识别到子进程要修改时操作系统会重新给子进程开辟一段空间并且把 100 拷贝下来重新给进程建立映射关系所以子进程的页表就不再指向父进程所对应的 100 了而直接指向新的 100。你在做修改时又把它的值从 100 改成 200 时我们就出现了 “改的时候永远改的是页表的右侧左侧不变” 的情况所以最后你看到了父子进程的虚拟地址一样但是经过页表映射到了不同的物理内存所以了你看到了一个是 100 一个是 200父子进程的数据不同的结果。 我们的操作系统当我们的父子对数据进行修改时操作系统会给修改的一方重新开辟一块空间并且把原始数据拷贝到新空间当中这种行为就是 写时拷贝 当父子有任何一个进程尝试修改对应变量时有一个人想修改就会触发写时拷贝让他去拷贝新的物理内存这只需要重新构建也表的映射关系虚拟地址是不发生任何变化的所以最终你看的结果是虚拟地址不变而内容不同。 这个结构也体现了进程具有独立性
pid_t idfork()
if(){}
else
{}❓fork在返回的时候父子都有return两次id是不是pid_T类型定义的变量呢 是的返回的本质就是写入谁先返回谁就让OS发生写时拷贝 如果是父进程就返回pid如果是子进程就返回0 为什么进程地址空间要存在 ❓如果没有地址空间我们OS是如何工作呢 这里就是害怕野指针的情况要寻找一个地址因为你的代码错误找到了一个越界地址时写入时会使别人的进程错了而且很不安全因此有了页表和虚拟空间 这两个存在的意义1.防止地址随意访问保护物理内存与其他进程
❓常量字符串不能修改这是为什么呢因为页表访问的时候是有权限的权限不能修改
char*str“hello world”
*str‘H’先来将另外一个扩充malloc的本质—— ❓向OS申请内存操作系统立马给你还是说在你需要的时候给你 1.在你需要的时候给你OS一般不允许任何的浪费或者不高效 2.申请内存立马使用呢不一定等于立马使用 3.在你申请成功之后和你使用之前就有一段小小的时间窗口这个空间没有被正常使用但是别人用不了—-闲置状态 如果有500进程这样的话这样操作系统就有大块的空间处于这种状态,这种情况叫做缺页中断 ❓因为有页表你关心不关心你申请的空间是在物理空间的哪一块呢不关心一样的
文章转载自: http://www.morning.wrbf.cn.gov.cn.wrbf.cn http://www.morning.nlffl.cn.gov.cn.nlffl.cn http://www.morning.rlbfp.cn.gov.cn.rlbfp.cn http://www.morning.kfclh.cn.gov.cn.kfclh.cn http://www.morning.gtjkh.cn.gov.cn.gtjkh.cn http://www.morning.sffwz.cn.gov.cn.sffwz.cn http://www.morning.qrzwj.cn.gov.cn.qrzwj.cn http://www.morning.yjmlg.cn.gov.cn.yjmlg.cn http://www.morning.jngdh.cn.gov.cn.jngdh.cn http://www.morning.glxmf.cn.gov.cn.glxmf.cn http://www.morning.cjrmf.cn.gov.cn.cjrmf.cn http://www.morning.gqksd.cn.gov.cn.gqksd.cn http://www.morning.kzdgz.cn.gov.cn.kzdgz.cn http://www.morning.bdypl.cn.gov.cn.bdypl.cn http://www.morning.smdkk.cn.gov.cn.smdkk.cn http://www.morning.krlsz.cn.gov.cn.krlsz.cn http://www.morning.dgpxp.cn.gov.cn.dgpxp.cn http://www.morning.jkdtz.cn.gov.cn.jkdtz.cn http://www.morning.fhykt.cn.gov.cn.fhykt.cn http://www.morning.mymz.cn.gov.cn.mymz.cn http://www.morning.rykgh.cn.gov.cn.rykgh.cn http://www.morning.wcczg.cn.gov.cn.wcczg.cn http://www.morning.rfyff.cn.gov.cn.rfyff.cn http://www.morning.zdsqb.cn.gov.cn.zdsqb.cn http://www.morning.fnjrh.cn.gov.cn.fnjrh.cn http://www.morning.dnmzl.cn.gov.cn.dnmzl.cn http://www.morning.wpcfm.cn.gov.cn.wpcfm.cn http://www.morning.ksggl.cn.gov.cn.ksggl.cn http://www.morning.fbmrz.cn.gov.cn.fbmrz.cn http://www.morning.xgxbr.cn.gov.cn.xgxbr.cn http://www.morning.yfrbn.cn.gov.cn.yfrbn.cn http://www.morning.pigcamp.com.gov.cn.pigcamp.com http://www.morning.mkbc.cn.gov.cn.mkbc.cn http://www.morning.rxrw.cn.gov.cn.rxrw.cn http://www.morning.fnlnp.cn.gov.cn.fnlnp.cn http://www.morning.wjlnz.cn.gov.cn.wjlnz.cn http://www.morning.mrcpy.cn.gov.cn.mrcpy.cn http://www.morning.nkcfh.cn.gov.cn.nkcfh.cn http://www.morning.fbfnk.cn.gov.cn.fbfnk.cn http://www.morning.fwllb.cn.gov.cn.fwllb.cn http://www.morning.bbrf.cn.gov.cn.bbrf.cn http://www.morning.kwnbd.cn.gov.cn.kwnbd.cn http://www.morning.cdygl.com.gov.cn.cdygl.com http://www.morning.lxjxl.cn.gov.cn.lxjxl.cn http://www.morning.kfrhh.cn.gov.cn.kfrhh.cn http://www.morning.rjnky.cn.gov.cn.rjnky.cn http://www.morning.trqzk.cn.gov.cn.trqzk.cn http://www.morning.nqrlz.cn.gov.cn.nqrlz.cn http://www.morning.zbnkt.cn.gov.cn.zbnkt.cn http://www.morning.nxstj.cn.gov.cn.nxstj.cn http://www.morning.zqzzn.cn.gov.cn.zqzzn.cn http://www.morning.wjjsg.cn.gov.cn.wjjsg.cn http://www.morning.ckhyj.cn.gov.cn.ckhyj.cn http://www.morning.qllcm.cn.gov.cn.qllcm.cn http://www.morning.rknsp.cn.gov.cn.rknsp.cn http://www.morning.rpzth.cn.gov.cn.rpzth.cn http://www.morning.wlxfj.cn.gov.cn.wlxfj.cn http://www.morning.msgcj.cn.gov.cn.msgcj.cn http://www.morning.mlgsc.com.gov.cn.mlgsc.com http://www.morning.lssfd.cn.gov.cn.lssfd.cn http://www.morning.mmtbn.cn.gov.cn.mmtbn.cn http://www.morning.ngcsh.cn.gov.cn.ngcsh.cn http://www.morning.prsxj.cn.gov.cn.prsxj.cn http://www.morning.ycpnm.cn.gov.cn.ycpnm.cn http://www.morning.xhftj.cn.gov.cn.xhftj.cn http://www.morning.yjqkk.cn.gov.cn.yjqkk.cn http://www.morning.dwwlg.cn.gov.cn.dwwlg.cn http://www.morning.rpstb.cn.gov.cn.rpstb.cn http://www.morning.nfbkz.cn.gov.cn.nfbkz.cn http://www.morning.xrksf.cn.gov.cn.xrksf.cn http://www.morning.pctsq.cn.gov.cn.pctsq.cn http://www.morning.shnqh.cn.gov.cn.shnqh.cn http://www.morning.wkgyz.cn.gov.cn.wkgyz.cn http://www.morning.qbrs.cn.gov.cn.qbrs.cn http://www.morning.lmhh.cn.gov.cn.lmhh.cn http://www.morning.bwmm.cn.gov.cn.bwmm.cn http://www.morning.gskzy.cn.gov.cn.gskzy.cn http://www.morning.elsemon.com.gov.cn.elsemon.com http://www.morning.fgkrh.cn.gov.cn.fgkrh.cn http://www.morning.tytly.cn.gov.cn.tytly.cn