aCoral的调度机制

发布于 2022-09-10 22:48:57 字数 1904 浏览 13 评论 0

本帖最后由 sjj0412 于 2010-11-28 11:03 编辑

aCoral中将线程的操作接口都称为线程调度.
  为了适应实时及多核应用,aCoral将调度分为两层,上层为策略,下层为机制。
  何谓调度策略,何谓调度机制?
  调度策略,就是线程的cpu,prio这些值如何定,线程是fifo,还是分时,还有对某些线程要特殊化处理,然后根据这些操作初始化线程,一种策略就对应一种线程。
  调度机制,就是如何从就绪队列上选择线程,如何挂起线程,如何恢复线程,如何延时线程,如何杀死线程。
   结构图如下:
  

2.jpg (42.67 KB, 下载次数: 6)

下载附件

2010-11-06 13:35 上传


3.4.2 调度策略
前面提到过一种策略对应一种线程,调度策略可以很方便的注册,也就是说线程的种类可以很容易扩展。
3.4.2.1 策略分类
aCoral目前实现了四种策略,对应四种线程。
(1) 普通线程(普通策略创建的线程)
这种线程,需要人为指定cpu,优先级信息,通过acoral_create_thread创建。其实这个acoral_create_thread还是通过comm_policy机制来初始化线程的。
(2) 分时线程(分时策略创建的线程)
      aCoral支持相同优先级的线程,对于相同的优先级线程,默认采用fifo的方式调度,因此当用户需要线程以分时的方式和其他线程共享cpu资源时,可以将该线程设置为分时线程,即使用分时策略创建线程,这种分时有两个值得注意的
a)只存在相同优先级线程的分时,不同优先级线程之间不存在所谓的分时,它们还是按谁优先级抢占策略。
b)必须是两厢情愿的,比如a,b线程优先级相同,a使用分时策略创建,b是普通策略创建的,则也达不到分时的效果,因为a分时后,它执行指定时间片后会将cpu叫给b,但由于b没有采用分时,它不会主动放弃cpu.就像单追恋,即使你付出再多,你追求的人也不一定会为你付出一点,她只会一直消耗你的付出,没有尽头。
(3)周期性线程(周期性策略创建的线程)
        这种线程需要每隔一段时间就要执行的线程,这种需求比较常见,比如信号采集,有一个采样周期,每隔多长时间就要采集一路信号。
(4)RM线程(RM策略创建的线程)
RM是一种可以满足任务截止时间的强实时调度算法,aCoral也有限制的实现了此算法,在aCoral称为rm策略,这种策略需要周期性策略支持。
(5)POSIX线程(POSIX策略创建的线程)
          Posix线程属于非实时线程,这类线程的主要特点是越公平越好。aCoral中的posix有两个出发点,一个是实现最大公平,二是实现和posix标准接轨.当然目前只支持部分posix线程特性。为了实现最大公平,采用了这种线程又多了一个自己的调度算法-----电梯调度算法。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文