调度程序激活机制(sheduler activation)

调度程序激活机制工作的目标是模拟内核线程的功能,但是为线程包提供通常在用户空间才能实现的更好的性能和更大的灵活性。
当使用调度程序激活机制时,内核给每个进程安排一定数量的虚拟的处理机,并且让运行时系统将线程分配到处理机上。这一机制可以用于多处理机上,此时虚拟处理器可以成为真实的CPU。
该机制工作的基本思路是,当内核了解到一个线程被阻塞后,内核通知该线程的运行时系统,并且在堆栈中以参数形式传递有问题的现成的编号和所发生时间的一个描述。内核通过在一个已知的起始地址启动运行时系统,从而发出了通知,这是对Unix中信号的一种粗略模拟,这个机制称为上下调用(upcall)
一旦如此激活,运行时系统就重新调度其线程,这个过程通常是这样的:把当前线程标记为阻塞并从就绪表中取出另一线程,设置其寄存器,然后再启动之,稍后,当内核知道原来的线程又可运行时,内核就又一次上下调用运行时系统,通知它这一事件。此时运行时系统按照自己的判断,或者立即重新启动被阻塞的线程或者把它放入就绪表中稍侯继续。
当某个用户线程运行的同时发生一个硬件中断,被中断的CPU切换进和心态。如果被中断的进程也对引起该中断的事件不感兴趣,就把中断的线程恢复到中断之前的状态。如果对中断的事件感兴趣,那么被中断的线程就不再启动,代之为刮起被中断的线程,而运行时系统则启动对应的虚拟CPU。此时被中断的线程的状态保存在堆栈中。随后,运行时系统决定在该Cpu上调度哪个线程。
调度程序激活机制的一个目标是作为上行调用的信赖基础,这是一种违反分层系统内在结构的概念。通常n曾提供n+1层可调用的特定服务,但是n层不能调用n+1层中的过程。上行调度并不遵守这个基本原理
原文地址:https://www.cnblogs.com/yue/p/988658.html