ljt8015 发表于 2011-1-6 11:28:39

《时间触发嵌入式系统设计模式》中“混合式调度器”疑问?

在书中写到
混合式调度器:
1、支持多个合作式调度的任务
2、支持一个抢占式任务(可以中断合作式任务),即使系统得的主要用途是运行一个1000ms的合作式任务,也可以用抢占式任务来保证系统能够在10ms内相应外部事件。

书中讲到,混合式调度器 没有使用上下文切换机制,那如何去中断正在运行的合作式任务呢?

ZacharyGuo 发表于 2011-1-6 12:06:27

那个抢占任务是放在定时中断服务程序中做的,只要中断来,就去执行了。。。。

ljt8015 发表于 2011-1-6 12:17:54

回复【1楼】ZacharyGuo
那个抢占任务是放在定时中断服务程序中做的,只要中断来,就去执行了。。。。
-----------------------------------------------------------------------

那意义不大呢,一个定时器也就支持一个抢占式任务。

还是用抢占式的调度器方便。

automanzz 发表于 2011-1-6 14:37:29

回复【楼主位】ljt8015

在书中写到
混合式调度器:
1、支持多个合作式调度的任务
2、支持一个抢占式任务(可以中断合作式任务),即使系统得的主要用途是运行一个1000ms的合作式任务,也可以用抢占式任务来保证系统能够在10ms内相应外部事件。
书中讲到,混合式调度器 没有使用上下文切换机制,那如何去中断正在运行的合作式任务呢?

-----------------------------------------------------------------------

一:只有一个抢占式任务,而且相当于优先级最高的,不会被中断
二:抢占式任务是个短任务,小于时间戳的50%为宜

Gorgon_Meducer 发表于 2011-1-6 16:55:19

其实这牵涉到一个概念,叫做状态机平面,或者叫做任务平面
给一个口头定义:
如果两个函数总不可能同时执行(比如顺次执行的),并能保证自己执行的原子性,那么这两个函数
处于同一个任务平面。

推论:
合作式调度器所有的任务都在主循环里面执行,都是依次执行的,都能保证自己的原子性。那么可以
说合作式调度器的任务都是在同一个任务平面的。

混合式调度器引入了一个中断,假定这个中断执行完成之前,不允许嵌套,并且有且只有一个这样的
中断,那么我们说,合作式调度器拥有两个任务平面:
显然,主循环里面执行的函数都属于同一个任务平面;中断处理程序里面执行的函数也都属于一个平面,
只不过是不同于主循环平面的另外一个世界。
不同平面间如果存在公共的存储器资源,那么对于这部分资源的访问就必须要进行临界区保护。

同一个任务平面里面的任务都是合作调度的——也就是顺次执行的,你方唱罢我登场。
不同平面的任务之间如果没有建立任何联系(比如信号亮通讯),那么执行顺序以及原子性都无法保证。

抢占式调度器是一个典型的多任务平面系统:
调度器自己的调度程序占用一个任务平面,可以说大部分系统服务都是可以被主观上判定为属于这个任务
平面的(根据定义你很容易找到这种说法的依据:1、不可能同时执行;2、原子性)
调度器调度的每一个任务都有自己独有的任务平面……所谓的任务切换,实际上就是任务平面切换,我喜
欢称之为宇宙切换,或者多维空间切换(很科幻,但是印象很深刻哈)

混合调度器的任务平面切换是硬件完成的,所以不需要额外代码。

我这么解释,你明白了么?

ZacharyGuo 发表于 2011-1-7 11:01:15

回复【2楼】ljt8015
-----------------------------------------------------------------------
但是它耗的资源少,特别适合在单片机~

ljt8015 发表于 2011-1-7 12:52:30

回复【4楼】Gorgon Meducer 傻孩子
其实这牵涉到一个概念,叫做状态机平面,或者叫做任务平面
给一个口头定义:
如果两个函数总不可能同时执行(比如顺次执行的),并能保证自己执行的原子性,那么这两个函数
处于同一个任务平面。
推论:
合作式调度器所有的任务都在主循环里面执行,都是依次执行的,都能保证自己的原子性。那么可以
说合作式调度器的任务都是在同一个任务平面的。
混合式调度器引入了一个中断,假定这个中断执行完成之前,不允许嵌套,并且有且只有一个这样的
中断,那么我们说,合作式调度器拥有两个任务平面:
显然,主循环里面执行的函数都属于同一个任务平面;中断处理程序里面执行的函数也都属于一个平面,
只不过是不同于主循环平面的另外一个世界。
不同平面间如果存在公共的存储器资源,那么对于这部分资源的访问就必须要进行临界区保护。
同一个任务平面里面的任务都是合作调度的——也就是顺次执行的,你方唱罢我登场。
不同......
-----------------------------------------------------------------------

总感觉和把所有程序放在 while(1){...} 中区别不大。

Gorgon_Meducer 发表于 2011-1-7 17:23:00

to 【6楼】 ljt8015
    还是有区别的,中断任务平面上的任务能够以一个精确的时间基准运行。

ljt8015 发表于 2011-1-8 19:08:49

回复【7楼】Gorgon Meducer 傻孩子
to 【6楼】 ljt8015
    还是有区别的,中断任务平面上的任务能够以一个精确的时间基准运行。
-----------------------------------------------------------------------

主循环里面执行的函数, 和把所有程序放在 while(1){...} 中区别不大。

中断任务也可以直接用定时器中断实现的。

wuyiduan 发表于 2011-7-16 22:36:35

我也觉得所谓的合作调度和超级循环没有多大的区别,如果有,是不是就下面2点:
1. 事先安排好每个任务的执行时间和频率
2. 可以利用原来的DELAY做其他任务(如果时间安排的好,任务分解的好的话)
不知道我的理解对不对
我现在有个东西肯定要用到操作系统了,但是想了很久都没想好怎么做

lord 发表于 2011-8-13 17:55:11

mark

seazhui 发表于 2013-1-9 22:05:27

Gorgon_Meducer 发表于 2011-1-6 16:55 static/image/common/back.gif
其实这牵涉到一个概念,叫做状态机平面,或者叫做任务平面
给一个口头定义:
如果两个函数总不可能同时执行 ...

请问能否推荐几本讲系统的书,中英文不限,最好是中文的。从最基本的开始的那种。
先介绍一下自己的水平,刚刚开始看STM32,最近在补习C,在校学生,准备考研,现在大三。。。然后。。。非计算机专业,没有学过数据结构等等。。。。算是零基础
请指教。。。。

Gorgon_Meducer 发表于 2013-1-10 10:45:00

seazhui 发表于 2013-1-9 22:05 static/image/common/back.gif
请问能否推荐几本讲系统的书,中英文不限,最好是中文的。从最基本的开始的那种。
先介绍一下自己的水平 ...

先补习C,
然后看数据结构(看到树就差不多了),
然后看操作系统《Operating System》机械工业出版社:看理论级的,不需要以Linux为背景的,看完调度,内存管理,多线程通信。至于I/O管理,文件系统什么的就不用看了
-----
看完这些,再去看《深入浅出MFC》头六章就可以了
然后看《Object Oriented Programming with ANSI-C》
然后看《时间触发嵌入式系统设计模式》
...
不过走完这么多步骤,基本上也是3年以后的事情了……

seazhui 发表于 2013-1-10 16:59:36

Gorgon_Meducer 发表于 2013-1-10 10:45 static/image/common/back.gif
先补习C,
然后看数据结构(看到树就差不多了),
然后看操作系统《Operating System》机械工业出版社: ...

....好的,谢~~~

sochen1987 发表于 2013-1-11 11:14:46

只要你能用软件模拟一次中断过程,那么所谓的OS的任务切换也就可以完成。那本书中的抢占只是靠定时器中断内执行完成。

icqw1983 发表于 2013-1-11 14:07:24

ljt8015 发表于 2011-1-8 19:08 static/image/common/back.gif
回复【7楼】Gorgon Meducer 傻孩子
to 【6楼】 ljt8015
    还是有区别的,中断任务平面上的任务能够以一 ...

如果不是抢占式的,任务一多,就没什么实时性可言,还不如不用操作系统,真接用while效率还高些。
非抢占式的在单片机上面也就一鸡肋。

Gorgon_Meducer 发表于 2013-1-11 18:40:08

icqw1983 发表于 2013-1-11 14:07 static/image/common/back.gif
如果不是抢占式的,任务一多,就没什么实时性可言,还不如不用操作系统,真接用while效率还高些。
非抢占 ...

是不是鸡肋先不说,仍然有相当部分的平下中农要活在跑不了RTOS的平台下……你说咋办?
提出一个观点容易,就像毁树容易种树难,能详细说下这里“鸡肋”的背景平台环境,以及对应
环境下“鸡肋”的原因么?

chencc8 发表于 2013-1-11 21:29:13

合作调度器的任务执行时间很灵活呢~

304301959 发表于 2013-3-5 21:35:26

我一开始是在定时器设定时标激活使能位而分频段执行各个任务,代码很简单。看了时间触发系统后,确实更容易移植和规划程序。while(1)虽然说是无缝连接,但是可以说谈不上是程序设计吧,很简单的例子就是不用中断来动态扫描数码管,超级循环结构只要稍微改一点,显示就不美观了。

Gorgon_Meducer 发表于 2013-3-7 00:13:40

304301959 发表于 2013-3-5 21:35 static/image/common/back.gif
我一开始是在定时器设定时标激活使能位而分频段执行各个任务,代码很简单。看了时间触发系统后,确实更容易 ...

这说明你的代码并不是严格的非阻塞代码。

zhwm3064 发表于 2013-3-7 07:22:56

回复2娄
抢占任务不一定放在时间中断里
我放其它中断里也行

panhai0101 发表于 2015-4-20 22:02:06

Gorgon_Meducer 发表于 2013-1-10 10:45
先补习C,
然后看数据结构(看到树就差不多了),
然后看操作系统《Operating System》机械工业出版社: ...

《深入浅出MFC》???估计啃透这本就得好多基础

panhai0101 发表于 2015-4-20 22:15:25

Gorgon_Meducer 发表于 2013-1-10 10:45
先补习C,
然后看数据结构(看到树就差不多了),
然后看操作系统《Operating System》机械工业出版社: ...

招聘什么助手?

panhai0101 发表于 2015-4-26 16:36:53

Gorgon_Meducer 发表于 2013-1-10 10:45
先补习C,
然后看数据结构(看到树就差不多了),
然后看操作系统《Operating System》机械工业出版社: ...

看《深入浅出MFC》头六章?为什么呢

dela2000 发表于 2016-1-28 15:51:02

MARK:
先补习C,
然后看数据结构(看到树就差不多了),
然后看操作系统《Operating System》机械工业出版社:看理论级的,不需要以Linux为背景的,看完调度,内存管理,多线程通信。至于I/O管理,文件系统什么的就不用看了
-----
看完这些,再去看《深入浅出MFC》头六章就可以了
然后看《Object Oriented Programming with ANSI-C》
然后看《时间触发嵌入式系统设计模式》
...
不过走完这么多步骤,基本上也是3年以后的事情了……

Gorgon_Meducer 发表于 2016-1-28 18:30:06

dela2000 发表于 2016-1-28 15:51
MARK:
先补习C,
然后看数据结构(看到树就差不多了),


欲速则不达啊,共勉!

zhiyuanzhitian 发表于 2018-7-29 14:12:29

mark。。。
页: [1]
查看完整版本: 《时间触发嵌入式系统设计模式》中“混合式调度器”疑问?