Jon*_*Jon 6 architecture operating-system function overhead context-switch
在裸机系统(嵌入式微控制器,没有MMU,没有寻呼)什么更昂贵?完整的上下文切换(寄存器保存和恢复)或函数调用(激活记录分配)?
我知道这很大程度上取决于调用约定和硬件功能,但我将如何评估它呢?
编辑:
为了提供更多的上下文,我试图模拟两个调度方案.第一个是先发制人的调度程序,在任务之间切换上下文.第二个是函数指针运行队列,其中任务是状态机,分为几个可以进行的函数调用(其中,在IO事件驱动的基础上进行排队).
在大多数情况下,我可以收集关于我的任务需要多长时间(IO和CPU时间)的良好数据,但我需要一些帮助来计算在我的模型中添加常量的额外开销成本.
由于触发上下文切换的系统调用是函数调用,并且可以触发上下文切换的硬件中断是相似的(并且需要调用事件/信号量,以及跳转/调用调度程序入口点,以向调度程序发出信号)上下文切换),我想说函数调用在 CPU 周期上会更便宜,除非传递了不合理数量的参数。
这听起来像是一个 XY 问题——你为什么问这个?上下文切换和函数调用几乎是正交的——一个是基于堆栈的机制,另一个则选择完全不同的堆栈。