什么是进程

早期的计算机一次只能执行一个程序。这种程序完全控制系统,并且访问所有系统资源。相比之下,现代计算机系统允许加载多个程序到内存,以便并发执行。这就要求操作系统对各种程序提供更严的控制和更好的划分。这些需求导致了进程概念的产生,即进程为执行程序,是现代分时操作系统的工作单元。

操作系统越复杂,有望为用户做的也越多。虽然它主要关注的是执行用户程序,但是也要顾及各种系统任务(这些任务留在内核之外会更好)。因此,系统会由一组进程组成:操作系统进程执行系统代码,而用户进程执行用户代码。

通过 CPU 的多路复用,所有这些进程可以并发执行。通过在进程之间切换 CPU,操作系统能使计算机更为高效。

前面说,进程是执行的程序,这是一种非正式的说法。进程不只是程序代码(文本段或代码段),通常还包含以下内容:

  • 当前活动,如程序计数器的值和处理器寄存器的内容等。
  • 进程堆栈(包括临时数据,如函数参数、返回地址和局部变量)和数据段(包括全局变量)。
  • 堆,这是在进程运行时动态分配的内存。

进程的内存结构如图 1 所示。


内存中的进程
图 1 内存中的进程

强调,程序本身不是进程。程序只是被动实体,如存储在磁盘上包含一系列指令的文件(经常称为可执行文件)。相反,进程是活动实体,具有一个程序计数器,用于表示下个执行命令和一组相关资源。当一个可执行文件被加载到内存时,这个程序就成为进程。

可执行文件的加载通常有两种方法:

  1. 双击一个代表可执行文件的图标;
  2. 在命令行上输入可执行文件的名称(如prog.exe或a.out);

虽然两个进程可以与同一程序相关联,但是当作两个单独的执行序列。例如,多个用户可以运行电子邮件的不同副本,或者同一用户可以调用 Web 浏览器程序的多个副本。每个都是单独进程;虽然文本段相同,但是数据、堆及堆栈段却不同。

注意,进程本身也可作为一个环境,用于执行其他代码。Java 编程环境就是一个很好的例子。在大多数情况下,可执行 Java 程序在 Java 虚拟机(JVM)中执行。作为一个进程来执行的 JVM,会解释所加载 Java,并根据代码采取动作(按本机指令来执行)。例如,如要运行编译过的 Java 程序 Program.class,我们可以输入

java Program

命令 java 将 JVM 作为一个普通进程来运行,而这个进程会在 JVM 内执行 Java 程序 Program。这个概念与模拟是一样的,不同的是,代码不是采用不同指令集,而是采用 Java 语言。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/21979.html

(0)
上一篇 2021年7月20日
下一篇 2021年7月20日

相关推荐

发表回复

登录后才能评论