JVM如何管理线程?

时间:2015-10-10 19:07:22

标签: multithreading jvm kernel multiprocessing

最近我参加了一个关于微内核的课程,我建立了自己的线程管理器(技术上它是一个进程管理器,程序通过我实现的系统调用接口相互通信,并且没有共享内存)现在让我想知道 JAVA 是如何做到的?

TL; DR 以下是我的问题(假设是单核心):

我有一个内核来管理所有用户程序,JVM也有类似的东西吗?

create_task,send_2_task,receive_from_task 之类的系统调用使程序计数器跳转到我的内核,因此我可以处理用户程序之间的通信。当我完成系统调用时,我必须重新安排接下来要运行的任务,因为我的系统状态可能已更改(即,如果通过调用receive等待某些消息,则可以阻止先前的任务),JVM确实我使用 wait()/ notify()/ run()/ call()/ get()时是一样的吗?我的意思是这些调用是否将CPU插槽转移回线程管理器

我必须通过汇编指令打开定时器中断,以便我知道每个时间段内都有至少一个重新调度(硬件中断处理程序跳转到我的内核) ),但在此之前,我必须将所有寄存器保存在堆栈中(通过汇编,类似于将$ 1推送到sp ),因为当我离开内核时,调度算法将启动。 ......它不会只是恢复上一个任务。但是JVM只能访问系统级API,因此没有关于硬件的信息(即内存映射定时器地址)或特定CPU的汇编指令,他是如何管理时间片和上下文切换的?

我花了很多时间试着制定这个问题,它有点复杂,有很多细节,如果不清楚,请告诉我......

0 个答案:

没有答案