1、进程
进程是程序的一次执行,是系统进行资源分配的一个基本单元。每个进程都有自己的进程空间(虚空间)
进程包括:进程控制块(PCB)、程序、数据、工作区
(1)PCB:记录进程的标识、状态和控制信息,是进程的唯一标识,操作系统对进程控制和管理的方式
PCB在内存中以表的形式存储,PCB表,标志着进程的存在,操作系统根据系统中是否有该进程的进程控制块PCB而知道该进程存在与否。
系统建立进程的同时就建立该进程的PCB,在撤销一个进程时,也就撤销其PCB,故进程的PCB对进程来说是它
存在的具体的物理标志和体现。一般PCB包括以下三类信息:进程标识信息;处理器状态信息;进程调度信息;进程控制信息。
(2)工作区:指参数传递和系统调用时的执行环境:
内核栈:进程在内核态下运行的工作区
用户栈:用户态下的工作区
进程一般有三个状态:就绪状态、执行状态和阻塞状态
2、线程:
(1)线程是进程中的一个可执行单元,也可以称为轻量级进程;线程是被调度的基本单元,进程中至少有一个线程,’当进程被初始化后,主线程就建立了。
(2)一个进程可以有多个线程,一个线程必须有一个父进程。线程可以拥有自己的堆栈、程序计数器和局部变量,但是与其它线程共享父进程的系统资源。
(3)一个线程可以撤销另一个线程,在同一个进程中线程是并发执行的。
(4)线程机制的优点:
多线程运行在同一个进程的相同的地址空间内,和采用多进程相比有以下优点:
a.创建和撤销线程的开销小。创建线程时只需要建立线程控制表TCB相应的表目,或有关队列,而创建进程时,要创建PCB表和初始化,进入有关进程队列,建立它的地址空间和所需资源等。
b. CPU在线程之间开关时的开销远小。因开关线程都在同一地址空间内,只需要修改线程控制表或队列,不涉及地址空间和其他工作。
c.线程的通讯更简便。进程间的通讯往往要求内核的参与,以提供通讯机制和保护机制,而线程间的通讯是在同一进程的地址空间内,共享主存和文件,无需内核参与。
d.Java内置了多线程功能支持,操作起来方便
3.进程和线程的区别
(1)调度:
在传统的操作系统中,CPU调度和分派的基本单位是进程。而在引入线程的操作系统中,则把
线程作为CPU
调度和分派的基本单位,
进程则作为
资源拥有的基本单位,从而使传统进程的两个属性分开,线程编程轻装运行,这样可以显著地
提高系统的并发性。
同一进程中线程的切换不会引起进程切换,从而避免了昂贵的系统调用,但是在由一个进程中的线程切换到另一进程中的线程,依然会引起进程切换。
(2)并发性:
在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间也可以并发执行,因而使操作系统具有更好的
高并发性,从而更有效地
提高系统资源和系统的吞吐量。例如,在一个为引入线程的单CPU操作系统中,若仅设置一个文件服务进程,当它由于某种原因被封锁时,便没有其他的文件服务进程来提供服务。在引入线程的操作系统中,可以在一个文件服务进程设置多个服务线程。当第一个线程等待时,文件服务进程中的第二个线程可以继续运行;当第二个线程封锁时,第三个线程可以继续执行,从而显著地提高了文件服务的质量以及系统的吞吐量。
(3)拥有资源:
进程都是拥有系统资源的一个独立单位,他可以拥有自己的资源。一般地说,线程可以有自己的程序计数器、局部变量、堆栈,但是要共享进程的系统资源,它可以访问其隶属进程的资源,亦即一个进程的代码段、数据段以及系统资源(如已打开的文件、I/O设备等),可供同一个进程的其他所有线程共享。
(4)独立性:
在同一进程中的不同线程之间的独立性要比不同进程之间的独立性低得多。这是因为为防止进程之间彼此干扰和破坏,
每个进程都拥有一个独立的地址空间和其它资源,除了共享全局变量外,不允许其它进程的访问。但是同一进程中的不同线程往往是为了提高并发性以及进行相互之间的合作而创建的,它们共享进程的内存地址空间和资源,如每个线程都可以访问它们所属进程地址空间中的所有地址,如一个线程的堆栈可以被其它线程读、写,甚至完全清除。
(5)系统开销:
由于在创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O设备等。因此,操作系统为此所付出的开销将显著地大于在创建或撤消线程时的开销。类似的,在进程切换时,涉及到整个当前进程CPU环境的保存环境的设置以及新被调度运行的CPU环境的设置,而线程切换只需保存和设置少量的寄存器的内容,并不涉及存储器管理方面的操作,可见,进程切换的开销也远大于线程切换的开销。此外,由于同一进程中的多个线程具有相同的地址空间,致使他们之间的同步和通信的实现也变得比较容易。在有的系统中,现成的切换、同步、和通信都无需操作系统内核的干预。
(6)支持多处理机系统:
在多处理机系统中,对于传统的进程,即单线程进程,不管有多少处理机,该进程只能运行在一个处理机上。但对于多线程进程,就可以将一个进程中的多个线程分配到多个处理机上,使它们并行执行,这无疑将加速进程的完成。因此,现代处理机OS都无一例外地引入了多线程