进程概念
概念引入
在并发的环境之下,如传统的多道批处理系统,我们将计算机所运行的单元以程序来表示,也就是说,多道批处理的每一道全部都是程序。
但是,人们通过实际使用发现,程序这一概念并不是十分试用,特别是在后面的分时系统等遇到了较大的困难。
困难主要表现为:
- 间断性(异步特征): 程序可以分为读取,CPU操作,I/O处理等过程,因此每个程序在并发机制之下存在着时走时停的现象,失去了原有程序的时序关系
- 失去封闭性: 由于具有异步特性的程序之间对于存储器中的数据都可能修改,因此共享的资源受到了其他程序的控制逻辑的影响
- 失去可再现性: 由于并发操作中前两种特点,因此每次多个程序运行出来的结果实际上并不具有确定性,因此是不可再现的
由于有上述的困难,我们引入到了进程的概念。
进程概念分析与组成
通俗地来说,进程就是运行的程序。从官方的定义来看,进程就是具有一定独立功能的程序在一个数据集合上的一次动态执行过程。
从上述的定义可以看出,进程可以分为三个组成部分:
- 代码段(程序)
- 数据段
- PCB(进程控制块)
其中代码段和数据段的含义较为清晰,而PCB(Process Control Unit)则是进程管理与控制的专门的数据结构。其是系统感知进程存在的唯一标识。
一般而言,PCB包含了与进程有关的几乎所有信息,主要有:
- 进程状态(Process State)
- 程序计数器(Program Counter)
- CPU寄存器(CPU registers)
- CPU调度信息(CPU scheduling information)
- 内存管理信息(Memory-management information)
- 记账信息(Accounting information)
- I/O 状态信息(I/O state information)
进程与程序的区别分析
实际上,通过上述分析,进程和程序的差异是很大的。总结概括下来主要有以下三点:
- 进程是动态的,程序是静态的。进程是运行起来的程序。
- 进程是暂时的,程序是永久的。
- 两者组成要素不同
此外,两者的主要联系是一个进程可以对应多个不同的程序,同时一段程序可以对应多个正在执行中的进程。
进程的主要特征
进程主要有如下的三个特征:
- 并发性。对于单核CPU计算机,一段时间内有多个进程从外存导入到内存中被执行。
- 独立性。每一个进程都分配了独立的资源,彼此之间不受影响。
- 异步性。进程是按照各自独立,不可知的速度运行的。
进程状态
最经典的进程状态模型是五状态模型,引入挂起之后又谈到了七状态模型,接下来还是重点分析五状态模型。
进程有如下的五个状态:
- New(新建)。 指的是进程从外存中引入到内存中。
- Ready(就绪)。进程等待分配CPU。
- Running(运行)。指令正在执行。
- Waiting(等待)。进程正在等待某些事件发生。
- Terminated(终止)。进程执行完毕。
另外,进程状态之间的转换特别注意的是以下几个:
- 运行–>就绪。当处于running状态的进程在接受中断(特指计时器中断)时,转换到就绪状态。
- 运行–>等待。当进程正在运行,受到I/O中断或者其他事件时,该进程进入到等待状态。
进程调度
进程调度可以分为两种,分别为:
- 长程调度
- 短程调度
长程调度又被称之为作业调度,其主要是选择可以进入就绪队列的进程。短程调度又被称之为CPU调度,其主要是选择下一个可以进入Running状态的进程。
由于CPU的运算速度相当之快,进程的运行在进行快速的切换,因此短程调度的切换频率相当之快;而由于长程调度控制了多道程序的道,相对而言并没有那么快。
这样的设计很有可能会造成CPU的紧张,因此引入了中程调度的方式。中程调度也就是将内存中处于阻塞状态的进程切换到外存上挂起,降低了多道程序的度。当这些进程重新具备条件时,再从外存上调入内存。
进程分类
按照不同的参考标准,进程的分类方式也多种多样,下面介绍三种典型的进程调度:
根据运行过程中进程处于的模态可以分为:
- 系统进程。在管态下运行。
- 用户进程。在用户态下运行。
根据该进程执行的计算量与I/O操作的比例分为:
- CPU进程。该进程进行计算的任务明显多于进行I/O操作的任务。
- I/O进程。该进程的大部分任务都是用来执行I/O操作。
根据进程是否会(could)接受其他进程的干扰可以分为:
- 独立进程(Independent Process)
- 协同进程(Cooperating Process)
提到这里,可能会有疑问,刚才不是才说到进程的很重要特征就是其独立性吗?为何会在这里有协同进程的概念?很简单的道理,因为它有用!
进程见的协同主要是可以是信息在进程之间相互共享而不是干扰,提升运算的效率,另外一方面便于将各个进程进行模块化。
总结
这篇文章介绍了进程的基本概念、突出特点,同时比较了其与程序之间的区别,同时说明了其调度的方式。最后对进程进行了分类。下一篇文章中将主要介绍进程之间的通信机制。