四、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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容