进程与线程

进程与线程

一、进程的概念和特征

进程的概念

  在多道程序环境下,允许多个程序并发执行,此时他们将失去封闭性,并具有间断性和不可再现性的特征。为此引入了进程的概念,以便更好地描述和控制程序的并发执行,实现操作系统的并发行和共享性。为此引入了进程的概念,以便更好地描述和控制程序的并发执行,实现操作系统的并发性和共享性。为了是参与并发执行的程序能独立的运行,必须为之配置一个专门的数据结构,称之为进程控制块(process control block),系统利用PCB来描述进程的基本情况和运行状态,进而控制和管理进程。

  相应的,有程序段、相关数据段和PCB三部分构成了进程映像(进程实体)。所谓创建进程,实质上是创建进程映像中的PCB;而撤销进程,实质上是撤销进程的PCB。值得注意的是,进程映像是静态的,进程是动态的

  从不同的角度,进程可以有不同的定义,比较经典的定义有:

1) 进程是程序的一次执行过程
2) 进程是一个程序及其数据在处理器上顺序执行时所发生的活动。
3) 进程是具有独立功能的程序在一个数据集合上运行的过程,他是系统进行资源分配和调度的一个独立单位。

  在引入了进程实体的概念后,我们可以把传统的操作系统中的进程定义为:“进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位”。

进程的特征

  进程是由多程序的并发执行而引出的,他和程序是两个截然不同的概念。进程的基本特征是对比单个程序的顺序执行提出的,也是对进程管理提出的基本要求。

1) 动态性:进程是程序的一次执行,他有着创建、活动、暂停、终止等过程,具有一定的生命周期,是动态的产生、变化和消亡的。动态性是进程最基本的特征。
2) 并发性:至多个进程实体,同存于内存中,能在一段时间内同时运行,并发性是进程的重要特征,同时也是操作系统的重要特征,引入进程的目的就是为了是程序能与去其他进程的程序并发执行,以提高资源利用率。
3) 独立性:指进程实体是一个能独立运行、独立获得资源和独立接收调度的基本单位。范围建立PCB的程序都不能作为一个独立的单位参与运行。
4) 异步性:由于进程的相互制约,是进程具有执行的间断性。也即进程按各自独立的、不可预知的速度向前推进。异步性会导致执行结果不可再现性,为此,在操作系统中必须配置相应的进程同步机制。
5) 结构性:每个进程都配置一个PCB对其进行描述。从结构上来看,进程实体是由程序段、数据段和进程控制端三部分组成的。

二、进程的状态与转换

  进程在其生命周期内,由于系统中个进程之间的相互制约关系以及系统的运行环境的变化,使得进程的状态也在不断地发生着变化。通常进程有以下五种状态。前三种是进程的基本状态。

1) 运行状态:进程正在处理器上运行。在单处理器的环境下,每一时刻最多只有一个进程处于运行状态。
2) 就绪状态:进程已处于准备运行的状态,即进程获得了除CPU之外的一切所需资源,一旦得到处理器即可运行。
3) 阻塞状态:又称为等待状态:进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理器),或等待输入输出的完成。及时处理器空闲,该进程也不能运行。
4) 创建状态:进程正在被创建,尚未转到就绪状态。创建进程通常需要多个步骤:首先申请一个空白的PCB,并向PCB中填写一些控制和管理进程的信息;然后由系统为该进程分配运行时所必须的资源;最后把该进程转入到就绪状态。
5) 结束状态:进程正在从系统中消失,这可能是进程正常结束或其他原因中断退出运行。当进程需要结束运行时,系统首先必须置该进程为结束状态,然后再进一步处理资源释放和回收工作。

  注意区别就绪状态和等待状态:就绪状态是指进程仅缺少处理器,只要活得处理器资源就立即执行;而等待状态是指进程需要其他资源或等待某一事件,及时处理器空闲也不能运行。

三、进程控制

  进程控制的主要功能是对系统中所有进程实施有效地管理,她具有创建新进程、撤销已有进程、实现进程状态转换等功能。在操作系统中,一般把进程控制用的程序段称为原语,原语的特点是执行期间不允许中断,他是一个不可分割的基本单位。允许一个进程创建另一个进程。

  操作系统创建一个新进程的过程如下(创建原语):

1) 为新进程分配一个为我一个进程标示号,并申请一个空白的PCB。
2) 为进程分配资源,为新进程的程序和数据,以及用户占分配必要的空间。
3) 初始化PCB,主要包括初始化标识信息、初始化处理器状态信息和初始化处理器控制信息,以及设置进程的空闲及。
4) 如果进程就绪队列能够接纳新进程,就将新进程插入到就绪队列,等待被调度运行。

  引起进程终止的时间主要有:正常结束、表示进程的任务已经完成和准备退出运行。异常结束是指进程在运行时,发生了某种异常事件,是程序无法继续运行,如:存储区越界、保护措、非法指令、特权指令错、IO故障等。外界干预是指进程外界的请求而终止,如操作员或操作系统干预、父进程请求和父进程终止。

  操作系统终止进程的过程如下:(撤消原语)
1) 根据被终止进程的标示符,检索PCB,从中读出该进程的状态。
2) 若被终止进程处于执行状态,立即终止该进程的执行,将处理器资源分配给其他进程。
3) 若该进程还有子进程,则应将其所有子进程终止。
4) 将该进程所拥有的资源、或归还给父进程或归还给操作系统。
5) 将该PCB从所在队列(链表)中删除。

进程的阻塞和唤醒

  正在执行的进程,犹豫期待的某些时间为发生,如请求系统资源失败、等待某种操作的完成、新数据尚未到达或无心工作可做等,则由系统自动执行阻塞原语,使自己由运行状态变为阻塞状态。可见,进程的阻塞是进程自身的一种主动行为。

  阻塞原语的执行过程为:找到将要被阻射进城的标识号对应的PCB,如果该进程为运行状态,则保护其现场,将其状态改为阻塞状态,停止运行,并把该PCB插入响应时间的等待队列中去;若为就绪状态,则将其状态改为阻塞状态,把它溢出就绪队列,插入到等待队列中去。

  当阻塞进程所期待的时间出现时,如它所启动的IO操作已完成或其所期待的数据已到达,则有关进程(比如,提供数据的进程),调用唤醒原语,将等待该事件的进程唤醒,唤醒原语的执行过程是:在该事件的等待队列中找到相应进程的PCB,然后把该PCB插入到就绪队列
中,等待调度程序调度。

  需要注意的是,Block原语和Wakeup原语是一对作用刚好相反的原语,必须成对使用。Block原语是由被阻塞进程自我调用实现的,而Wakeup原语则是由一个与被唤醒进程相合作或被其他相关进程调用实现的。

  无论什么样的进程操作,都是在内核执行的。

  进程切换是指当前正在运行的进程被转换到其他状态后,再回到运行继续执行的过程,这个过程中,进程的运行环境产生了实质性的变化。进程切换的过程如下:

1) 保存处理器上下文,包括程序计数器和其他寄存器。
2) 更新PCB信息。
3) 把进程的PCB移入相应的队列,如就绪、在某时间阻塞等队列。
4) 选择另一个进程执行,并更新其PCB。更新内存管理的数据结构。
5) 恢复处理器的上下文。

四、进程的组织

  进程是操作系统的资源分配和独立运行的基本单位。

进程控制块

  进程创建时,操作系统就新建一个PCB结构,它之后就常驻内存,任意时刻可以存取。在进程结束时删除。PCB是进程实体的一部分,是进程存在的唯一标识。

  PCB主要包括:进程描述信息、进程控制和管理信息、资源分配清单和处理器相关信息等。在一个系统中,通常存在这许多进程,有的处于就绪状态,有的处于阻塞状态,而且阻塞的原因各不相同。为了方便进程的调度和管理,需要将各进程的PCB用适当的方法组织起来。目前,常用的组织方式有连接方式和索引方式两种。连接方式将同一状态的PCB连接成一个队列,不同状态对应不同的队列,也可以把处于阻塞状态的进程的PCB,根据其阻塞原因的不同,排成多个阻塞队列。索引方式是将同一状态的进程组织在一个索引表中,索引表的表项只想相应的PCB,不同状态对应不同的索引表,如就绪索引表和阻塞索引表等。

  程序段就是能被进程调度程序调度到CPU执行的程序代码段。注意,程序可以被多个进程共享,就是说多个进程可以运行同一个程序。一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行时产生的中间或最终结果。

五、进程的通信

  进程通信就是进程之间的数据交换。PV操作时低级通信方式2,高级通信方式是指以较高的效率传输大量数据的通信方式。高级通信方法可分为共享存储、消息传递和管道通信三大类。

共享存储

  在通信的进程之间存在着一款可以直接访问的共享空间,通过对这块共享空间的读写操作实现进程之间的信息交换。在共享存储方法中,需要使用同步互斥工具。

  需要注意的是:用户进程空间一般都是相互独立的,要想让两个用户进程共享空间,必须通过特殊系统调用实现,而进程内的线程是自然共享进程空间的。

消息传递

  在消息传递系统中,进程间的数据交换,是以格式化的小心Message为单位的。

管道通信

  管道通信是消息传递的一种特殊方式。。所谓管道,就是用于连接一个读进程和一个写进程以实现他们之间通信的一个共享文件,又名为pipe文件。向管道或共享文件提供输入的发送进程,以字符流的形势将大量的数据送入写管道;而接收管道输出的接收进程,则从管道中接受数据。为了协调双方的通信,关到极致必须他提供以下撒按方面的协调能力:互斥、同步和确定对方存在。

六、线程概念和多线程模型

  引入进程的目的,是为了是多道程序能并发执行,以提高资源利用率和系统吞吐量;而引入线程,则是为了减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能。

  线程最直接的理解就是“轻量级进程”,它是一个基本的CPU执行单元,也是程序执行流的最小单元,由线程ID、程序计数器、寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位。进程只作为除CPU以外的系统资源的分配单元,线程则作为处理器的分配单元。线程也有就绪、阻塞和运行三种基本状态。

线程和进程的比较

1) 调度:在引入线程的操作系统中,线程是独立调度的基本单位,进程是资源拥有的基本单位。
2) 拥有资源:进程是拥有资源的基本单位,而线程不拥有系统资源,单线程可以认为其隶属进程的系统资源。
3) 并发性:在引入线程的操作系统中,不仅进程之间可以并发执行,线程之间也可以并发执行,从而使操作系统具有更好的并发性,大大提高了系统的吞吐量。
4) 系统开销:线程开销极小。
5) 地址空间和其他资源:进程的地址空间之间相互独立,同一进程的各线程间共享进程的资源,进程内的线程对进程外的其他进程不可见。
6) 通信方面:进程间通信需要进程同步和互斥手段的辅助,以保证数据的一致性,而线程间可以直接读写进程数据段来进行通信。

线程的属性

  在多线程操作系统中,把线程作为独立运行的基本单位。此时的进程已不是一个基本可执行的实体。线程的主要属性如下:

1) 线程是一个轻型实体,它不拥有系统资源,但每个线程都应有一个唯一的标识符和一个线程控制块,线程控制块记录了线程执行的寄存器和栈等现场情况。
2) 不同的线程可以执行相同的程序,即同一个服务程序被不同的用户调用时,操作系统为他们创建不同的线程。
3) 统一进程中的各个线程共享该进程所拥有的系统资源。
4) 线程是处理器的独立调度单位,多个线程是可以并发执行的。
5) 一个线程被创建后便开始了它的生命周期,直至终止,线程在生命周期内会经历等待态、就绪态和运行态等各种状态变化。

线程的实现方法

  线程的实现可以分为两类:用户级线程和内核级线程。

多线程模型

  有些系统同时支持用户线程和内核线程,由此产生了不同的多线程模型,即实现用户级线程和内核级线程的连接方式。
1) 多对一模型。多对一模型将多个用户级线程映射到一个内核级线程。线程管理在用户空间完成。
2) 一对一模型。
3) 多对多模型:克服了多对一模型的并发度不高的缺点,又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点。

原文地址:https://www.cnblogs.com/albertrui/p/8796046.html