进程的定义
1、进程是程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位。
2、进程是一个动态概念,而程序则是一个静态概念。
3、同一个程序多次执行对应多个进程。
4、进程的特征:并行性、动态性(进程最基本特征)、独立性(进程是能独立运行、独立获得资源、独立接受调度的基本单位)、异步性(各进程以不可预知的速度向前推进,可能会导致运行结果的不确定性)、结构性。
进程的类型
如果说操作系统是由众多功能模块构成的大型程序的话,同用户程序一样,也需要在处理机上运行(运行的单位也是进程),只是他们各自的目的不一样。因此,可以将进程分成系统进程和用户进程
(1)系统进程:系统进程属于操作系统的一部分,用于完成系统的某些功能。在现代操作系统中设置了很多系统进程,它们都运行在管态。由于系统进程是用于管理和维护操作系统的任务,所以他们的优先级一般高于用户进程。
(2)用户进程:用户进程一般是用户从外存调入内存后,通过建立相应的信息结构成为系统资源分配和调度的运行实体。所谓的用户进程,不一定是指用户随便写的程序,例如,用户调用C语言的编译程序对其所编写的程序进行编译,而编译程序的运行是在用户态下运行的。从系统层次上看,在操作系统之上运行的应用进程均成为用户进程。
进程控制块和状态转换
对于控制和管理的基本单位--进程,系统中需要有描述进程存在和能够反映其变化的物理实体,它由三部分组成:进程控制块PCB、进程描述表、有关程序段和该程序段对其进行操作的数据结构集。
(1)进程控制块PCB。进程控制块是操作系统用于控制和管理进程的一种数据结构,是进程存在的唯一标志。因此只有操作系统可以访问,而用户是不可感知,也是无法访问的。它属于系统空间。
PCB里包含的信息:
标识信息(是唯一识别一个进程,也是在系统中存在的唯一标志)、处理机状态信息、进程调度信息、进程控制信息
(2)程序代码:程序是进程执行的实体。
(3)数据集合:一般是进程私用的,包括局部变量、栈等数据结构。
程序代码和数据集合是给进程自己使用的
进程控制块包含了有关进程的描述信息,控制信息以及资源信息,是进程动态特征的集中反映。在几乎所有多道操作系统中,一个进程的PCB结构都是全部或部分常驻内存。
在创建一个进程时,应首先创建其PCB,然后才能根据PCB中信息对进程实施有效的管理和控制。当一个进程完成其功能之后,系统则释放PCB,进程也随之消亡。
进程状态及其转换
进程在生命周期内至少具有三种基本状态:执行状态、阻塞状态和就绪状态
(1)运行状态。运行状态是系统内一个进程调度到了处理机CPU正在运行的状态。在单处理机系统内,显然,只能有一个进程处于运行状态;而在多处理机系统内,可有多个进程处于运行状态,但运行状态进程的个数一般少于处理机的个数
(2)就绪状态。就绪状态是指进程可运行(处于就绪态的进程已经具备运行条件,只是没有空闲cpu,就暂时不能运行),只是处理机被其他进程占用。处于这种状态的进程,其他运行条件都已经满足,正在等待分派处理机。
(3)阻塞状态:指进程因等待系统内某些事件的发生而暂时无法运行。这与处在就绪状态的进程不同,被阻塞的进程由于不具备运行条件,即使CPU空闲也无法在处理机上运行。
(4)新建状态:对应于刚刚定义的进程,还未进入就绪队列的状态,此时系统还没完全将其进程的全部工作完成(如内存空间尚待分配、初始化PCB等)。
引起进程创建的原因:新的批处理作业、交互登录、操作系统因提供一项服务而创建、由现有的进程派生
(5)完成状态。完成状态是指进程正常,或非正常结束而终止的状态。处于该状态的进程还未从系统中消失,可能由于一些善后工作尚未完成。但处于这种状态的进程以后不再被调度执行
(7)挂起状态:目的就是使一些进程已占用的系统自愿让出部分,或全部(PCB仍在系统中),以供其他进程利用让出的系统资源,提高系统的整体效率
进程控制
进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建进程、撤销已有进程、实现进程转换等功能。
进程控制是由原语实现的,它的执行具有原子性。
原语的执行具有原子性,即执行过程只能一气呵成,期间不允许被中断。
可以使用“开中断指令”和“关中断指令”这两个特权指令实现原子性。
线程与进程
线程是进程内一个相对独立的执行流,或控制流,是处理机分配的实体。他是一个基本的CPU执行单元,也是程序执行流的最小单位。
(1)调度。在传统进程机制中,进程是资源分配和调度的基本单位;引入线程后,进程是资源分配的基本单位,线程是调度和分派的基本单位。在同一个进程内,线程的切换不会引起进程的切换,而由一个进程中的线程切换到另一个进程中的线程时,才会发生进程切换。
(2)并发度。引入线程后,不仅进程间可以并发执行,而且在一个进程内的多个线程之间,也同样可以并发执行,提高了系统资源利用率和系统吞吐量
(3)系统开销。传统的进程间并发,需要切换进程的运行环境,系统开销很大。线程间并发,如果是同一进程内的线程切换,则不需要切换进程环境,系统开销小,同步和通信也更加容易。
(4)系统资源。在引入线程的操作系统中,线程称为被调度和分派的基本单位。线程基本不拥有资源,只有一些运行所必需的资源,但他可以和进程内其他线程共享进程所拥有的全部资源,即一个进程的代码段、数据段以及系统资源。