1.什么是进程地址空间
1.如下图所示,就是我们的进程地址空间概念图,从下至上依次是,代码区、常量区、全局数据区、堆区、共享区、栈区、命令行参数环境变量区、堆区。从下至上地址逐渐增加,可以通过编写程序来进行验证;
2.进程并不是一直占用所有的地址空间资源,地址空间是进程的活动范围
再来打个比方,你家里有个一万平的院子,这个院子就是你的活动范围,有游泳区,美食区,休闲区,运动区,这些区域都是你的活动范围,但是你并不是随时随地都在使用这些地方。
进程地址空间就相当于院子,进程就是人,进程地址空间衡量了一段内存空间,这段空间是当前进程的活动范围,但是并不代表进程占有全部资源;
进程就和人一样,会在一些不同的时间点干一些事情,比如访问代码区,修改全局变量等等
3.进程地址空间是虚拟地址空间,不是物理地址空间,在语言上打印出来的地址叫做虚拟地址,虚拟空间最终以一种方法转化到物理内存上(OS负责将虚拟地址转化为物理地址)
2.为什么要有进程地址空间
通过虚拟化内存将空间连续化
通过映射关系以及页表的权限来保护内存,如果OS发现进程的越界等触发权限的危险操作会直接终止进程
2.1直接在物理内存上进行数据存储的危害
2.2解决的办法
3.管理进程地址空间
每个进程都有一个对应的地址空间,OS的本职就是管理,同样需要将进程地址空间管理起来。
管理地址空间,同样是先描述,在组织。