进程的虚拟地址
每个程序被运行起来以后,它将拥有自己独立的虚拟地址空间,这个虚拟地址空间的大小由计算机的硬件平台决定(具体的说是由CPU的位数决定)
对于Linux系统来说,它的进程虚拟空间的划分:1GB–操作系统,3GB–进程
对于Windows系统:2GB–操作系统,2GB–进程
装载的方式
-
覆盖装入
-
页映射
进程的建立
- 创建一个独立的虚拟地址空间
- 读取可执行文件头,并建立虚拟地址空间与可执行文件的映射关系
- 将CPU的指令寄存器设置成可执行文件的入口地址,启动运行
由于可执行文件在装载时实际上是被映射的虚拟空间,所以可执行文件很多时候又被称为映像文件。
页错误
CPU打算执行某地址的指令时,发现对应的页面是个空页面,于是它就认为这是一个页错误。
CPU将控制群交给操作系统,操作系统有专门的历程来处理页错误。
进程虚存空间分布
1、 段的权限组合:
- 以代码段为代表的权限为可读可执行的段
- 以数据段和BSS段为代表的权限为可读可写的段
- 以制度数据段为代表的权限为只读的段
对于相同的段,把它们合并到一起当做一个段进行映射。
2、 一个进程基本上可以分为如下几种VMA区域:
- 代码VMA,权限只读、可执行,有映像文件
- 数据VMA,权限可读写、可执行,有映像文件
- 堆VMA,权限为可读写,可执行,无映像文件,匿名,可向上扩展
- 栈VMA,权限为可读写、不可执行,无映像文件,匿名,可向下扩展
3、 段地址对齐
映射过程中,页是映射的最小单位。==>映射将一段物理内存和进程虚拟地址空间之间建立映射关系,内存空间的长度必须是页大小的整数倍。