《RTOS实时操作系统(Real Time Operating System).pdf》由会员分享,可在线阅读,更多相关《RTOS实时操作系统(Real Time Operating System).pdf(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、John Lee 20:27:07 上次讲到了 RTOS 的抢占机制对事件响应能力提高的帮助,避免了事件的丢失。John Lee 20:27:07 上次讲到了 RTOS 的抢占机制对事件响应能力提高的帮助,避免了事件的丢失。小道(569198569)20:27:39 老师辛苦 John Lee 20:27:45 但光依靠 RTOS 的抢占机制,并不能做到完全不丢失事件,只是从一定程度上降低了丢失事件的机率。丶砖家(1361439207)20:28:16 LEE 丶砖家(1361439207)20:28:14 好复杂呀 John Lee 20:28:54 上次的这个图:John Lee 20:3
2、0:20 是没有丢失事件了,但如果我们把 E2 的第 3 个事件提前一些:John Lee 20:32:30 对于这样情况,RTOS 提供了一些带有通信功能的同步对象,可以让应用程序构造软件缓冲机制,来保持突发事件。John Lee 20:33:19 关于具体的实现方法,要等到我们学习完了 RTOS 同步机制和各种同步对象后,才能讨论。John Lee 20:34:24 除此之外,还有其它一些系统设计时,需要仔细考虑的问题:中断处理时间到底多长合适?等待设备事件产生,是否一定要用中断?如何划分任务?如何确定合适的调度算法?是否需要任务优先级?静态优先级能不能满足要求?系统节拍的频率多少合适?如
3、何选则合适的同步对象?DsPower 小灰灰(108430786)20:35:56 对这就是我的问题 wei(34103820)20:36:02 John Lee 20:36:07 这些问题,都留到我们学习完 RTOS 后,再来讨论。小道(569198569)20:36:23 wei(34103820)20:36:02 遵守纪律 John Lee 20:36:39 现在讨论,很多同学没有基础,晕的。John Lee 20:37:12 我们继续学习嵌入式系统的实时概念。DsPower 小灰灰(108430786)20:38:13 支持老师 DsPower 小灰灰(108430786)20:38:
4、14 雪狼(982332664)20:38:55 我都晕乎了 John Lee 20:40:01 我们上次停下来的地方,是:4.4.5 调度算法。John Lee 20:40:42 基于优先权抢占的调度,和时间轮转调度,是两种最基本的调度算法。wei(34103820)20:40:52 这正是俺想知道 的 John Lee 20:41:16 基于优先权抢占的调度,可分为“静态优先级”和“动态优先级”两种,市面上大多数支持优先级调度的 RTOS,都属于静态优先级调度。John Lee 20:42:01 虽然其中有些 RTOS 提供某些系统调用,允许运行时改变任务的优先级,但这仍然不能算动态优先级
5、调度。John Lee 20:43:27 那什么样的调度算法,算是动态优先级呢?John Lee 20:44:17 谁能说说?小道(569198569)20:44:50 根据情况需要调整优先级?John Lee 20:45:08 嗯,不错,靠谱。John Lee 20:45:13 有一个界定:RTOS 具有管理事件截止期的机制,并以事件截止期作为任务优先级确定的依据。HILL 20:45:17 John Lee 20:46:03 而那些提供了运行时改变任务优先级的调用的 RTOS,并没有提供事件截止期的相关机制。John Lee 20:47:12 用户虽然可以在运行时改变任务优先级,但改变到的
6、“目的”优先级,仍然在程序设计时定死的,而实际运行时,随着当前时点的系统处理状况的不同,最适合的优先级也会可能不同的。John Lee 20:48:49 而动态优先级的 RTOS,当事件产生时,要求用户必须给系统提供一个相应的事件截止期,调度器会根据此截止期和当前正在处理的其它事件的截止期,为处理此事件的任务,综合计算出一个最合适的优先级。John Lee 20:50:04 还有,具有动态优先级调度算法的 RTOS,一般不提供更改任务优先级的系统调用,也是基于同样的理由。John Lee 20:51:46 接下来,我们看时间轮转调度:John Lee 20:52:27 关于时间轮转调度,书上说
7、“不能满足实时系统的要求”。这一个说法,我是有异议的。John Lee 20:53:26 书上很笼统地说“任务的执行工作随其重要性变化”。John Lee 20:54:18 很难服人的。John Lee 20:54:30 什么样的系统算是“实时系统”?惊涛骇浪(578645627)20:54:51 单一任务 惊涛骇浪(578645627)20:55:24 说错了 John Lee 20:55:21 只要能在事件截止期之前,完成事件的处理,并且保证不丢失事件的事件处理系统,都可以认为是“实时系统”。John Lee 20:56:28 时间轮转调度,虽然事件处理的任务,可能被分成了多个时间片执行。
8、John Lee 20:57:05 但系统中总的任务数量是确定的,设为 N,那么该任务的事件处理最大实际时间,就是:独占执行的时间*N。John Lee 20:57:39 John Lee 21:00:08 实际上,系统并不总是所有的事件都同时发生和处理,那些没有事件可处理的任务,应该处于阻塞状态等待事件。John Lee 21:01:51 全部任务都同时处理,只是极限情况,是系统的最大负载情况。John Lee 21:01:59 你可以认为,对于单独的事件处理任务,该系统的 CPU 速度被降低了 N 倍。John Lee 21:03:27 如果你能保证 CPU 的速度被降低了 N 倍后,事件
9、的处理依然不会越过其截止期,那么该系统的实时性,就可以保证。John Lee 21:05:02 不知大家是否看出来了,这个时间轮转的调度,与“前后台”系统,有点差不多了。John Lee 21:06:41 不知 snoopyzz 老师是否在?点评一下。John Lee 21:07:07 前后台系统,我属于菜鸟。小道(569198569)21:07:31 John Lee 21:08:10 当然,事情有不利的一面,就会存在有利的一面:你获得了不依赖于任务优先级的并行性,没有其它调度算法所存在的任务“饥饿”现象,宏观上相当于 N 个 CPU 核心。John Lee 21:09:34 4.5 对象
10、John Lee 21:09:54 John Lee 21:11:17 对象这个概念,在 RTOS 中,我认为显得比较含糊,实际的应用中,一般都会指定对象的性质,如:任务对象,同步对象等等。John Lee 21:12:29 而这些具体概念好像没什么共性,如果硬要加以抽象成更高层的“对象”概念,好像并不适当,而且在实际应用中,好像也没有什么用处。John Lee 21:12:54 一家之言,一家之言。诗诺比 21:14:10 刚来一会,前后台中用状态机或者包装成 PT 那样,也只能是实现协作式多任务,而时间片轮转 和 协作式 还是有明显区别的,协作式必须主动放弃 CPU 占用,时间片是到了点强
11、制切换的。John Lee 21:14:56 John Lee 21:17:20 这个也没啥好说的,就是为 RTOS 中的功能部件、模块等,安上了一个比较术语化的名字,如果要说这是一个更高层的抽象概念,我也是不很认同的。John Lee 21:19:12 我们不是讲如何设计 RTOS,这些内容大家看看就行了,没啥好说的。雁塔菜农 21:20:16 出题,通知抢楼,谢谢!二把刀(117829819)21:20:51 我刚来的不知道咋回事呢 21ic-dirtwillfly(157340886)21:20:52 福建凡善(56445165)21:20:59 我也来。21ic-dirtwillfly
12、(157340886)21:20:59 快到抢楼时间了 HILL 21:21:03 准备 雁塔菜农 21:21:07 老师休息到 9:30 继续 John Lee 21:21:39 课间提问:除了基于优先权抢占的调度和时间轮转调度外,还有一种调度算法:协作式,使用这种调度算法的系统,算不算 RTOS?为什么?惊涛骇浪(578645627)21:22:46 算,只要能在事件截止期之前,完成事件的处理,并且保证不丢失事件的事件处理系统,都可以认为是“实时系统”。爱河(834436962)21:23:04 不算 二把刀(117829819)21:23:23 这不是老是刚才说的吗 爱河(8344369
13、62)21:23:28 属于前后台式 Allen(15330302)21:23:29 实时系统不一定是 OS 吧 Allen(15330302)21:23:35 属于前后台 HILL 21:23:49 算 动态级别的 RTOS John Lee 21:24:28 算或不算,都有说出信服的理由。John Lee 21:24:32 都要 21ic-dirtwillfly(157340886)21:24:38 算,RTOS 的概念和调度算法没关系 惊涛骇浪(578645627)21:25:00 算,只要满足实时性就可以称为实时系统 爱河(834436962)21:25:03 RTOS 是主动调节任务
14、 诗诺比 21:25:27 协作式并不一定是前后台,也并不一定是 RTOS,但 RTOS 是可以用协作式内核来调度,实现优化级,但其实时性的保证,一定程度上需要用户维护 小道(569198569)21:25:16 不算吧?刚才史诺比老师说了,协作式主动放弃 CPU 使用权,但 RTOS 是强制吧 爱河(834436962)21:25:22 前后台不是主动调节的 小道(569198569)21:26:13 John Lee 21:26:44 有的同学,算是挨一点边。雁塔菜农 21:26:53 答对题的网友将 21ic 网名告诉老师和我 Allen(15330302)21:27:00 每个任务在O
15、S的管理下,当OS是透明的,可以认为自己是唯一的任务.而协作式,其他的任务不是透明的,本任务如果不放弃的情况下,其他的任务就活活饿死了 John Lee 21:27:16 Allen!21ic-dirtwillfly(157340886)21:27:16 诗诺比老师说的对 丶砖家(1361439207)21:27:42 YES 小道(569198569)21:28:03 到底谁对?小道(569198569)21:28:12 lee 老师,给出结果吧 雁塔菜农 21:28:13 记住只要 21ic 网名,个人资料有 qq 号 雁塔菜农 21:28:45 答不对,奖励作废 二把刀(11782981
16、9)21:29:13 有啥奖励 爱河(834436962)21:29:13 老师已经给结果了 雁塔菜农 21:29:25 25 元 雁塔菜农 21:29:43 25.0 元 惊涛骇浪(578645627)21:29:44 大叔,抢楼 HILL 21:29:44 老师 公布答案吧 小道(569198569)21:29:45 allen?小道(569198569)21:29:52 25.00 元 爱河(834436962)21:29:58 是 二把刀(117829819)21:30:12 CNY?这么爽啊 Allen(15330302)21:30:10 是我?小道(569198569)21:30:
17、13 你还想要美刀啊?Allen(15330302)21:30:15 给李老师吧 雁塔菜农 21:30:25 抢楼早过了,9:25 HILL 21:30:37 惊涛骇浪(578645627)21:30:48 我抢到了 HILL 21:30:52 诗诺比 21:31:22 大家要努力学习呀,lee 老师辛苦讲课一晚上也只是 25RMB 雁塔菜农 21:31:28 有的同学,算是挨一点边。雁塔菜农 21:31:37 不及格?John Lee 21:31:38 修正一下 allen 的说法,“饿死”是比较通俗的,实际的结果,是事件得不到处理而越过截止期。HILL 21:31:40 老师 公布答案啊
18、John Lee 21:32:44 记住,“实时性”都是针对事件“截止期”而言的。HILL 21:32:56 没懂 小道(569198569)21:33:12 Allen(15330302)21:33:26 就像在 windows 系统下,每个应用程序都可以使用 4GB 小道(569198569)21:35:55 啊哦 HILL 21:36:04 老师 没懂 能否详细解释下?惊涛骇浪(578645627)21:36:29 怎么今天没人抢楼呀 小道(569198569)21:36:50 lee 老师说得很通俗易懂了 Allen(15330302)21:36:53 十步杀一人,千里不留行 事了拂衣
19、去,深藏身与名。HILL 21:36:55 到底几点啊 惊涛骇浪(578645627)21:37:10 9:25 惊涛骇浪(578645627)21:37:13 抢楼 HILL 21:37:23 晕 忘了 ederdan(2356773939)21:37:44 你不是抢到了嘛 二把刀(117829819)21:38:06 怎么抢楼啊,我刚来的,不知道 雪狼(982332664)21:37:50 惊涛骇浪(578645627)21:37:56 呵呵 雪狼(982332664)21:37:55 恭喜恭喜 惊涛骇浪(578645627)21:38:04 大叔还没发话 HILL 21:38:04 ed
20、erdan(2356773939)21:38:09 今晚笔记交给你了 小道(569198569)21:38:10 谁抢到了?雁塔菜农 21:38:15 谁抢到楼了?惊涛骇浪(578645627)21:38:19 雁塔菜农 21:38:44 天意吧 惊涛骇浪(578645627)21:38:51 惊涛骇浪 小道(569198569)21:38:51 雁塔菜农 21:38:54 上次问俺要 John Lee 21:40:17 协作式,操作系统(姑且这么叫)是不会主动切换任务的,必须任务自己调用导致阻塞的系统调用,进入阻塞,或调用放弃执行的系统调用。惊涛骇浪(578645627)21:41:43 状
21、态机式,直到条件满足了才会执行下面的 John Lee 21:42:24 如果某个任务一直执行,那么当另外的事件产生时,对应的事件处理任务却一直得不到执行,导致事件越过了截止期。惊涛骇浪(578645627)21:42:37 嗯 诗诺比 21:43:13 我之前特意没作正面回答,只是针对小道(569198569)提到我而提点下。其实单一使用协作式内核的 RTOS 已经不能称做是 RTOS 了。但可以同时配合时间片轮转使用实现 RT.John Lee 21:46:08 5.1 引言 引言中的内容,我们在以前的群课中,都有相关的讨论。Allen(15330302)21:47:10 哪本书?就是大叔
22、推荐的那本操作系统的书么?雁塔菜农 21:47:19 请 Allen(15330302)给出 21ic 网名(个人资料有 QQ 号)Allen(15330302)21:47:55 菜农大叔,给李老师吧 我的 21ic 网民是 xukaiming John Lee 21:48:25 任务是什么?我好像没有看到一个简单明了的解释,我也想不出一个满意的解释,谁知道的可以告诉我一下?小道(569198569)21:48:40 task 小道(569198569)21:48:44 惊涛骇浪(578645627)21:49:05 一个 while 循环 wei(34103820)21:49:07 一个事件
23、的产生导致引起的事件处理程序 惊涛骇浪(578645627)21:49:12 死循环 John Lee 21:49:27 从表面上看,任务就是一个函数,用于处理事件。小道(569198569)21:49:37 wei(34103820)21:49:07 一个事件的产生导致引起的事件处理程序 wei(34103820)21:50:21 小道姑,老师都没说俺答对了,你又来笑话俺了 Allen(15330302)21:50:26 这个概念太过于抽象了 小道(569198569)21:50:59 纪律 诗诺比 21:51:49 我个人感觉:任务可大可小,可微观可宏观 小到一个事件处理,大到一个进程。看
24、你怎么定义了。John Lee 21:51:41 任务这个概念,从不同的角度和抽象层面上看,会有不同的含义和解释。wei(34103820)21:52:11 俺是从微观方向出发的 John Lee 21:52:56 wei 的这个解释:一个事件的产生导致引起的事件处理程序。从某个角度看,是合理的。John Lee 21:53:55 任务,但光有处理的函数还不行,RTOS 需要为其配备专门的栈(stack),以存放上下文。John Lee 21:55:09 还要一个对应的所谓“控制块”TCB,来管理这个任务。wei(34103820)21:55:58 诗诺比 21:57:51 学校布置一个迎接
25、XX 领导的任务,老师准备公开课,布置大扫除,做班会动员,都算是分化出的任务,而针对老师布置的扫除任务,同学分组,扫地,擦窗,整理,拖地,又细分化成各种小任务,所以任务这个词本身就是不定的。在程序中,只有线程和进程是相对比较明确的概念,任务应该算是比较抽象的概念 John Lee 21:59:08 这个所谓的“初始化或启动任务”,大家用到过吗?John Lee 22:00:13 我记得以前有人问起这个。我记得以前有人问起这个。那么大家怀疑过这个“任务”存在的必要性吗?John Lee 22:01:53 No fsa_ok(24037645)22:02:01 没初始化,其他任务怎么能开始?哦 惊
26、涛骇浪(578645627)22:02:45 嗯 对 初始化可以再一开始就执行一遍就完事了 后面不用了 John Lee 22:03:38 或者说,一个“专门”用于初始化的任务,是没有存在的意义。fsa_ok(24037645)22:04:37 这个任务写起来,感觉规范 John Lee 22:05:05 初始化,有很多地方可以执行,硬件的初始化,可以在系统初始化之前。任务的初始化,可以在系统初始化后,进入调度之前;或者在某个事件处理任务的循环之前。fsa_ok(24037645)22:05:33 嗯 John Lee 22:07:01 int main()hardware_init();OS
27、_init();CreateTask(.);CreateTask(.);CreateTask(.);OS_run();在 OS_run()之前,至少要初始化一个任务。在 OS_run()之前,至少要初始化一个任务。然后呢?John Lee 22:09:12 其它的任务,也可以在这里(OS_run 之前)初始化,或者:void Task1()CreateTask(.);CreateTask(.);CreateTask(.);while(1)等待并处理事件。卧虎藏龙/yue(565394267)22:09:44 谁有 18B20 fpga 程序给我一个 fsa_ok(24037645)22:09:
28、48 哦 小道(569198569)22:09:53 卧虎藏龙/yue(565394267)22:09:58 我要成功的谢谢 诗诺比 22:10:11 lee 老师,这里所说的任务,在 RTOS 中其实是指线程吧?wei(34103820)22:10:17 进程?诗诺比 22:10:37 线程,不是进程 John Lee 22:10:27 是的,ERTOS。诗诺比 22:10:55 线程=thread 进程=process John Lee 22:11:12 说到进程,应该是带存储保护的吧。空间隔离。诗诺比 22:11:53 嗯进程间的地址空间是无法直接相互访问的 一般得有 MMU 支持吧。J
29、ohn Lee 22:13:07 而且,进程应该是可以“装载”到存储空间执行,不需要时,可以结束进程,释放其空间。就这个角度来看,好像“进程”不太适合嵌入式系统。(34103820)22:14:32 进程可以 fork 创建,在这里的线程是否跟进程一样的?可否详解下 诗诺比 22:14:43 嗯,任务在 windows 中的概念,反而是更高的,比如任务管理器 John Lee 22:15:19 windwos 的“任务”,应该带有一定特殊属性的进程。wei(34103820)22:15:38 进程可以等待信号,暂停,和被杀死,线程是否也具有这些可操作性?John Lee 22:16:08 线程
30、,是相对于进程而言的。诗诺比 22:16:28 进程和线程有本质区别的,进程中的数据再怎么错乱,运行崩溃,不会对其它进程造成影响 而同一进程下的不同线程,使用的是相同的地址空间 做为一般的嵌入式 RTOS 而言,都是单进程的 wei(34103820)22:17:15 有点概念 了,一直对线程不了解 John Lee 22:17:20 以前的 UNIX 系统,没有线程的概念,如果要强加线程的概念,可以认为其是只有单线程的进程。诗诺比 22:19:00 线程当然也可以等待信号,暂停,和被杀死,不过线程被杀死可能无法正确释放资源。John Lee 22:18:48 线程是执行单位,而进程,是资源管理单位。诗诺比 22:19:50 进程被杀掉则不存在这个问题,资源会全部释放。John Lee 22:20:10 正是因为这些区别,线程的切换,就比进程的切换快得多。诗诺比 22:20:48 嗯 John Lee 22:20:53 好了,今天先到这里,小孩要睡了。诗诺比 22:19:00 线程当然也可以等待信号,暂停,和被杀死,不过线程被杀死可能无法正确释放资源。史兄,如何正确释放线程资源?