文章目录
一、程序地址空间
我们在学习C语言的时候,常用到如下的空间布局图:
内核空间 |
命令行参数环境变量 |
栈 |
共享区 |
堆 |
未初始化数据 |
初始化数据 |
正文代码 |
1.fork实验观察到的结论
2.引入地址空间
比如,有一个富翁(os),有10亿美金(内存),给每个继承人(进程)都画了饼(进程空间地址),这个饼就是将来要继承的东西,此时这个饼需要被管理起来,以防富翁忘记采用先描述再组织的手段,struct mm_struct。
struct mm_struct{
long code_struct;
long code_start;
long code_end;
long init_start;
long init_end;
...
}
说明:
1.同一个变量,地址相同,其实是虚拟地址相同,内容不同是因为被映射到了不同的物理地址
3.malloc的本质
4.重新理解地址空间
磁盘里保存代码和数据,进程开始,加载到内存,同时分配pcb,pcb分配虚拟地址,通过页表映射到物理内存,读取指令