4-1 线程的引入
1.线程的概念
①进程具有两个基本属性:
- 是一个拥有资源的独立单位,可独立分配虚地址空间、主存和其他
- 又是一个可独立调度和分派的基本单位
这使得进程成为并发执行的基本单位
②问题:由于进程是一个资源的拥有者,因而在创建、撤销、切换调度时,系统需要付出较大的时空开销,故进程的数目不宜过多,进程的切换频率不宜过高,限制了并发程度。
③方法:将进程的两个基本属性分开
对于拥有资源的基本单位,不对其进行频繁切换,对于调度的基本单位,不作为拥有资源的单位,“轻装上阵”
④以内线程以小的开销来提高进程内的并发程度。
2.线程的引入
①在引入线程以前,进程是资源分配单位和CPU调度单位。引入线程以后,线程作为CPU的调度单位,而进程只作为资源分配单位。
②线程的特点:
- 只拥有必不可少的资源,如:线程状态、程序计数器、寄存器上下文和栈
- 同样具有就绪、阻塞和执行三种基本状态
- 与同属于一个进程的其他进程共享拥有的全部资源
- 可并发执行
3.线程的优点
减小并发执行的时间和空间开销(线程的创建、退出和调度),因此容许在系统中建立更多的线程来提高并发程度
- 线程的创建时间比进程短
- 线程的终止时间比进程短
- 同进程内线程切换时间比进程短
- 进程内的线程共享文件和文件资源,可直接进行不通过内核的通信
4.线程 Thread
①线程是CPU运用的基本单元,包括程序计数器、寄存器集和栈空间
②一个进程可以有多个线程,一个线程与它的对等线程共享代码段、数据段、操作系统资源,总体作为一个任务
③传统的或重型的进程等价于只有一个线程的任务。
④单线程进程和多线程进程,进程内的多线程共享代码段、数据段和文件资源,各自有自己的寄存器、栈。
5.进程和线程的比较
①并发性:引入进程的OS中,不仅进程间可以并发执行,在一个进程中的多个线程也可以并发执行,使OS有更好地并发性,提高资源利用率和系统的吞吐量。
②拥有资源:进程是拥有资源的独立单位,线程只有一些必不可少的资源。
③系统开销:OS创建或撤销进程的开销明显大于创建或撤销线程的开销。
④地址空间和其他资源:进程间相互独立,同一进程内的各线程共享。
⑤通信:线程间可直接读写数据段来进行通信——需要进程同步和互斥手段的辅助,保证数据的一致性。
⑥调度:线程上下文切换比进程上下文切换快得多。
6.引入线程的好处
①响应度高:一个多线程应用在执行中,即使其中一个线程阻塞,其他的线程还看继续进行,从而提高响应速度。
②资源共享:同一个进程的多个线程共享该进程的内存等资源。
③经济性:创建和切换线程开销低于进程。
④MP体系结构的运用:多线程更适用于多处理结构。
4-2 用户线程和内核线程
1.内核线程
①由内核支持,在内核空间执行线程创建、调度和管理。
②内核级线程时,线程才真正是CPU调度的基本单元。
③内核线程依赖于OS核心
- 内核维护进程和线程的上下文信息
- 线程切换由内核完成
- 一个线程发生系统调用而阻塞,不会影响其他线程的运行
- 时间片分配给线程,多线程的进程获得更多的CPU时间
2.用户线程
①由用户程序库进程管理的线程,无需内核支持,以进程为单位被OS调度。
②用户线程不依赖于OS核心,由线程库调度,无需用户态/核心态切换,速度特别快
- 由用户程序完成
- 内核不了解用户程序的存在
- 用户线程切换不需要内核特权
- 缺点:若内核为单线程控制,一个用户线程发生系统调用而紫色,则整个进程阻塞。时间片分配给进程,多线程则每个线程就慢。
3.用户线程和内核线程的比较
①调度方式:内核线程的调度和切换与进程相似,用户线程的调度不需要OS的支持。
②调度单位:用户程序的调度以进程为单位,在采用时间片轮转调度算法时,每个进程分配相同的时间片。
4-3 多线程模型
用户线程要映射到内核线程上执行
1.多对一
①多个用户线程映射待同一个内核线程
②用于不支持内核线程的系统中
③任一时刻只有一个线程可以访问内核(并发性低)
④用户线程发起系统调用而阻塞,则整个进程阻塞
2.一对一
①每个用户级线程映像进一个内核线程
②提供更好的并发性,一个线程阻塞是运行另一个线程运行
③每创建一个用户线程需创建一个相应的内核线程,带来额外开销,许多系统限制应用中线程数目。
3.多对多
不限制用于的线程数,多个线程可并发
4.两级模型
在多对多的基础上发展两级模型,多对多+一对一,运行一个用户线程绑定到内核线程。
本文知识以及图片来源:慕课_操作系统原理_田丽华
网址:https://www.icourse163.org/learn/XJTU-1003409001?tid=1206408203#/learn/content