进程虚拟空间
进程
进程是我们经常提到的一个概念,那么它究竟是什么?它和程序又有什么区别呢?
程序是一个静态的概念,它是一些预先编译好的指令和数据集合的文件。
进程则是一个动态的概念,它是程序运行时的一个过程。
如果程序是剑谱的话,进程就是你舞剑的过程,函数是你的一个剑招。
进程虚拟空间
每个程序运行起来之后,都会有自己独立的虚拟地址空间。这个虚拟地址空间的带下由计算机平台决定,硬件决定了地址空间的最大理论上限,即硬件的寻址大小空间。
比如说在32位平台下,地址空间最大可达到2^32bit = 4G,而这也是我们常说的1G内核空间+3G用户空间的概念来源。
在C语言中,如果平台是32位地址空间,那么指针大小就是4字节,可以表示4G的空间。
地址扩展——PAE
在32位硬件平台下,程序使用的空间是否能够超过4GB呢?
答案是肯定的。
Intel通过修改页映射的方式,使得新的映射方式可以访问到更多的物理内存,这种地址扩展方式就叫PAE。
操作系统通过提供一个窗口映射的方法,把这些额外的内存映射到进程空间。
比如应用程序0x1000000~0x2000000这一段256M的物理空间做窗口。
程序可以冲高于4G的物理空间中申请多个大小为256M的空间,轮流来使用这个窗口。
在windows下,这种访问内存的操作方式叫AWE。
在linux则通过mmap()系统调用来实现。
关于进程是怎样加载到内存中,我将在下一篇博客:进程的装载中介绍
参考文献
[1] 俞甲子 石凡 潘爱明.程序员的自我修养.电子工业出版社,2009.4.