进程标识执行中的程序,这并不严谨。进程并不仅仅是指程序代码(而这一部分有时被称为文本段(text)(或代码段))。
进程还包括当前活动,由程序计数器(program counter)的值以及处理器的寄存器的内容代表。
一个进程通常包含进程堆栈段(stack),该栈包含临时数据(比如方法参数,返回地址,以及本地变量)以及数据段(data)(包含全局变量)。进程还可能包括堆(heap),它是在进程运行时候动态分配的内存。
内存中集成的结构如下:
程序本身并不是进程,程序只是被动的(passive)实体,比如存储在磁盘上包含一些列指令的文件内容(通常称为可执行文件)。
进程是活性(active)实体,他有一个程序计数器,用来表示下一个要执行的命令和相关资源集合。
当一个可执行文件装入内存,一个程序才可能称为进程。
装载一个程序有两种方法:
- 双击一个可执行文件
- 命令行
一个进程在运行时产生多个进程是很常见的。
注意,进程本身可以是其他代码的执行环境。Java编程环境就是一个很好的例子。绝大多数情况下,一个可执行的Java程序在JVM内执行。JVM作为一个进程执行,它解释装载的Java代码,并代表该代码执行相应的操作(通过本地机器指令)。举个例子,为了运行编译好的Java程序Program.class,我们可以键入:
java Program
java命令会将JVM作为一个普通的进程运行,它会在虚拟机中轮流的执行Java程序Program。这个概念和模拟的概念是差不多的,只不过代码不是为不同的指令集编写的,而是用Java语言编写的。