老师我想请教下寄存器和线程映射的问题
来源:4-3 面试官:Java的线程是用户级线程还是内核级线程?

大东来提高
2021-06-07
question 一 :
1.PC寄存器
2.jvm自己的寄存器(程序计数器)
这个我看很多资料说 2是1的抽象模拟,那么是不是可以这么理解
1.OS层面的线程(内核线程)去保存线程或者执行指令是由1来实现
2.java自己的线程(用户线程)去保存或者执行指令是由2来实现(指向某个栈帧里的某个指令行)
question 二:
用户线程->内核线程的映射 您讲的是n->m (n>=m,HotSpot n=m) ,然后内核里会有空间记录这个映射关系
我理解的是 :java线程会先映射到LWP上,然后再映射到KLT上,内核里有Thread Scheduler来管理映射
1.LWP:这个是放在用户空间的对吗,如果放在用户空间的话,那么谁来管理这个映射呢?
2.Thread Scheduler这个只是负责内核线程调度和LWP映射KTL对吗
写回答
1回答
-
求老仙
2021-07-14
物理寄存器肯定要用的,不然速度跟不上。无非是线程切换的时候,需要保存,和恢复。
KLT以为自己在执行Process,但是执行的是一个或者多个LWP。当然Linux下是1:1。作为一个线程单位(或者类似线程)LWP需要自己的栈和寄存器。当然,线程切换后,就用的真实的寄存器。Java的线程执行的机器码(当然是机器码了,毕竟已经到JIT时代了,之前是OPCode)。最终的二进制代码,操作的寄存器肯定是CPU的。 只不过栈是JVM抽象出来的,所以用的寄存器可能会有点特别。
00
相似问题