进程管理(十三)-线程

进程管理(十三)-线程

什么是线程

进程是程序的一次执行过程和资源分配的基本单位。一个进程内的基本调度单位称为线程(Thread)或称为轻权进程(Light weight process),这个调度单位既可以由操作系统内核控制,也可以由用户程序控制。

为什么引入线程

引入线程主要是为了提高系统的执行效率,减少处理机的空转时间和调度切换(保护现场信息)的时间,以及便于系统管理。

线程VS进程

进程

1.进程是资源分配的基本单位。
2.所有与该进程有关的资源,都被记录在进程控制块PCB中。以表示该进程拥有这些资源或正在使用它们。
3.进程也是抢占处理机的调度单位,它拥有一个完整的虚拟地址空间
4.进程发生调度时,不同的进程拥有不同的虚拟地址空间。

线程

1.线程与资源分配无关,它属于某一个进程,并与进程内的其他线程一起共享进程的资源
2.同一进程内的不同线程共享同一地址空间
3.线程只由相关堆栈(系统栈或用户栈)寄存器和线程控制表TCB组成。寄存器可被用来存储线程内的局部变量,但不能存储其他线程的相关变量。

线程切换

进程切换:进程切换时涉及有关资源指针的保存以及地址空间的变化等问题,进程的调度与切换都是由操作系统内核完成

线程切换:线程切换时,不涉及资源信息的保存和地址变化问题(同一进程内的线程共享资源和地址空间)从而减少了操作系统的开销时间。线程的调度与切换既可由操作系统内核完成,也可由用户程序进行。

线程的适用范围

使用线程的好处

使用线程的最大好处是有多个任务需要处理时,减少处理机的切换时间;而且,线程的创建和结束所需要的系统开销也比进程的创建和结束要小得多。

适合多线程的系统

最适合使用线程的系统是多处理机系统,同一用户程序可以根据不同的功能划分为不同的线程,放在不同的处理机上执行。

不适合多线程的系统

很少做进程调度和切换的实时系统、个人数字助理系统中,由于任务的单一性,设置线程相反会占用更多的内存空间和寄存器

多线程的应用

1.服务器中的文件管理或通信控制

扫描二维码关注公众号,回复: 7429842 查看本文章

在局域网的文件服务器中,对文件的访问要求可被服务器进程派生出的线程进行处理。由于服务器同时可能接受许多个文件访问要求,则系统可以同时生成多个线程来进行处理。如果计算机系统是多处理机的,这些线程还可以安排到不同的处理机上执行。

2.前后台处理

许多用户都有过前后台处理经验,即把一个计算量较大的程序或实时性要求不高的程序安排在处理机空闲时执行。对于同一个进程中的上述程序来说,线程可被用来减少处理机切换时间和提高执行速度。

3.异步处理

程序中的两部分如果在执行上没有顺序规定,则这两部分程序可用线程执行。

4.数据的批处理以及网络系统中的信息发送与接收和其他相关处理

线程的执行特性

三种状态和五种操作

针对线程的3种基本状态,存在5种基本操作来转换线程的状态。这5种基本操作是:

派生

线程在进程内派生出来,它即可由进程派生,也可由线程派生。用户一般用系统调用(或相应的库函数)派生自己的线程。

新派生线程被放入就绪队列

阻塞

如果一个线程在执行过程中需要等待某个事件发生,则被阻塞。阻塞时,寄存器上下文、程序计数器以及堆栈指针都会得到保证

激活

如果阻塞线程的事件发生,则该线程被激活并进入就绪队列。

调度

选择一个就绪线程进入执行状态。

结束

如果一个线程执行结束,它的寄存器上下文以及堆栈内容等将被释放

同步

由于同一进程中的所有线程共享该进程的所有资源和地址空间,任何线程对资源的操作都会对其他相关线程带来影响。因此,系统必须为线程的的执行提供同步控制机制,以防止因线程的执行而破坏其他的数据结构和给其他线程带来不利的影响,线程中所使用的同步控制机制与进程中所使用的同步控制机制相同

线程的分类

用户级线程

1.用户级线程(user level threads)的管理过程全部由用户程序完成,操作系统内核只对进程进行管理
2.为了对用户级线程进行管理,操作系统提供一个在用户空间执行的线程库,该线程库提供创建、调度、撤销线程功能。同时该线程库也提供线程间的通信,线程的执行以及存储线程上下文的功能
3.用户级线程只使用户堆栈和分配给所属进程的用户寄存器

线程创建过程

1.当一个线程被派生时,线程库为其生成相应的线程控制块TCB等数据结构,并为TCB中的参量赋值和把该线程置于就绪状态

2.其处理过程与进程创建过程相似。不同的是

(1) 用户级线程的调度算法和调度过程全部由用户自行选择和确定,与操作系统内核无关。在用户级线程系统中,操作系统内核的调度单位仍是进程。如果进程的调度区间为T,则在T区间内,用户可以根据自己的需要设置不同线程调度算法。

(2) 用户级线程的调度算法只进行线程上下文切换而不进行处理机切换,且其线程上下文切换是在内核不参与的情况下进行的。
线程上下文切换只是在用户栈、用户寄存器等之间进行切换,不涉及处理机的状态。
新线程通过程序调用指针的变化使得程序计数器变化而得以执行。

(3) 因为用户级线程的上下文切换与内核无关,所以可能出现如下情况:即当一个进程由于I/O中断或时间片用完等原因造成该进程退出处理机,而属于该进程的执行中线程仍处于执行状态。
也就是说,尽管相关进程的的状态是阻塞的或等待的,但所属线程状态却是执行的。
但线程被阻塞可能导致该线程所属的进程被阻塞。

系统级线程(核心级线程)

1.操作系统内核给应用程序提供相应的系统调用和应用程序接口API,以使用户程序可以创建、执行、撤消线程。
2.与用户线程不同,核心级线程既可以被调度到一个处理机上并发执行,也可以被调度到不同的处理机上并行执行
3.操作系统内核既负责进程的调度,也负责进程内不同线程的调度工作。因此,核心级线程不会出现进程处于阻塞或等待状态,而线程处于执行状态的情况。
4.核心级线程技术也可用于内核程序自身,从而提高操作系统内核程序的执行效率

缺点:
1.与用户级线程相比,核心级线程的上下文切换时间要大于用户级线程的上下文切换时间
2.与系统级线程相比,用户级线程的另一个优点是不需要操作系统内核的特殊支持,只要有一个能提供线程创建、调度、执行、撤消,以及通信等功能的线程库就行了

猜你喜欢

转载自www.cnblogs.com/mengxiaoleng/p/11626766.html