深入剖析进程的特点、实现及进程控制块
一、进程的特点
(一)动态性
进程具有明显的动态性。它可以被动态创建,在执行过程中会发生状态切换,从一个状态转变为另一个状态。当所有任务执行完毕后,进程还会结束运行。整个过程呈现出动态的执行特性。
(二)并发性
进程具有并发性。在一段时间内,多个进程会被调度并占用CPU,即占用处理器进行处理。这会给人一种多个进程似乎在并行执行的错觉。这里需要区分“并行”和“并发”的概念:
- 并发:是指在一段时间内,有多个进程在执行。当时间间隔足够小时,就好像这些进程在同时执行 。在只有一个CPU的情况下,由于某一时刻只能执行一个进程,为了执行其他进程就必须进行切换,所以只能实现并发。
- 并行:是指在一个时刻,有多进程能够同时执行。只有在拥有多个CPU(现在很多机器都是多核多处理器)的情况下,才可以达到并行执行的效果。
因此,并发和并行的时间力度不同,理解这两个概念十分重要。
(三)独立性(进程间工作互不影响)
不同进程的工作相互之间不影响,不过这需要从两个层面来看。在执行过程中,操作系统会不断调度不同进程执行,所以进程的执行时间有可能受到其他进程影响,但进程执行的正确性不应受到影响。所谓正确性,就是一个进程在执行过程中,其代码和数据不会被其他进程破坏。
为保证进程的正确性,操作系统的内存管理起到关键作用。之前我们学习过操作系统的内存管理,其中重点概念——页表。通过页表,不同的进程或程序可以访问不同的地址空间。如果进程越过自身的地址空间,就会产生缺页异常和页错误。操作系统通过给不同进程分配不同页表,确保每个进程的代码和数据相互不受影响,这体现了操作系统在内存管理方面对进程正确性的支持。
(四)制约性
进程在执行过程中,进程之间可能存在交互,或者一个进程需要等待另一个进程执行到一定阶段后才能继续执行,这种进程间的持续关系体现了相互制约性。操作系统需要根据进程间的这些特点,依据进程之间同步、互斥的特点,协调进程的执行顺序,例如决定何时执行进程A,何时执行进程B 。关于进程间同步、互斥的内容,会在后续课程深入讲解。
二、进程管理与进程控制块
上述四个特点是进程的重要特征,从相关图示中也能直观体现,比如进程执行过程中的切换、进程执行的调度关系以及进程间的制约关系等。进程的这些功能和特征需要操作系统的支持,如果没有操作系统,进程就无法如此设计和执行。
在学习操作系统原理和实现时,我们要思考如何实现进程管理,使进程具备这些特征。操作系统作为一种系统软件,比普通软件更复杂,它需要直接管理计算机系统的硬件资源。从软件的角度看,根据经典公式“程序 = 算法 + 数据结构”,操作系统也需要特定的数据结构和算法来实现相应功能,以支持进程的这些特征。
为了管理进程,我们设计了一种数据结构——进程控制块(Process Control Block,简称PCB)。它用于描述进程在执行过程中的动态状态变化,以及进程所需的资源情况。操作系统为每一个进程都维护了一个PCB,PCB保存了与该进程相关的所有状态信息。有了这些状态信息,操作系统就能对进程进行有效管理,为进程的动态执行提供支持。