进程和线程的定义及区别
一, 进程的概念
进程是在多道程序系统出现以后,为了描述系统内部各作业的活动规律而引进的概念。
由于多道程序系统所带来的复杂环境,程序本身有了并行性【为了充分利用资源,在主存中同时存放多道作业运行,所以各作业之间是并行的】、制约性【各程序由于 同时存在于主存中,
因此他们之间会存在着相互依赖、相互制约的关系。一个是通过中间媒介——资源发生的间接制约关系,一个是各并行程序间需要相互协同而引 起的直接制约关系】和动态性【不论是系统程
序还是用户程序,由于他们并行地在系统中运行且有着各种制约关系,因而他们在系统中的状态是不断改变化的动态 性】的特征,造成了程序这个概念【程序是完成某个功能的指令集合,是
种静态的概念】无法反映系统中复杂的变化的情况,因而引入了进程的概念。进程是一个具 有一定独立功能的程序关于某个数据集合的一次运动活动。简单的说,进程是表示一个程序执行的
有关动态信息。【进程是种动态的概念】
注意,进程一般有三个状态,运行状态、就绪状态和等待状态【或称阻塞状态】;进程只能由父进程建立,系统中所有的进程形成一种进程树的层次体系;挂起命令可有进程自己和其他进程
发出,但是解除挂起命令只能由其他进程发出。
二, 线程的概念
传统的进程概念在操作系统中担任两种截然不同的角色:
1.进程是拥有自己资源的单元体。一个进程被分给一个虚拟的地址空间以容纳进程映像,并控制其他为进程运行所需要的I/O资源。
2.进程是被调度分派在处理器上运行的单元体。当多个进程之间进行调度时,就涉及到进程开关的问题。而进程开关要占去不少CPU机时。如与进程有关的表格均要改【包括PCB表,各种队列
:阻塞队列,运行队列,就绪队列等,存储管理有关的地址映射及表格,I/O文件的表格等。】,且更为可观的开销是进程的地址空间要进行转换为新被调度的进程的地址空间,另外还有两次
模式开关【用户模式——>内核模式——>用户模式】的开销,这些在一定程度上降低了并发进程多带来的利益。
因此人们引进了线程概念,并分派线程完成有关应用程序的执行部分,而进程则承担有关拥有资源的主权部分。故线程是进程内一个相对独立的可调度的执行单元。
三,线程的性质
1.线程是进程内的一个相对独立的可执行的单元。若把进程称为任务的话,那么线程则是应用中的一个子任务的执行。
2.由于线程是被调度的基本单元,而进程不是调度单元。所以,每个进程在创建时,至少需要同时为该进程创建一个线程。即进程中至少要有一个或一个以上的线程,否则该进程无法被调度
执行。
3.进程是被分给并拥有资源的基本单元。同一进程内的多个线程共享该进程的资源。但线程并不拥有资源,只是使用他们。
4.线程是操作系统中基本调度单元,因此线程中应包含有调度所需要的必要信息,且在生命周期中有状态的变化。
5.由于共享资源【包括数据和文件】,所以线程间需要通信和同步机制,且需要时线程可以创建其他线程,但线程间不存在父子关系。
多线程使用的情形:前台和后台工作情况;异步处理工作情况;需要加快执行速度情况;组织复杂工作的情况;同时有多个用户服务请求的情况等。
四,线程机制的优点:
多线程运行在同一个进程的相同的地址空间内,和采用多进程相比有以下优点:
1.创建和撤销线程的开销较之进程要少。创建线程时只需要建立线程控制表相应的表目,或有关队列,而创建进程时,要创建PCB表和初始化,进入有关进程队列,建立它的地址空间和所需资
源等。
2.CPU在线程之间开关时的开销远比进程要少得多。因开关线程都在同一地址空间内,只需要修改线程控制表或队列,不涉及地址空间和其他工作。
3.线程机制也增加了通讯的有效性。进程间的通讯往往要求内核的参与,以提供通讯机制和保护机制,而线程间的通讯是在同一进程的地址空间内,共享主存和文件,无需内核参与。
五,进程线程的管理
为了对系统中的进程和线程进行管理,不但要有进程控制块PCB,而且要为每个线程均设置一个线程控制块TCB。这些PCB和TCB不但描述和记录了每个进程和线程属性和调度所需的数据,
而且是说明这些进程和线程存在的标志。
进程控制块:PCB是操作系统中最重要的数据结构。PCB的作用不但是记录进程的属性信息,以便操作系统对进程进行控制和管理,而且PCB标志着进程的存在,操作系统根据系统中是否有该进
程的进程控制块PCB而知道该进程存在与否。系统建立进程的同时就建立该进程的PCB,在撤销一个进程时,也就撤销其PCB,故进程的PCB对进程来说是它存在的具体的物理标志和体现。一般
PCB包括以下三类信息:进程标识信息;处理器状态信息;进程控制信息。
在基于多线程基础上的系统中进程控制块和线程控制块都是采用面向对象技术来开发的,把进程和线程均视作是对象。因而PCB和TCB均用进程对象和线程对象来描述。在进程管理和线程管理
中,往往都用链指针将线程控制块或线程对象【进程控制块或进程对象】 ,按他们的所处状态链结成相应的线程队列【进程队列】来加以管理。如就绪队列,阻塞队列,运行队列等
|