一、线程的引入
多处理机OS中
进程回顾:
1)进程是一个拥有资源的独立单位;
2)是一个可独立调度和分派的基本单位。
进程一系列操作:
1)创建进程:分配除CPU以外的全部资源(如内存、I/O设备等),建立PCB
2)撤销进程:资源回收,撤销PCB
3)进程切换:保留当前进程的CPU环境,设置新选中进程的CPU环境
进程是一个资源的拥有者,创建、撤销及切换,需要巨大的时空开销,从而限制了OS中的进程数目,进程切换也不能过于频繁。
引入线程目的:为了更好地提高程序的并行执行程度,减少程序在并发执行时所付出的时空开销,使OS具有更好的并发性。
不仅并发执行,而且减少时空开销。
将进程的两个作用分开,进程作为拥有资源的独立单位;线程作为独立调度和分配的基本单位,减少切换开销。
二、线程与进程的比较
1.调度的基本单位
1)传统OS,进程同时作为拥有资源的独立单位和调度与分配的基本单位,每次调度,上下文切换,开销巨大;
2)引入线程的OS,线程作为调度与分配的基本单位,线程切换,仅需保存和设置少量寄存器的内容,开销远小于进程开销;
同一进程中的线程切换,不会引起进程切换;但不同进程中的线程切换,必然引起进程的切换。
2.并发性
1)传统OS,进程之间并发;
2)引入线程的OS,不仅进程之间能并发,不同进程的多个线程以及同一进程的多个线程都能并发。
3.拥有资源
1)传统OS,进程作为拥有资源的独立单位;
2)引入线程的OS,进程还是拥有资源的基本单位,线程仅有一点必不可少的、能保证独立运行的资源。如寄存器及堆栈;
线程除了拥有自己的少量资源外,还允许多个线程共享该进程拥有的资源。如地址空间、文件、I/O设备等。
4.独立性
同一进程的不同线程之间的独立性远小于不同进程之间的独立性。
5.系统开销
1)创建和撤销进程时,为之分配和回收PCB、分配和回收资源;创建线程时,分配和回收寄存器和堆栈,开销小得多
2)进程的切换,涉及进程上下文的切换;线程切换开销小得多
6.支持多处理机系统
一个进程的多个不同线程可以分配到多个处理机上。
三、线程的状态和线程控制块
1.线程的三个状态
线程之间也存在着共享资源和相互合作的制约关系,致使线程也有间断性。
三种基本状态:执行状态、就绪状态及阻塞状态。状态之间切换同进程。
2.线程控制块(TCB)
如PCB一样,将所有用于控制和管理线程的信息记录在TCB中。如线程标识符、寄存器、优先级及堆栈指针等。
3.多线程OS的进程属性
1)进程是一个可拥有资源的基本单位;
2)多个线程可并发执行;
3)进程已不是可执行的实体。把线程作为独立运行与调度处的基本单位。
所谓进程处于“执行”状态,实际上是指进程中的某线程正在执行;
对进程所施加的与进程状态相关的操作也对其线程起作用。
四、线程的实现方式
1.用户级线程(User-Level Thread,ULT)
有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。应用程序可以通过线程库设计成多线程程序。
2.内核级线程(Kernel-Level Thread,KLT)
线程管理的所有工作由内核完成,应用程序没有进行线程管理的代码,只有一个到内核级线程的编程接口。
3.组合方式
线程创建完全在用户空间完成,线程的调度和同步也在应用程序中进行。
一个应用程序中的多个用户级线程被映射到一些内核级线程(<=用户级线程数目)上。5