目录
一、进程的引入
1.进程的两个基本属性
2.程序并发执行所需付出的时空开销
3.线程---作为调度和分派的基本单位
二、线程(轻型进程)与进程(重型进程)的比较
1)调度的基本单位
2)并发性
3)拥有资源
4)独立性
5)系统开销
6)支持多处理机系统
三、线程的状态和线程的控制块
1.线程运行的三个状态
2.线程控制块TCB
3.多线程OS中的进程属性
一、进程的引入
1.进程的两个基本属性
进程的两个基本属性:
①进程是一个可拥有资源的独立单位;一个进程要能独立运行,它必须拥有一定的资源。
②进程同时又是一个可独立调度和分派的基本单位,使之成为一个能独立运行的基本单位,从而也就构成了进程并发执行的基础。
由于进程是一个资源的拥有者,因而在创建、撤消和切换中,系统必须为之付出较大的时空开销。如此,在系统中所设置的进程,其数目不宜过多,进程切换的频率也不宜过高,这也就限制了并发程度的进一步提高。
2.程序并发执行所需付出的时空开销
为使程序能并发执行,系统必须进行以下的一系列操作:
(1)创建进程,系统在创建一个进程时,必须为它分配其所必需的、除处理机以外的所有资源,如内存空间、I/O设备,以及建立相应的PCB;
(2)撤消进程,系统在撤消进程时,又必须先对其所占有的资源执行回收操作,然后再撤消PCB:
(3)进程切换,对进程进行上下文切换时,需要保留当前进程的CPU环境,设置新选中进程的CPU环境,因而须花费不少的处理机时间。
3.线程---作为调度和分派的基本单位
目的:更好地实现并发执行的同时尽量减少系统的开销。
线程设计思想:将进程的上述两个属性分开,由操作系统分开处理,亦即对于作为调度和分派的基本单位,不同时作为拥有资源的单位,以做到“轻装上阵”;而对于拥有资源的基本单位,又不对之进行频繁的切换。正是在这种思想的指导下,形成了线程的概念。
单线程进程
管理和执行相分离的模型
多线程进程模型
二、线程(轻型进程)与进程(重型进程)的比较
由于线程具有许多传统进程所具有的特征,所以又称之为轻型进程(Light-WeightProcess)或进程元
把传统进程称为重型进程(Heavy-Weight Process)。
1)调度的基本单位
在传统的操作系统中,作为拥有资源的基本单位和独立调度、分派的基本单位都是进程。在引入线程的操作系统中,则把线程作为调度和分派的基本单位,而进程作为资源拥有的基本单位。
2)并发性
在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间亦可并发执行,使得操作系统具有更好的并发性,从而能更加有效地提高系统资源的利用率和系统的吞吐量。
3)拥有资源
不论是传统的操作系统,还是引入了线程的操作系统,进程都可以拥有资源,是系统中拥有资源的一个基本单位。一般而言,线程自己不拥有系统资源(也有一点必不可少的资源),但它可以访问其隶属进程的资源。
4)独立性
在同一进程中的不同线程之间的独立性要比不同进程之间的独立性低得多。
5)系统开销
(1)在创建或撤消进程时,操作系统所付出的开销明显大于线程创建或撤消时的开销。(2)类似的,在进程切换时,进程也是远高于线程的。(3)此外,由于一个进程中的多个线程具有相同的地址空间,在同步和通信的实现方面线程也比进程容易。
6)支持多处理机系统
在多处理机系统中,对于传统的进程,即单线程进程,不管有多少处理机,该进程只能运行在一个处理机上。但对于多线程进程,就可以将一个进程中的多个线程分配到多个处理机上,使它们并行执行,这无疑将加速进程的完成。因此,现代多处理机OS都无一例外地引入了多线程。
三、线程的状态和线程的控制块
1.线程运行的三个状态
线程在运行时也具有下述三种基本状态:
①执行状态,表示线程正获得处理机而运行;
②就绪状态,指线程已具备了各种执行条件,一旦获得CPU便可执行的状态;
③阻塞状态,指线程在执行中因某事件而受阻,处于暂停执行时的状态。
2.线程控制块TCB
线程控制块通常有这样几项:
①线程标识符,为每个线程赋予一个唯一的线程标识符;
②一组寄存器,包括程序计数器PC、状态寄存器和通用寄存器的内容;
③线程运行状态,用于描述线程正处于何种运行状态;
④优先级,描述线程执行的优先程度;
⑤线程专有存储区,用于线程切换时存放现场保护信息,和与该线程相关的统计信息等;
⑥信号屏蔽,即对某些信号加以屏蔽;
⑦堆栈,在堆栈中通常保存有局部变量和返回地址;
3.多线程OS中的进程属性
在多线程OS中,进程是作为拥有系统资源的基本单位,但不再作为一个执行的实体。多线程OS中的进程有以下属性:
(1)作为系统资源分配的单位。
(2)可包括多个线程。在0S中的所有线程都只能属于某一个特定进程。
(3)进程不是一个可执行的实体。在多线程OS中,线程作为独立运行的基本单位。进程仍具有与执行相关的状态。例如,所谓进程处于“执行”状态,实际上是指该进程中的某线程正在执行。
线程的内存布局