我一直在努力了解实现用户空间线程的机制。我无法理解堆栈和框架的机制。我遇到了两个非常好的资源(here和here),它们解释了线程及其实现方式,但我仍然不了解以下细节:
- 线程执行中如何使用机器上下文?我知道它由堆栈指针和一堆寄存器值组成。但操作系统究竟是如何使用它来执行线程的呢?
- 为什么我们需要蹦床功能(mctx_create_trampoline)?在链接#2中,他们将函数设置为信号处理程序,用于保存机器上下文并启动线程函数(mctx_create_boot)。
- 基于这些函数,如何实现线程可以调用的“yield”函数?另外,我们如何中断正在运行的线程?我假设你有一个定时器和SIGALRM,当它关闭时调用信号处理程序。但是如果yield函数切换上下文,那么信号处理程序将不会返回,这将阻止进一步传递信号。
醇>