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运行时的某个线程(用户态线程)映射到操作系统的内核线程。该线程在执行程序中的一个系统调用指令时,触发了用户态内核态的权限切换,以此来访问系统的关键资源。

参考资料:
  1. stackoverflow: 用户态和内核态
  2. 用户线程和内核线程
  3. Multithreading Models
  4. 用户态和内核态的区别
  5. wiki: Green_threads

评论