免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3340 | 回复: 1
打印 上一主题 下一主题

进程内存映像简单笔记 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-24 22:03 |只看该作者 |倒序浏览

                   上次去阿里巴巴面试,被问到一个进程的问题:Linux下一个程序如何转化成一个进程,进行了哪些步骤?
当时我也不是很清楚,只是说:Linux下生成一个进程是通过fork调用来实现的,操作系统内核把程序加载到内存上,并为它分配空间和一个PID。后来被问到正则表达式,不熟,最后被问到C++,不会C++,不了了之。
   现在知道Linux下程序转化成进程的更详细步骤了,所以写下来:
   1) 内核将程序读入内存,并为程序分配一定的内存空间;
   2) 内核为进程分配一个PID,还有其他一些相关资源;
   3) 内核为进程保存PID和相应的状态信息,把进车功能放入到运行队列中等待运行。
   基本上也就这3个步骤了。下面顺便记记进程的内存映像:
   
   首先,什么叫做内存映像呢? 进程的内存映像,指的是内核在内存中如何存放可执行程序文件。注意了,这里的可执行程序文件和内存映像是有区别的,,具体是:
   1) 可执行程序是位于硬盘上的,而内存映像位于内存上;
   2) 可执行程序没有堆栈,因为只有当程序被加载到内存上的时候才会分配相应的堆栈
   3) 可执行程序是静态的,因为它还没运行,但是内存映像是动态的,数据是随着运行过程改变的;
   
   Linux下的内存映像布局一般有如下几个段(从低地址到高地址):
   1) 代码段: 即二进制机器代码,代码段是只读的,可以被多个进程共享;
   2) 数据段: 存储已初始化的变量,包括全局变量和初始化了的静态变量;
   3) 未初始化数据段: 存储未被初始化的静态变量,也就是BSS段;
   4) 堆: 用于存放动态分配的变量;
   5) 栈: 用于函数调用,保存函数返回值,参数等等;
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/63929/showart_1334768.html

论坛徽章:
0
2 [报告]
发表于 2009-07-29 03:59 |只看该作者
请教内存映像在/dev/下是 哪个文件??
mem
kcore
kmem
有什么区别
在什么场合该用哪个?

真是很多不懂阿.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP