基于任务的应用程序何时切换上下文



假设您有两项任务。每一个都有自己的复杂模块,运行基于时间表的系统和基于事件的系统。当考虑上下文切换时,任务调度程序究竟何时以及如何决定何时切换任务,它在某一点上能做到这一点吗?在执行代码块的过程中,任务是否会切换?就在函数的中间?

作为参考,我在vxworks环境中工作。

通常,操作系统调度不关心C代码块。它们在各种事件发生时切换,包括:

  • 测量进程使用CPU的时间的计时器过期
  • 连接到计算机的设备报告它已经完成了一项任务,并且某个优先级比您高的进程正在等待此任务
  • 您的进程会发出一个无法立即满足的请求,例如请求从键盘输入,但用户尚未键入

在最后一种情况下,切换当然发生在您的请求点。其他的实际上是随机的,与你的流程在哪里执行有关。相关的中断可以发生在进程中的任何指令上。

在某些处理器体系结构中,中断甚至可能在某些指令期间发生:当指令仅部分执行时,指令可能会被中断,寄存器将被更新,以便以后可以恢复执行以继续执行指令。

最新更新