既然很多公司面试笔试都喜欢问,不妨把它列在这儿好了:
I guess this picture is enough.
(2) 进程逻辑地址空间布局
进程的组成部分:
四部分:指令段,数据段,堆栈段和系统数据
n指令段(Text)
u程序的CPU指令代码,包括:主程序和子程序编译后的CPU指令代码,以及调用的库函数代码
u指令段的大小固定不变,只读
n用户数据段
u全局变量,静态(static)变量,字符串常数
u允许数据段增长和缩小,实现内存的动态分配
Ø系统调用sbrk()允许编程调整数据段的大小
Ø内存管理库函数,如:malloc(),free()
n用户堆栈段
u程序执行所需要的堆栈空间,实现函数的调用
Ø用于保存子程序返回地址
Ø在函数和被调函数之间传递参数
Ø函数体内部定义的变量(静态变量除外)
umain函数得到的命令行参数以及环境参数
Ø存放在堆栈的最底部
Ømain函数运行之前,这些部分就已经被系统初始化
u堆栈段的动态增长与增长限制
n系统数据段
u上述三部分在进程私有的独立的逻辑地址空间内
u系统数据段是内核内的数据,每个进程对应一套
Ø包括页表和进程控制块PCB