参考
先了解一下:Linux的用户空间与内核空间
内核空间:Linux操作系统和驱动程序运行的空间
用户空间:应用程序运行在用户空间
内核级线程KLT, Kernel-Level-Threads
线程管理所有的工作都由OS内核来做,OS提供了一个程序设计接口的API,供开发者使用KLT,OS直接调度KLT。
在同一个进程里面,控制权从一个线程传到另外一个线程时需要模式切换,系统开销较大。
用户级线程ULT, User-Level-Threads
用户空间运行的线程库,提供多线程的开发和运行环境,线程管理的所有工作都在应用程序完成,内核没有意识到线程的存在。
所有线程管理数据结构均在进程的用户空间中,线程切换不需要内核模式,能节省模式切换开销和内核的宝贵资源。
但是一个ULT发生堵塞,整个进程将堵塞。
Jacketing技术
把堵塞式系统调用改造成非阻塞式系统,jacketing程序检查使用情况,以决定是否执行进程切换或传递控制权给下一个线程。
用户态到内核态的转换
用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,比如fork()实际上就是执行了一个创建新进程的系统调用。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现