一、进程
1、进程的概念
进程是操作系统实现并发执行的重要手段,也是操作系统为程序提供的重要运行环境抽象。
进程最根本的属性是动态性和并发性。以下是从不同角度对进程的解释:
a、进程是程序的一次执行
b、进程是可以与其他计算并发执行的计算
c、进程是一个程序程序及其数据在处理器上顺序执行时发生的活动
d、进程是程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位
e、进程是进程实体的一次活动
f、进程是支持程序运行的机制
2、进程的定义
进程是具有一定功能的程序在一个数据结合上的运行过程,它是系统进行资源分配和调度管理的一个可并发执行的基本单位。
3、进程的基本特性
a、动态性:进程的实质是程序的一次执行过程,它由系统创建而产生,能够被调度而执行,因申请的共享资源被其他进程占用
而暂停,完成任务后被撤销。动态性是进程最重要的特性。
b、独立性:系统内多个进程可以并发执行,引入进程的目的也是为了使系统某个程序能够和其他进程并发执行。
c、异步性:进程由于共享资源和协同合作,因此产生了相互制约的关系,进程实体通过进程管理以异步的方式使用处理器和其
他资源,系统必须统一调度,依据一定的算法来保证各个进程能够协同运行并共享处理器和其他资源。
d、结构特性:系统中运行的进程实体通常由程序、数据和一个PCB(进程控制块)组成。
4、进程的基本状态和转换
上图中的 运行——>阻塞中的事件请求即等待资源、事件
阻塞——>就绪中的事件发生即事件发生,资源释放。
二、线程
1、线程的概念
线程是进程中实施调度和分派的基本单位。
操作系统提供线程的目的就是为了方便高效地实现并发处理(进一步提高并发度)。
2、线程分类
线程一般分为用户级线程和核心级线程。
3、线程池
设计思想:在创建一个进程时,相应地创建若干个线程,将它们放在一个缓冲池中,这些线程在等待工作。当服务器
接收到一个请求时,系统就唤醒其中的一个线程,并将请求传给它,由这个线程进行服务。当完成任务后,线程重新被放入线程
池中,等待下面新的请求和服务。如果线程池中没有可用的线程,服务器就要等待,直到有一个线程被释放。
引入线程的好处
(1)易于调度。
(2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。
(3)开销少。创建线程比创建进程要快,所需开销很少。。
(4)利于充分发挥多处理器的功能。通过创建多线程进程(即一个进程可具有两个或更多个线程),每个线程在一个处理器上运行,从而
实现应用程序的并发性,使每个处理器都得到充分运行。
三、线程和进程的关系
1、一个进程可以有多个线程,但至少有一个线程;而一个线程只能在一个进程的地址空间内活动。
2、资源分配给进程,同一个进程的所有线程共享该进程所有资源。同一进程中的多个线程共享代码段(代码和常量),数据
段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变
量。
3、CPU分配给线程,即真正在处理器运行的是线程。
4、线程在执行过程中需要协作同步,不同进程的线程间要利用消息通信的办法实现同步。
注:进程是最基本的资源拥有单位和调度单位。
进程间通信方式:(1)消息传递(2)共享存储(3)管道通信
线程与进程的比较
线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元;而把传统的进程称为重型进程
(Heavy—Weight Process),它相当于只有一个线程的任务。在引入了线程的操作系统中,通常一个进程都有若干个线程,至少
需要一个线程。下
面,我们从调度、并发性、 系统开销、拥有资源等方面,来比较线程与进程。
1.调度
在传统的操作系统中,拥有资源的基本单位和独立调度、分派的基本单位都是进程。而在引入线程的操作系统中,则把线程作为
调度和分派的基本单位。而把进程作 为资源拥有的基本单位,使传统进程的两个属性分开,线程便能轻装运行,从而可显著地提
高系统的并发程
度。在同一进程中,线程的切换不会引起进程的切换,在 由一个进程中的线程切换到另一个进程中的线程时,将会引起进程的切换。
2.并发性
在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间,亦可并发执行,因而使操作系统具
有更好的并发性,从而能更有效地使 用系统资源和提高系统吞吐量。例如,在一个未引入线程的单CPU操作系统中,若仅设置一
个文件服务进程,
当它由于某种原因而被阻塞时,便没有其它的文件服 务进程来提供服务。在引入了线程的操作系统中,可以在一个文件服务进程
中,设置多个服务线程,当第一个线程等待时,文件服务进程中的第二个线程可以继续运 行;当第二个线程阻塞时,第三个线程
可以继续执行,从而显著地提高了文件服务的质量以及系统吞吐量。
3.拥有资源
不论是传统的操作系统,还是设有线程的操作系统,进程都是拥有资源的一个独立单位,它可以拥有自己的资源。一般地说,线程自己不拥有系统资源(也有一点必 不可少的资源),但它可以访问其隶属进程的资源。亦即,一个进程的代码段、数据段以及系统资源,如已打开的文件、I/O设备等,可供问一进程的其它所有线 程共享。
4.系统开销
由于在创建或撤消进程时,系统都要为之分配或回收资源,如内存空间、I/o设备等。因此,操作系统所付出的开销将显著地大于在创建或撤消线程时的开销。类 似地,在进行进程切换时,涉及到整个当前进程CPU环境的保存以及新被调度运行的进程的CPU环境的设置。而线程切换只须保存和设置少量寄存器的内容,并 不涉及存储器管理方面的操作。可见,进程切换的开销也远大于线程切换的开销。此外,由于同一进程中的多个线程具有相同的地址空间,致使它们之间的同步和通信的实现,也变得比较容易。