打印

求指教:最简单的优先级调度算法。这个版块应该最适合吧

[复制链接]
6063|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hdp7891000|  楼主 | 2011-6-9 14:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人菜鸟一枚,现在写程序只能是前后台系统。原来的程序是这样的
main()
{
    while(1)
    {
         if(flag1)
        {
        }

        if(flag2)
        {
        }

        if(flag3)
        {
         }
         ......
         ......
}
interrupt()
{
}

现在突发奇想想出了一种最简单粗陋的基于优先级的算法
main()
{
    while(1)
    {
         if(flag1)//最高优先级
        {
        }

        else if(flag2)
        {
        }

        else if(flag3)
        {
         }
         ......
         ......
}
interrupt()
{
}


请大侠指教点评这种想法的科学度和有用性,大家有这样类似用过么?
另外大家如果裸奔的话的调度算法一般是如何的?

相关帖子

沙发
hdp7891000|  楼主 | 2011-6-9 18:16 | 只看该作者
没人顶啊?求大侠

使用特权

评论回复
板凳
hdp7891000|  楼主 | 2011-6-9 18:16 | 只看该作者

使用特权

评论回复
地板
程序匠人| | 2011-6-9 18:33 | 只看该作者
第一种叫顺序调度机制
优点:保证所有模块都有执行的机会
缺点:重要模块无法得到及时响应,因为它再急也要排队

第二种叫优先调度机制
优点:排在前面的优先级高,可以获得更多更及时的执行机会
缺点:排在后面的可能会被堵塞

详见《匠人手记》第43页

使用特权

评论回复
5
原野之狼| | 2011-6-9 19:53 | 只看该作者
是这么个思想
但是你的伪代码并没有把这种思想表现出来

使用特权

评论回复
6
hdp7891000|  楼主 | 2011-6-10 08:20 | 只看该作者
4# 程序匠人
多谢匠人前辈,我还想请教一下:如果您裸奔的话会采用什么样的调度思想呢?

使用特权

评论回复
7
hdp7891000|  楼主 | 2011-6-10 08:20 | 只看该作者
5# 原野之狼
狼前辈能不能说的详细一点?

使用特权

评论回复
8
原野之狼| | 2011-6-10 08:45 | 只看该作者
5# 原野之狼
狼前辈能不能说的详细一点?
hdp7891000 发表于 2011-6-10 08:20

每执行完一个任务就根据优先级调度一次 你的伪代码里设置的那几个flag办不到这个事啊

使用特权

评论回复
9
hdp7891000|  楼主 | 2011-6-10 13:58 | 只看该作者
8# 原野之狼
还是不大明白,if。。。else if。。。else if。。。else结构不就是执行完了一个分支
再回到第一个if判断么?是我写的不够严谨?还是流程上有误?您看这样呢?
main()
{
    while(1)
    {
         if(flag1)//最高优先级
        {

              flag1=FALSE;
              process1();
        }

        else if(flag2)
        {

              flag2=FALSE;
              process2();
        }

        else if(flag3)
        {

              flag3=FALSE;
              process3();
         }
         ......
         ......
}
interrupt()
{

      if(condition1)
       {
              flag1=TRUE;
       }
        。。。。。。
}

使用特权

评论回复
10
hdp7891000|  楼主 | 2011-6-10 14:03 | 只看该作者
8# 原野之狼 或者能不能指教下您的做法?不胜感激:lol

使用特权

评论回复
11
原野之狼| | 2011-6-10 16:03 | 只看该作者
8# 原野之狼
还是不大明白,if。。。else if。。。else if。。。else结构不就是执行完了一个分支
再回到第一个if判断么?是我写的不够严谨?还是流程上有误?您看这样呢?
main()
{
    while(1)
    {
       ...
hdp7891000 发表于 2011-6-10 13:58

这下我明白你的意思了
你的程序片段里只赋予了静态的优先级  和传统的编写方式相比 改进不大

考虑几个问题:
1  应用代码和管理代码分离。
2  优先级调整
3  任务间通讯

使用特权

评论回复
12
hdp7891000|  楼主 | 2011-6-14 08:29 | 只看该作者
11# 原野之狼 大体上明白了,我还有极长的路要走,多谢前辈

使用特权

评论回复
13
hotpower| | 2011-6-14 10:28 | 只看该作者
这些问题可以请教lee老师。
他在qq群12407788里。

使用特权

评论回复
14
johnwjl| | 2011-6-14 10:30 | 只看该作者
建议LZ看看操作系统的原理。

使用特权

评论回复
15
hotpower| | 2011-6-14 10:36 | 只看该作者
园地正在做活动,学习rtos
https://bbs.21ic.com/icview-239287-1-1.html

使用特权

评论回复
16
hotpower| | 2011-6-14 10:38 | 只看该作者
13楼写错了,是12047788

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

322

帖子

4

粉丝