最近有很多同学再问进程与线程的区别,传统的进程与现在的多线程OS。今天我来科(扫)普(盲)一下。
进程和线程:
进程和线程:
一.首先我们先对进程加以描述
1.结构特征:
通常的程序是不能够并发执行的。使程序能够独立运行应为之配置一进程控制块,即PCB(process control block).而由程序块,相关的数据段,PCB三部分便组成了进程实体。早期的UNIX版本中,把这三部分叫做进程映像。值得指出的是,很多时候实际上指的就是进程实体,例如所谓的创建进程,就是创建进程实体中的PCB,撤销进程,实质上也就是撤销进程中的PCB。
2.动态特征:
进程实际上就是进程实体的一次执行过程,动态性是进程最基本的特征,表现为:由创建而产生,由调度而执行,由撤销而死亡。可见,进程实体还有一定的生命期,而程序只是一组有序指令的集合,存放于某种介质上,本身并不具备运动的含义,因而使静态的。
3.并发性:多个进程实体同时存在与内存中,能够在一段时间内同时运行。并发性是进程的重要特征,也是OS的重要特征。引入进程的目的就是为了进程实体能够与其他进程实体并发执行,而程序(没有建立PCB)是不能够并发执行的。
4.独立性:
传统的OS里,独立性指的是一个进程实体能够独立的运行,独立的分配资源,独立的接受调度。但是为建立PCB的程序不能作为一个独立的单位参与运行。
5.异步性:
这是指,进程按照各自独立的,不可预知的速度向前推进,或者说进程实体按照异步方式运行。
总归起来进程一共有这三大特点:
(1)进程是程序的一次执行
(2)进程是一个程序及其数据在一个处理机上顺序执行所发生的活动。
(3)进程是一个程序在数据集合上运行的过程,它是系统进行资源分配与调度的一个独立单位
二.进程的三种状态
(1)READY。就绪状态:当进程已经获取完除了CPU以外的所有必要资源以后,只要再获取CPU即可立即执行,进程的这种状态叫做就绪态。当一个系统中的进程有许多个的时候,这时候会把一个进程排成一个队列,成为就绪队列。
(2)执行状态。进程已经获取到CPU,程序正在执行。
(3)阻塞状态。正在执行的进程由于发生某种事件而放弃处理机处于暂停的状态,
处于就绪状态的进程,在程序调度为之分配了CPU之后,该进程便可执行,状态也就有就绪状态装换为执行状态,如果分配给他的时间片已经完成而被暂停执行的时候该状态也就转换为就绪状态,但是如果在执行中遇到了一些事件受阻(进程要求访问临界资源,而该资源正在被其他进程访问的时候),进程状态转化为阻塞状态。
三.在很多系统中进程都只是有这三种状态,但是在后来的系统中又加入了不少的其他状态,其中最重要的是挂起状态。
引起挂起状态的原因有:
(1)终端用户请求。当终端用户发现程序在运行的时候有一些可疑的问题,希望暂时使自己的程序停下来。也就是说使正在进行的进程暂停执行,若此时正处于就绪状态的程序没有执行,那么该程序将不接受调度,以便于用户研究程序的执行情况或者对程序进行修改。我们把这种状态称之为挂起状态。
(2)父进程请求。有时候父进程希望挂起自己的某一个子进程,以便于考察和修改该子进程,或者协调各个子进程之间的活动。
(3)负荷调节的需要。当实时系统的工作负荷比较重,可能已经影响到对实时任务的控制的时候,可由系统将一些不重要的进程挂起,保证系统可以正常的运
(4)操作系统的需要。操作系统有时候希望可以挂起一些进程,以便于检查运行中资源的使用情况或者进行记账。
四.在目前的系统中,为了管理的需要还存在着两种比较常见的进程状态,创建状态和终止状态。
创建一个进程一般要通过两个步骤,首先是创建一个PCB,并且填写必要的管理信息,之后把该进程转入就绪转台并且插入就绪队列中。创建状态的使用确保对进程控制块操作的完整性。也增加了管理的灵活性。
终止状态:进程结束以后或者被其他原因终结,他将进入终止状态。进入终止状态的进程不能够再被执行,但是在操作系统中仍会有一个保留的记录,保存了状态吗和一些计时统计数据,供其他进程收集,一旦其他进程完成了对终止进程信息的提取以后,操作系统将会删除该进程。
五.PCB
(1)PCB的作用:
为了描述和控制进程的运行,系统为每一个进程定义了一个数据结构:进程控制块——process control block 也即PCB。它是进程实体中的一部分,是操作系统最重要的记录型数据结构。PCB记录了操作系统所需要的,描述这个进程当前情况的以及控制进程运行的全部信息。进程控制块的作用是将一个在多道程序环境下不能够独立运行的程序成为一个可以独立运行的基本单位。一个能够与其他进程并发执行的进程。OS根据PCB来对并发执行进行管理,OS在调度某进程执行的时候会从该进程的PCB查找出其现行状态和优先级;在调度到某个进程之后会根据PCB中保留的CPU的状态信息来设置该进程恢复运行的现场,并根据PCB中的程序和数据的内存地址找到对应的程序和数据,当进程被中断的时候又会将这些信息保存到PCB中。系统通过PCB感受到进程的存在,所以PCB是进程存在的唯一标志。
(2)PCB中的信息
在进程控制块中主要有四个方面的信息
1.进程标识符
(1)内部标识符。在所有的操作系统中,都为每一个进程赋予了一个唯一的数字标识符,它通常是一个进程的序号,设置内部标识符主要是为了方便系统的使用。
(2)外部标识符。它是由创建者提供,通常由字母,数字组成,往往是由用户在访问该进程的时候使用。为了描述进程之间的家族关系,还应设置父进程标识以及子进程标识,此外还可以设置用户标识,已指示该用户拥有此进程。
2.处理机状态
处理及的状态信息主要是由各种寄存器的内容组成
3. 进程调度信息
在PCB中存放着一些与进程调度和进程对换的相关信息。其中包括:进程状态,进程优先级,进程调度所需要的其他信息,事件等。
4. 进程控制信息
程序和数据的地址,进程同步与通信机制,资源清单,链接指针:它给出了本进程到下一个进程的PCB的首地址
线程
首先我们来回想一下进程,在对进程进行切换的时候,由于要保留当前进程的CPU环境和设置重新选中的CPU的环境,因而在切换的时候会花费不少的时间。
简言之,由于进程是一个资源的拥有者,在对进程操作的过程中需要花费较大的时间和空间的开销,也正是因为这个原因,系统中设置的进程数量不应该过多,切换的频率也不应该过高。线程技术的出现就是来解决这个问题。
一.二者的比较
首先线程拥有许多传统进程的特征,也正是这个原因,线程也被称之为轻型进程。传统的进程相当于只有一个线程任务,通常进程都拥有若干个线程,但是至少也有一个线程。
(1)调度
传统的操作系统中,都把进程作为调度,分配资源的基本单位,但是在引入线程以后则是把线程当作调度分派的基本单位,而进程则作为资源拥有的基本单位,把传统的进程这两个属性分开,使得线程不再拥有资源,这样线程便能够轻装前进,从而显著的提高系统的并发程度在同一个进程中间线程的切换不会引起进程的切换,但是从一个进程的线程切换到另一个进程的线程就会引起线程的切换。
(2)并发性
在引入了线程的操作系统中,不仅进程可以并发执行,线程也可以并发执行
(3)拥有资源
不论是传统的操作系统还是引入线程的操作系统,进程都是可以拥有资源,是系统拥有资源的基本单位,一般而言,线程不拥有系统资源(当然,还是会有一些必不可少的资源),但是可以访问它所属的的进程的资源,即一个进程的代码段,数据段以及拥有的系统资源。
(4)系统开销
在创建或者撤销进程的时候,系统都要创建回收PCB,分配或者回收资源(内存空间等)。操作系统所付出的开销明显大于线程创建与撤销时的开销。线程之间的切换只涉及到保存和设置少量寄存器内容,不涉及到储存器方面的操作,所以效率以及切换代价远低于进程。此外,同一个进程之内的线程具有相同的地址空间,在同步与通信的实现方面也要比进程容易。
二.线程的属性
在多线程的OS里,通常是一个进程包含多个线程,每个线程都使用CPU的基本单位
(1)轻型实体。线程中的实体除了自身必不可少的系统资源之外不拥有系统资源,线程通常拥有的系统资源叫做TCB,用于指示被执行的指令序列的程序计数器,保留局部变量,少数状态参数和返回地址的一组寄存器的堆栈。
(2)独立调度和分派的基本单位。在多线程的OS中,线程是可以独立运行的基本单位,因而也是可以被独立调度和分派的基本单位。由于线程不拥有系统资源(TCB除外),所以线程之间的切换很迅速。
(3)可并发性。在一个进程中多个线程可以并发的执行。
(4)共享资源性。同一进程下的线程可以共享该线程所拥有的资源。表现为所有的线程都是具有相同的地址空间(这也就是进程的地址空间)。
其他属性。例如线程的状态,创建与终止,同步与通信斗鱼进程类似。最后主要说一下多线程的OS中的进程。
在多线程的OS中,进程已经不再是一个可执行的实体,它的作用主要时用来作为系统资源的分配单位。线程的引入把传统的进程进行分割,使得系统资源和进程的调度与分派进行分离,多线程的OS中,进程负担起了承接系统资源,而任务由线程完成。此外对进程的操作经将会全部作用在线程上,例如挂起某个进程的时候,进程下对应的线程也会被挂起,进程被激活的时候,进程下的所有线程也都会被激活。