免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5849 | 回复: 10
打印 上一主题 下一主题

一个多任务调度问题,请教大家! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-17 21:49 |只看该作者 |倒序浏览
一个多任务系统,从用户的角度看,能够实现3个任务(进程)并发运行。但是此时整个系统肯定不只这3个进程,内核中应该有其他的一些进程在运行。设计该系统时,是从只调度这3个进程的角度来考虑的,那么当杂入其他的内核进程时,是不是这3+N个进程一同参与调度?会不会对调度产生意外影响?比如,实时性的影响、任务处理时间的变化等等。有影响的话,如何在设计之初就排除这种影响呢?

论坛徽章:
0
2 [报告]
发表于 2008-09-17 21:58 |只看该作者
LZ说的不是很清楚,能再具体点吗?

论坛徽章:
0
3 [报告]
发表于 2008-09-17 22:57 |只看该作者
原帖由 yourbabyface 于 2008-9-17 21:49 发表
一个多任务系统,从用户的角度看,能够实现3个任务(进程)并发运行。但是此时整个系统肯定不只这3个进程,内核中应该有其他的一些进程在运行。设计该系统时,是从只调度这3个进程的角度来考虑的,那么当杂入其 ...


是不可能做到的。
多用户,多任务的系统,如何能从技术手段上保证你的程序在运行时候,别人不能用?
只能从管理上加以限制。“从技术上保证”这个想法本身就是不对的

论坛徽章:
0
4 [报告]
发表于 2008-09-17 23:03 |只看该作者
你是想自己写调度程序?

论坛徽章:
3
天蝎座
日期:2014-10-25 13:44:312015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:48:31
5 [报告]
发表于 2008-09-17 23:04 |只看该作者
自己做平台吧(战略性的东西,投入可能比较大哦),

平台是操作系统的一个任务,3个进程分别是平台下的“任务”,即二级调度,

这样,至少,3个进程之间你可以控制住。

论坛徽章:
0
6 [报告]
发表于 2008-09-18 00:05 |只看该作者
要是在多任务情况下,有这么一个程序
while(1)
{
    do sth;
    usleep(1000);
}
本意是每1ms执行一次do sth,但是照各位所言的话,抛开精度因素不计,是不是根本就没办法做到1ms执行一次呢。
平时所说的sleep系列的函数精度不够是不是恰恰因为调度所造成的呢...

[ 本帖最后由 yourbabyface 于 2008-9-18 00:09 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2008-09-18 00:25 |只看该作者
负载大的时候, 几分钟都有可能

论坛徽章:
0
8 [报告]
发表于 2008-09-18 09:04 |只看该作者
原帖由 yourbabyface 于 2008-9-17 21:49 发表
一个多任务系统,从用户的角度看,能够实现3个任务(进程)并发运行。但是此时整个系统肯定不只这3个进程,内核中应该有其他的一些进程在运行。设计该系统时,是从只调度这3个进程的角度来考虑的,那么当杂入其他的内核进程时,是不是这3+N个进程一同参与调度?会不会对调度产生意外影响?比如,实时性的影响、任务处理时间的变化等等。有影响的话,如何在设计之初就排除这种影响呢?


按照你的说法,首先,你的多任务系统肯定是跑在某个OS之上的,不管是RTOS的还是非RTOS的。所以你只需要关心你自己的那的3个任务,采用何种调度方式(优先级还是时间片还是其他),由OS决定你不用关心,你需要关心的是你所用到的OS,他的调度策略是什么,然后你按照他的调度策略去创建你的任务就可以了。

另外,OS当然会有他自己的任务也在跑,同时OS的调度程序也会去调度执行他,OS的任务和你自己的任务之间当然会有一定的联系,但是正常情况下,不会对你自己的任务产生异常的影响,前提是,你是按照OS的要求生成的任务,比如优先级,还有其他的一些参数。

还有,目前书上介绍的,任务和进程不是一个概念,任务和线程是一个概念,这个要区分清楚。

论坛徽章:
0
9 [报告]
发表于 2008-09-18 12:36 |只看该作者
原帖由 yourbabyface 于 2008-9-18 00:05 发表
要是在多任务情况下,有这么一个程序
while(1)
{
    do sth;
    usleep(1000);
}
本意是每1ms执行一次do sth,但是照各位所言的话,抛开精度因素不计,是不是根本就没办法做到1ms执行一次呢。
平时所说 ...


LZ 是要调度运行周期任务吗?
如果是,那么有以下模型可以借鉴参考:
  对于周期性的任务Pn,执行的时间是tn,周期是Tn,那么对于各个任务,只要满足如下条件:
        (t1/T1)+(t2/T2)+(t3/T3)+...+(tn/Tn)<=n((2^(1/n))-1) , 则各个任务可以周期性的被调度(只能是大体上,因为实际情况会更复杂).

论坛徽章:
0
10 [报告]
发表于 2008-09-19 09:57 |只看该作者
谢谢楼上各位,明白一些了
还有一个问题。我不只一次在网上看到linux的“调度周期”这一说法,大意好像是时钟为10ms的情况下,调度周期最低也得大概50、60毫秒,不明白这话是什么意思,是说一个任务的连续两次运行的时间间隔最短60ms?我觉得一个任务只要设置好了完全可以一个时钟周期执行一次啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP