一个用户级线程是怎么退出执行的呢?
How does a user-level thread come out of execution?
我知道关于内核级线程,有一个由达到特定循环计数引起的中断,即通知内核根据调度程序执行所需的上下文切换到另一个线程。
根据我对用户级线程的理解,在多对一模型中,用户线程的调度完全在用户 space 中完成。内核只是调度已映射到的内核线程用户级线程。
我的问题是我无法理解 "the control has been transferred to a certain user-level thread" 之后的位。调度程序如何停止执行以取回控制权以执行所需的上下文切换和选择另一个线程执行?当涉及到用户级线程时,我不确定是否有任何定时器寄存器被用来引起中断。
那么用户级调度程序又是如何取回控制权的呢?
请赐教
有趣的事情(真是巧合)我昨天在回家的路上一直在想这个问题的答案。真的。
答案是用户级线程必须交还控制权。只有内核级线程可以被抢占。这种控制权可以显式地发生——通过调用像 yield()
这样的函数——或者隐式地,通过调用任何其他知道如何转移控制权的函数。这些很可能是线程同步函数。
我知道关于内核级线程,有一个由达到特定循环计数引起的中断,即通知内核根据调度程序执行所需的上下文切换到另一个线程。
根据我对用户级线程的理解,在多对一模型中,用户线程的调度完全在用户 space 中完成。内核只是调度已映射到的内核线程用户级线程。
我的问题是我无法理解 "the control has been transferred to a certain user-level thread" 之后的位。调度程序如何停止执行以取回控制权以执行所需的上下文切换和选择另一个线程执行?当涉及到用户级线程时,我不确定是否有任何定时器寄存器被用来引起中断。
那么用户级调度程序又是如何取回控制权的呢?
请赐教
有趣的事情(真是巧合)我昨天在回家的路上一直在想这个问题的答案。真的。
答案是用户级线程必须交还控制权。只有内核级线程可以被抢占。这种控制权可以显式地发生——通过调用像 yield()
这样的函数——或者隐式地,通过调用任何其他知道如何转移控制权的函数。这些很可能是线程同步函数。