标签:进程和线程的定义及区别 线程同步 进程通讯
林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka
进程是在多道程序系统出现以后,为了描述系统内部各作业的活动规律而引进的概念。
由 于多道程序系统所带来的复杂环境,程序本身有了并行性【为了充分利用资源,在主存中同时存放多道作业运行,所以各作业之间是并行的】、制约性【各程序由于 同时存在于主存中,因此他们之间会存在着相互依赖、相互制约的关系。一个是通过中间媒介——资源发生的间接制约关系,一个是各并行程序间需要相互协同而引 起的直接制约关系】和动态性【不论是系统程序还是用户程序,由于他们并行地在系统中运行且有着各种制约关系,因而他们在系统中的状态是不断改变化的动态 性】的特征,造成了程序这个概念【程序是完成某个功能的指令集合,是种静态的概念】无法反映系统中复杂的变化的情况,因而引入了进程的概念。进程是一个具 有一定独立功能的程序关于某个数据集合的一次运动活动。简单的说,进程是表示一个程序执行的有关动态信息。【进程是种动态的概念】
注意,进程一般有三个状态,运行状态、就绪状态和等待状态【或称阻塞状态】;进程只能由父进程建立,系统中所有的进程形成一种进程树的层次体系;挂起命令可有进程自己和其他进程发出,但是解除挂起命令只能由其他进程发出。
传统的进程概念在操作系统中担任两种截然不同的角色:
1.进程是拥有自己资源的单元体。一个进程被分给一个虚拟的地址空间以容纳进程映像,并控制其他为进程运行所需要的I/O资源。
2.进程是被调度分派在处理器上运行的单元体。当多个进程之间进行调度时,就涉及到进程开关的问题。而进程开关要占去不少CPU机时。如与进程有关的表格均要改【包括PCB表,各种队列:阻塞队列,运行队列,就绪队列等,存储管理有关的地址映射及表格,I/O文件的表格等。】,且更为可观的开销是进程的地址空间要进行转换为新被调度的进程的地址空间,另外还有两次模式开关【用户模式——>内核模式——>用户模式】的开销,这些在一定程度上降低了并发进程多带来的利益。
因此人们引进了线程概念,并分派线程完成有关应用程序的执行部分,而进程则承担有关拥有资源的主权部分。故线程是进程内一个相对独立的可调度的执行单元。
1.线程是进程内的一个相对独立的可执行的单元。若把进程称为任务的话,那么线程则是应用中的一个子任务的执行。
2.由于线程是被调度的基本单元,而进程不是调度单元。所以,每个进程在创建时,至少需要同时为该进程创建一个线程。即进程中至少要有一个或一个以上的线程,否则该进程无法被调度执行。
3.进程是被分给并拥有资源的基本单元。同一进程内的多个线程共享该进程的资源。但线程并不拥有资源,只是使用他们。
4.线程是操作系统中基本调度单元,因此线程中应包含有调度所需要的必要信息,且在生命周期中有状态的变化。
5.由于共享资源【包括数据和文件】,所以线程间需要通信和同步机制,且需要时线程可以创建其他线程,但线程间不存在父子关系。
多线程使用的情形:前台和后台工作情况;异步处理工作情况;需要加快执行速度情况;组织复杂工作的情况;同时有多个用户服务请求的情况等。
多线程运行在同一个进程的相同的地址空间内,和采用多进程相比有以下优点:
1.创建和撤销线程的开销较之进程要少。创建线程时只需要建立线程控制表相应的表目,或有关队列,而创建进程时,要创建PCB表和初始化,进入有关进程队列,建立它的地址空间和所需资源等。
2.CPU在线程之间开关时的开销远比进程要少得多。因开关线程都在同一地址空间内,只需要修改线程控制表或队列,不涉及地址空间和其他工作。
3.线程机制也增加了通讯的有效性。进程间的通讯往往要求内核的参与,以提供通讯机制和保护机制,而线程间的通讯是在同一进程的地址空间内,共享主存和文件,无需内核参与。
进程控制块:PCB是操作系统中最重要的数据结构。PCB的作用不但是记录进程的属性信息,以便操作系统对进程进行控制和管理,而且PCB标志着进程的存在,操作系统根据系统中是否有该进程的进程控制块PCB而知道该进程存在与否。系统建立进程的同时就建立该进程的PCB,在撤销一个进程时,也就撤销其PCB,故进程的PCB对进程来说是它存在的具体的物理标志和体现。一般PCB包括以下三类信息:进程标识信息;处理器状态信息;进程控制信息。
在基于多线程基础上的系统中进程控制块和线程控制块都是采用面向对象技术来开发的,把进程和线程均视作是对象。因而PCB和TCB均用进程对象和线程对象来描述。在进程管理和线程管理中,往往都用链指针将线程控制块或线程对象【进程控制块或进程对象】 ,按他们的所处状态链结成相应的线程队列【进程队列】来加以管理。如就绪队列,阻塞队列,运行队列等。
(1)易于调度。
(2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。
(3)开销少。创建线程比创建进程要快,所需开销很少。。
(4)利于充分发挥多处理器的功能。通过创建多线程进程(即一个进程可具有两个或更多个线程),每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分运行。
进程和线程的关系
(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程是操作系统可识别的最小执行和调度单位。
(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。 同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。
(3)处理机分给线程,即真正在处理机上运行的是线程。
(4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
处理机管理是操作系统的基本管理功能之一,它所关心的是处理机的分配问题。也就是说把CPU(中央处理机)的使用权分给某个程序,通常把这个正准备进入内存的程序称为作业,当这个作业进入内存后我们把它称为进程。
自从60年代提出进程概念,在操作系统中一直都是以进程作为能独立运行的基本单位的。直到80年代中期,人们又提出了比进程更小的能独立运行的基本单位 ——线程;试图用它来提高系统内程序并发执行的速度,从而可进一步提高系统的吞吐量。近几年,线程概念已得到了广泛应用,不仅在新推出的操作系统中,大多 都已引入了线程概念,而且在新推出的数据库管理系统和其它应用软件中,也都纷纷引入了线程,来改善系统的性能。
如果说,在操作系统中引入进程的目的,是为了使多个程序并发执行,以改善资源利用率及提高系统的吞吐量;那么,在操作系统中再引入线程则是为了减少程序并 发执行时所付出的时空开销,使操作系统具有更好的并发性。为了说明这一点,我们首先回顾进程的两个基本属性:
(1)进程是一个可拥有资源的独立单位;
(2)进程同时又是——个可以独立调度和分派的基本单位。正是由于进程具有这两个基本属性,才使之成为一个能独立运行的基本单位,从而也就构成了进程并发执行的基础。
然而为使程序能并发执行,系统还必须进行以下的一系列操作:
(1)创建进程。系统在创建进程时,必须为之分配其所必需的、除处理机以外的所有资源。如内存空间、I/0设备以及建立相应的PCB。
(2)撤消进程。系统在撤消进程时,又必须先对这些资源进行回收操作,然后再撤消PCB。
(3)进程切换。在对进程进行切换时,由于要保留当前进程的CPU环境和设置新选中进程的CPU环境,为此需花费不少处理机时间。
简言之,由于进程是一个资源拥有者,因而在进程的创建、撤消和切换中,系统必须为之付出较大的时空开销。也正因为如此,在系统中所设置的进程数目不宜过多,进程切换的频率也不宜太高,但这也就限制了并发程度的进一步提高。
如何能使多个程序更好地并发执行,同时又尽量减少系统的开销,已成为近年来设计操作系统时所追求的重要目标。于是,有不少操作系统的学者们想到,可否将进 程的上述属性分开,由操作系统分开来进行处理。即对作为调度和分派的基本单位,不同时作为独立分配资源的单位,以使之轻装运行;而对拥有资源的基本单位, 又不频繁地对之进行切换。正是在这种思想的指导下,产生了线程概念。
在引入线程的操作系统中,线程是进程中的一个实体,是被系统独立调度和分派的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源 (如程序计数器、一组寄存器和栈),但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程;同一进程中的多个线程 之间可以并发执行。由于线程之间的相互制约,致使线程在运行中也呈现出间断性。相应地,线程也同样有就绪、阻塞和执行三种基本状态,有的系统中线程还有终 止状态。
线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元;而把传统的进程称为重型进程(Heavy—Weight Process),它相当于只有一个线程的任务。在引入了线程的操作系统中,通常一个进程都有若干个线程,至少需要一个线程。下面,我们从调度、并发性、 系统开销、拥有资源等方面,来比较线程与进程。
1.调度
在传统的操作系统中,拥有资源的基本单位和独立调度、分派的基本单位都是进程。而在引入线程的操作系统中,则把线程作为调度和分派的基本单位。而把进程作 为资源拥有的基本单位,使传统进程的两个属性分开,线程便能轻装运行,从而可显著地提高系统的并发程度。在同一进程中,线程的切换不会引起进程的切换,在 由一个进程中的线程切换到另一个进程中的线程时,将会引起进程的切换。
2.并发性
在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间,亦可并发执行,因而使操作系统具有更好的并发性,从而能更有效地使 用系统资源和提高系统吞吐量。例如,在一个未引入线程的单CPU操作系统中,若仅设置一个文件服务进程,当它由于某种原因而被阻塞时,便没有其它的文件服 务进程来提供服务。在引入了线程的操作系统中,可以在一个文件服务进程中,设置多个服务线程,当第一个线程等待时,文件服务进程中的第二个线程可以继续运 行;当第二个线程阻塞时,第三个线程可以继续执行,从而显著地提高了文件服务的质量以及系统吞吐量。
3.拥有资源
不论是传统的操作系统,还是设有线程的操作系统,进程都是拥有资源的一个独立单位,它可以拥有自己的资源。一般地说,线程自己不拥有系统资源(也有一点必 不可少的资源),但它可以访问其隶属进程的资源。亦即,一个进程的代码段、数据段以及系统资源,如已打开的文件、I/O设备等,可供问一进程的其它所有线 程共享。
4.系统开销
由于在创建或撤消进程时,系统都要为之分配或回收资源,如内存空间、I/o设备等。因此,操作系统所付出的开销将显著地大于在创建或撤消线程时的开销。类 似地,在进行进程切换时,涉及到整个当前进程CPU环境的保存以及新被调度运行的进程的CPU环境的设置。而线程切换只须保存和设置少量寄存器的内容,并 不涉及存储器管理方面的操作。可见,进程切换的开销也远大于线程切换的开销。此外,由于同一进程中的多个线程具有相同的地址空间,致使它们之间的同步和通信的实现,也变得比较容易。在有的系统中,线程的切换、同步和通信都无须操作系统内核的干预 。
标签:进程和线程的定义及区别 线程同步 进程通讯
原文地址:http://blog.csdn.net/evankaka/article/details/44366239