目录
2.1 User-Level Threads(ULT,用户级线程)
2.2 Kernel-Level Threads(KLT,内核级线程)
0.前言
本系列文章旨在记录操作系统的知识点,可用于期末复习,笔者理解尚浅,文中不正之处静待批正。加粗高亮部分为重点。
1.进程与线程
资源分配与保护的单位:进程Process
调度与执行的单位:线程Thread
1.1 单线程与多线程的定义
单线程:一个进程中只有一个线程在执行的传统方法
多线程:操作系统支持在一个进程中执行多个线程的能力
1.2 进程与线程之间的区别和联系
线程=进程-共享资源
①线程自身拥有哪些资源?
PC、stack、局部变量、执行状态和TCB(每个线程拥有自己的PC和stack)
②多线程共享哪些资源?
全局变量、静态变量、文件、堆等(代码段和数据段)
③线程有哪些优点?
创建快、结束快、切换快(不需要切换页表)、通信快(不经过内核通信)
④线程的状态
线程只考虑ready、running、blocked,没有挂起态和终止态。因此挂起进程会挂起所有线程,终止进程会终止所有线程
2.线程的类型
2.1 User-Level Threads(ULT,用户级线程)
线程管理由应用程序负责;内核意识不到线程的存在;用户能看到;线程的切换在用户态下完成;按进程调度(一个线程阻塞,则其余线程均会阻塞)
2.2 Kernel-Level Threads(KLT,内核级线程)
线程管理由操作系统内核负责;用户看不到;线程的调度、切换由内核负责,在核心态下完成;按线程调度
2.3 ULT与KLT之间的对比
①ULT的优势
切换开销小;调度策略可根据应用而不同;无需底层内核修改
②ULT的劣势
ULT按进程调度;线程不能分配到多核
③KLT的优势
多CPU执行;仅阻塞单个线程
④KLT的劣势
线程的切换需要内核的模式切换
2.4 Combined Approaches(混合方式)
线程的创建/调度/同步均在用户空间完成,而内核级线程才是处理机调度的单位