基于任务的应用程序何时切换上下文?
When do task based applications switch context?
假设您有两个任务。每个都有自己的复杂模块 运行 基于计划的系统和基于事件的系统。在考虑上下文切换时,任务调度程序究竟何时以及如何决定何时切换任务,并且在某一时刻它可以做到这一点吗?任务会在执行一段代码的过程中切换吗?就在函数中间?
作为参考,我在 vxworks 环境中工作。
通常,操作系统调度与 C 代码块无关。它们会在各种事件发生时切换,包括:
- 一个计时器,用于测量您的进程使用 CPU 的时间。
- 连接到计算机的设备报告它已完成一项任务,一些优先级高于您的进程正在等待此任务。
- 你的进程发出了一个不能立即满足的请求,比如请求键盘输入,用户还没有输入。
在最后一种情况下,切换当然发生在您的请求点。关于您的流程执行的位置,其他人实际上是随机的。关联的中断可以发生在您进程中的任何指令处。
在某些处理器体系结构中,中断甚至可能在在某些指令期间发生:指令可能在仅部分执行时被中断,寄存器将被更新,以便可以恢复执行以稍后继续指令。
假设您有两个任务。每个都有自己的复杂模块 运行 基于计划的系统和基于事件的系统。在考虑上下文切换时,任务调度程序究竟何时以及如何决定何时切换任务,并且在某一时刻它可以做到这一点吗?任务会在执行一段代码的过程中切换吗?就在函数中间?
作为参考,我在 vxworks 环境中工作。
通常,操作系统调度与 C 代码块无关。它们会在各种事件发生时切换,包括:
- 一个计时器,用于测量您的进程使用 CPU 的时间。
- 连接到计算机的设备报告它已完成一项任务,一些优先级高于您的进程正在等待此任务。
- 你的进程发出了一个不能立即满足的请求,比如请求键盘输入,用户还没有输入。
在最后一种情况下,切换当然发生在您的请求点。关于您的流程执行的位置,其他人实际上是随机的。关联的中断可以发生在您进程中的任何指令处。
在某些处理器体系结构中,中断甚至可能在在某些指令期间发生:指令可能在仅部分执行时被中断,寄存器将被更新,以便可以恢复执行以稍后继续指令。