为了深入计算机底层,无知的我正在参考《王道考研》学习计算机 *** 作系统。
笔记特点是 我重新整理了涉及资料的一些语言描述、排版,而使用了自己比较容易理解的描述、同样是回答了一些常见关键问题
- 2.1_5_线程的概念与特点
- 线程 的意义
- 线程机制 引入后的变化
- 线程的实现方式——用户级线程
- 线程的实现方式——内核级线程
- 线程的实现方式——二者组合的方式
- 多对一模型
- 一对一模型
- 知识回顾与重要考点
传统的模式,进程是CPU调度的基本单位
特点
进程是资源分配的基本单位
缺陷
当切换进程时,需要保 存/恢复进程运行环境, 还需要切换内存地址空 间(更新快表、更新缓 存)开销很大
引入线程后,线程是CPU调度的基本单位
可以把线程理解为“轻量级进程”。是程序执行流的最小单位。
进程依然是资源分配的基本单位。 从属于同一进程 的各个线程共享进程的资源
线程机制 引入后的变化线程机制 类比:
切换进程运行环境:有一个不认识的人要用桌子,你需要你的书收走,他把自己的书放到桌上 同一进程内的线程切换=你的舍友要用这张书桌,可以不把桌子上的书收走
线程的实现方式——用户级线程用户级线程由应用程序通过线程库实现。
所有的线程管理工作都由应用程序负责(包 括线程切换) 用户级线程中,线程切换可以在用户态下即可完成,无需 *** 作系统干预。
在用户看来,是有多个线程。但是在 *** 作系 统内核看来,并意识不到线程的存在。(用户级线程对用户不透明,对 *** 作系统透明) 可以这样理解,“用户级线程”就是“从用户视角看能看到的线程”
线程的实现方式——内核级线程内核级线程(Kernel-Level Thread, KLT, 又称“内核支持的线程”)
内核级线程的管理工作由 *** 作系统内核完成。 线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成。
可以这样理解,“内核级线程”就是“从 *** 作系统内核视角看能看到的线程”
线程的实现方式——二者组合的方式在同时支持用户级线程和内核级线程的系统中,可采用二者组合的方式:将n个用户级线程映射到m 个内核级线程上( n >= m)//就是利用映射关系组合
重点重点重点 特点: *** 作系统只“看得见”内核级线程,因此只有内核级线程才是处理机分配的单位。
例如:上面这个模型中,该进程由两个内核级线程,三个用户级线程,
- 在用户看来,这个进程中有三个线程。
- 但即使该进程在一 个4核处理机的计算机上运行,也最多只能被分配到两个核,最多只能有两个用户线程并行执行。
多对一模型定义:
- 多个用户及线程映射到一个内核级线程
- 每个用户进程只对应一个内核级线程。
优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态
=>线程管理的系统开销小,效率高
缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机上并行运行
一对一模型一对一模型:一个用户及线程映射到一个内核级线程。每个用户进程有与用户级线程同数量的内核级线程。
优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核处理机上并行执行。
缺点:一个用户进程会占用多个内核级线程, 线程切换由 *** 作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。
知识回顾与重要考点欢迎分享,转载请注明来源:内存溢出
评论列表(0条)