• 基于嵌入式OS的任务设计-----任务划分


    在《前后台系统VS嵌入式OS,何时该上OS?》一文中介绍了何时应该将OS应用于嵌入式设计中,本文将介绍基于OS的任务设计,一般来说,应用程序设计包括两个方面,一个是业务逻辑的设计,另一个是业务逻辑的调度设计(这个由OS来完成)。有了OS,我们现在可以把更多的精力转到业务逻辑的设计上,前面讲了,业务逻辑只是电影的剧本,剧本要动起来,还的交由播放器播放(OS调度),所以在设计业务逻辑的同时,必须要考虑业务逻辑的调度,这就是我们今天要讲的任务设计。任务设计包括任务的划分;任务的优先级按排;任务的函数结构设计;任务之间的同步设计。

    1任务的划分

    任务的划分好坏直接关系到系统的设计的成败,往往好的任务划分,能够使设计更简单,任务多了,资源开销多,增加了任务之间的同步及频繁切换的开销,任务少了,可以减少共享资源的数量,降低了任务之间切换及同步的开销,不利于业务逻辑的并发调用。

    (1)设备依赖性任务的划分

    我们知道,并发性是任务的基本特性,而控制输入/输出设备的程序具有先天的并发性,把它们分别封装为不同的任务是合理的,这样,就可以划分出第一批任务,如键盘任务,显示任务、数据采集任务,控制任务和通信任务。

    (2)关键任务的划分

    所谓关键任务就是该任务不能遗漏,即使一次遗漏也不可以,这类任务往往交由中断处理程序来处理,若不能交给中断处理,则应给该任务安排最高优先级,保证其能得到及时调度,由于其优先级最高,为了不影响其他任务的调度,因此这类任务应尽量简短快速,若这类任务执行时间长,应将任务的处理交由优先级较低的任务去处理,该任务仅保存关键任务的通知信息(这些信息往往通过队列方式保存,只要保证消费能力大于生产能力就ok了)。

    (3)数据处理任务的划分

    这类任务往往需要消耗CPU过多时间,而对实时性要求不高,只需要数据的生产能力小于数据的消费能力就行了,它们的优先级必须安排的比较低,只使用其它任务剩余的机时来进行数据处理。

    (4)触发条件相同的任务的划分

    如果若干功能由相同的事件触发,则可以将这些功能组合为一个任务,从而免除将事件发给多个任务的工作量。

    (5)运行周期相同任务的划分

    将周期相同的功能组合在一起封装为一个任务,就可以避免一个时间事件触发几个任务,省去事件分发操作和他们之间的通信。

    (6)顺序操作任务的划分

    如果若干功能按固定顺序进行流水作业,相互之间完全没有并发性,则应该将这些功能组合为一个任务。这样一来也可以减少任务之间的同步过程。

    (7)功能聚合任务的划分

    将关系密切的若干功能组合成为一个任务,达到功能聚合的效果。这样也会减少任务之间的同步过程。

    最后,若按照上述步骤,还存在多过任务之间需要同步的情况,可以试着将这些任务合并,但前提是不影响系统性能的情况下。总而言之,任务的划分首先要满足系统的性能,其次,就要使设计简单,再就是尽可能降低任务之间的同步过程,能不用同步尽量不用。



  • 相关阅读:
    实战,利用apache来做集群,实现负载均衡
    Paas
    mysql memcache
    JSP简单练习-定时刷新页面
    协定须要双工,可是绑定“WSHttpBinding”不支持它或者因配置不对而无法支持它
    ACM:图的BFS,走迷宫
    appium框架之bootstrap
    [JSP]JSP中include指令和include动作的差别
    cocos2d-x-3.1 win32程序-初识源代码(coco2d-x 学习笔记二)
    AT&T汇编语言——简单实例及工具演示
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3231050.html
Copyright © 2020-2023  润新知