调度程序激活

用户线程库与内核之间进行通信的一种技术称为调度程序激活。它的工作方式就像:内核为应用程序提供了一组虚拟处理器(LWP),并且该应用程序可以将用户线程调度到可用的虚拟处理器上。而且,内核必须通知应用程序某些事件。此过程称为上行呼叫。上调用由线程库使用上调用处理程序处理,并且上调用处理程序必须在虚拟处理器上运行。当应用程序线程即将阻塞时,会发生一个触发上行调用的事件。在这种情况下,内核会向上调用应用程序,通知应用程序某个线程将要阻塞并标识特定线程。然后,内核为应用程序分配一个新的虚拟处理器。该应用程序在此新的虚拟处理器上运行一个上调处理程序,这样可以保存阻塞线程的状态并放弃运行阻塞线程的虚拟处理器。然后由upcall处理程序安排另一个可以在新的虚拟处理器上运行的线程。每当发生阻塞线程正在等待的事件时,内核都会再次调用线程库,通知该线程库先前可以运行的阻塞线程。此事件的Upcall处理程序还需要一个虚拟处理器,内核可以分配一个新的虚拟处理器或抢占用户线程之一,然后在其虚拟处理器上运行Upcall处理程序。在将畅通无阻的线程标记为可以运行之后,应用程序安排了一个合格的线程在可用的虚拟处理器上运行,然后由upcall处理程序安排另一个可以在新的虚拟处理器上运行的线程。每当发生阻塞线程正在等待的事件时,内核都会再次调用线程库,通知该线程库先前可以运行的阻塞线程。此事件的upcall处理程序还需要一个虚拟处理器,内核可以分配一个新的虚拟处理器或抢占用户线程之一,然后在其虚拟处理器上运行upcall处理程序。在将畅通无阻的线程标记为可以运行之后,应用程序安排了一个合格的线程在可用的虚拟处理器上运行,然后由upcall处理程序安排另一个可以在新的虚拟处理器上运行的线程。每当发生阻塞线程正在等待的事件时,内核都会再次调用线程库,通知该线程库先前可以运行的阻塞线程。此事件的Upcall处理程序还需要一个虚拟处理器,内核可以分配一个新的虚拟处理器或抢占用户线程之一,然后在其虚拟处理器上运行Upcall处理程序。在将畅通无阻的线程标记为可以运行之后,应用程序安排了一个合格的线程在可用的虚拟处理器上运行,内核再次调用线程库,通知它先前已阻塞的线程现在可以运行了。此事件的Upcall处理程序还需要一个虚拟处理器,内核可以分配一个新的虚拟处理器或抢占用户线程之一,然后在其虚拟处理器上运行Upcall处理程序。在将畅通无阻的线程标记为可以运行之后,应用程序安排了一个合格的线程在可用的虚拟处理器上运行,内核再次调用线程库,通知它先前已阻塞的线程现在可以运行了。此事件的upcall处理程序还需要一个虚拟处理器,内核可以分配一个新的虚拟处理器或抢占用户线程之一,然后在其虚拟处理器上运行upcall处理程序。在将畅通无阻的线程标记为可以运行之后,应用程序安排了一个合格的线程在可用的虚拟处理器上运行,