User_vs_Kernel
Java编程的环境里涉及的两个有关User和Kernel有两个场景:
1)JVM与操作系统交互时,用户线程(User Level Thread)和内核线程(Kernel Level Thread)的映射关系;此处的用户线程就是JVM通过线程库产生的线程。
2)Java程序执行过程中,权限在用户态(User Mode)和内核态(Kernel Mode)切换。
1. User Level Thread与Kernel Level Thread
用户线程由应用来管理线程的创建、销毁,而内核线程由操作系统来管理;
用户线程处于应用内部,由应用自己来管理。例如,JVM的GreenThread,NoneGreenThread。
内核线程由操作系统管理,是直接访问CPU、执行指令的线程。
用户的线程需要映射到操作系统的内核线程上,即把操作委托给操作系统线程来执行指令。
用户线程和内核线程的映射模式有:
多对多模式
,多对一模式
,一对一模式
。
2. User Mode与Kernel Mode
操作系统为了进行资源保护,才划分了用户态和内核态。关键资源只能由内核态的权限才能访问,这样可以保护系统的关键数据不被破坏,使系统可以正常运行。
JVM在运行时可以通过系统调用等方式转为内核态。
3. 概念聚合场景
JVM运行时的某个线程(用户态线程)
映射到操作系统的内核线程
。该线程在执行程序中的一个系统调用指令时,触发了用户态
到内核态
的权限切换,以此来访问系统的关键资源。