首先在说进程是如何运行之前,得先明白进程是个什么东西,它和可执行文件(程序),虚拟地址空间,内存,磁盘都是什么关系。
官话:进程就是在执行的可执行文件(程序)。
白话:菜谱是程序,人是CPU,炒菜的过程就是进程。
说到这,可能就有点疑问了,那这进程和这虚拟地址空间,内存,磁盘又有什么联系?别急听我慢慢道来,首先你炒菜光菜谱够吗?显然没菜在炒个锤子菜,你肯定得有菜,调料,锅对吧。那么同样的,程序只是指令的集合,没数据它又怎么跑。
紧接着就可以回答刚才的问题了,这些指令,数据可定得放个地吧?这不就是磁盘了么。有人肯定会有疑问为啥不放内存上,只要你家有钱当然也可以。开个玩笑明显是没法存放在内存上的,首先内存上的数据是非永久性的,不可能你废老半天劲写了几十行代码完事跑一遍没了,那还怎么玩对吧。再者你家内存多大,撑死8个G,讲道理要是放内存上LOL都玩不了了吧。
好了言归正传,说了这么多这虚拟地址空间是啥呢?这就得好好说道说道了。
首先呢,在很久以前程序在运行的时候,是直接从磁盘里读出来放内存上的。开始程序少还没啥感觉,不过这用着用着吧就有问题了。
- 程序与程序之间不安全。因为都是直接放内存上的,一个程序不小心跑另一个程序里面改个东西又跑回来,是没啥