[FSM]状态机平面(任务平面)
给一个口头定义:
如果两个函数总不可能同时执行(比如顺次执行的),并能保证自己执行的原子性,那么这两个函数
处于同一个任务平面。
推论:
合作式调度器所有的任务都在主循环里面执行,都是依次执行的,都能保证自己的原子性。那么可以
说合作式调度器的任务都是在同一个任务平面的。
混合式调度器引入了一个中断,假定这个中断执行完成之前,不允许嵌套,并且有且只有一个这样的
中断,那么我们说,合作式调度器拥有两个任务平面:
显然,主循环里面执行的函数都属于同一个任务平面;中断处理程序里面执行的函数也都属于一个平面,
只不过是不同于主循环平面的另外一个世界。
不同平面间如果存在公共的存储器资源,那么对于这部分资源的访问就必须要进行临界区保护。
同一个任务平面里面的任务都是合作调度的——也就是顺次执行的,你方唱罢我登场。
不同平面的任务之间如果没有建立任何联系(比如信号亮通讯),那么执行顺序以及原子性都无法保证。
抢占式调度器是一个典型的多任务平面系统:
调度器自己的调度程序占用一个任务平面,可以说大部分系统服务都是可以被主观上判定为属于这个任务
平面的(根据定义你很容易找到这种说法的依据:1、不可能同时执行;2、原子性)
调度器调度的每一个任务都有自己独有的任务平面……所谓的任务切换,实际上就是任务平面切换,我喜
欢称之为宇宙切换,或者多维空间切换(很科幻,但是印象很深刻哈)
混合调度器的任务平面切换是硬件完成的,所以不需要额外代码。
原文:
https://www.eefocus.com/GorgonMeducer/blog/11-02/204534_3c577.html