2019-09-08
进程的概念
程序(program)描述计算机所要完成的具有独立功能的,并在时间上按严格次序前后相继的计算机操作序列集合,是一个静态的概念。
把一个具有独立功能的程序独占处理机直至最终结束的过程称为程序的顺序执行。
程序的并发执行:一组在逻辑上互相独立的程序或程序段在执行过程中,其执行时间在客观上互相重叠,即一个程序段的执行尚未结束,另一个程序段的执行已经开始的这种执行方式。
程序的并发执行不同于程序的并行执行。程序的并行执行是指一组程序按独立的、异步的速度执行。并行执行不等于时间上的重叠。
进程的定义:并发执行的程序在执行过程中分配和管理资源的基本单位。
进程和程序的区别和联系:
- 进程是一个动态概念,而程序则是一个静态概念。程序是指令的有序集合,没有任何执行的含义。而进程则强调执行过程,它动态地被创建,并被调度执行后消亡。如果把程序比作菜谱,那么进程则是按照菜谱炒菜的过程。
- 进程具有并发特征,而程序没有。由进程的定义可知,进程具有并发特征的两个方面,即独立性和异步性。也就是说,在不考虑资源共享的情况下,各进程的执行是独立的,执行速度是异步的。显然,由于程序不反映执行过程,所以不具有并发特征。
- 进程是竞争计算机系统资源的基本单位,从而其并发性受到系统自己的制约。这里,制约就是对进程独立性和异步性的限制。
- 不同的进程可以包含同一程序,只要该程序所对应的数据集不同。
进程的描述
一个进程是一个程序对某个数据集的执行过程,是分配资源的基本单位。系统中需要有描述进程存在和能够反映其变化的物理实体,即进程的静态描述。进程的静态描述由 3 部分组成:进程控制块(PCB),有关程序段 和 该程序段对其进行操作的数据结构集。进程控制块包含了有关进程的描述信息、控制信息以及资源信息,是进程动态特征的集中反映。系统根据 PCB 感知进程的存在,通过 PCB 中所包含的各项变量的变化掌握进程所处的状态,以达到控制进程活动的目的。由于进程的 PCB 是系统感知进程的唯一实体,因此,在几乎所有的多道操作系统中,一个进程的 PCB 结构都是全部或部分常驻内存的。
进程控制
进程控制,就是系统使用一些具有特定功能的程序段来创建、撤销进程以及完成进程各状态间的转换,从而达到多进程高效率并发执行和协调、实现资源共享的目的。
一般地,把 系统态(管态) 下执行的某些具有特定功能的程序段称为 原语。原语可分为两类:一类是 机器指令级 的,其特点是执行期间不允许中断,在操作系统中,它是一个不可分割的基本单位;另一类是 功能级 的,其特点是作为原语的程序段不允许并发执行。
进程同步
一次只允许一个进程使用的资源称为 临界资源。
进程间为了完成一个共同的目标,彼此间存在互相合作的协同工作关系,有前后次序的直接制约关系,称为进程的同步。
同步与互斥的异同点:
- 相同点:两者都是并发进程在执行的时间顺序上,相互制约的表现。
- 不同点:互斥的进程不规定进入临界区的先后顺序,同步的进程必须按照严格的先后次序执行。互斥的进程一般不知道对方存在,同步进程不仅知道对方存在,还需要与之通信。
进程通信
通信意味着在进程间传送数据。操作系统可以被看作是由各种进程组成的。这些进程都具有各自的独立功能,且大多数被外部需要而启动执行。一般来说,进程间的通信根据通信内容可以划分为两种,即控制信息的传送与大批量数据的传送。有时,也把进程间控制信息的交换称为低级通信,而把进程间大批量数据的交换称为高级通信。低级通信一般只传送一个或几个字节信息,以达到控制进程执行速度的作用;高级通信则要传送大量数据,其目的不是为了控制进程的执行速度,而是为了交换信息。
在单机系统中,进程间通信可分为 4 种形式:
- 主从式
- 会话式
- 消息或邮箱机制
- 共享存储区方式
管道
进程通信的实例之一是 UNIX 系统的管道通信。UNIX 系统从 System V 开始,提供有名管道和无名管道两种数据通信方式。
无名管道为建立管道的进程及其子孙提供一条以比特流方式传送消息的通信管道。该管道在逻辑上被看作管道文件,在物理上则由文件系统的高速缓冲区构成,而很少启动外设。
死锁问题
死锁的起因是并发进程的资源竞争(执行的顺序不当)。产生死锁的根本原因在于系统提供的资源个数少于并发进程所要求的该类资源数。显然,由于资源的有限性,不可能为所有要求资源的进程无限制地提供资源。但是,可以采用适当的资源分配算法,以达到消除死锁的目的。
产生死锁的必要条件
- 互斥条件。并发进程所要求和占有的资源是不能同时被两个以上进程使用或操作的,进程对它所需要的资源进行排他性控制。
- 不剥夺条件。进程所获得的资源在未使用完毕之前,不能被其他进程强行剥夺,而只能由获得该资源的进程自己释放。
- 部分分配。进程每次申请它所需要的一部分资源,在等待新资源的同时,继续占用已分配到的资源。
- 环路条件。存在一种进程循环链,链中每一个进程已获得的资源同时被下一个进程所请求。
显然,只要使上述 4 个必要条件中的某一个不满足,上述就可以消除。只要上述发生,这 4 个条件同时成立。
线程
进程是为了提高 CPU 的执行效率,减少因为程序等待带来的 CPU 空转以及其他计算机软硬件资源的浪费而提出来的。进程是为了完成用户任务所需要的程序的一次执行过程以及为其分配资源的一个基本单位。
为了减少进程切换和创建的开销,提高执行效率和节省资源,人们在操作系统中引入了 线程 的概念。
线程是进程的一部分。与进程相同,线程也是 CPU 调度的一个基本单位。一个没有线程的进程可以被看作是单线程的,即进程的执行过程是线状的。
线程和进程的区别
虽然进程和线程都是处理机调度的基本单位,但是,线程的改变只代表了 CPU 执行过程的改变,而进程所拥有的资源没有发生变化。或者说,处了 CPU 之外,计算机内的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。
进程是系统中所有资源分配时的基本单位。
进程拥有一个完整的虚拟地址空间。
进程不依赖线程而独立存在。
反之,线程是进程的一部分,它没有自己的地址空间,它和进程内的其他进程一起共享分配给该进程的所有资源。