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

[复制链接]
7521|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页
原野之狼 发表于 2011-6-9 19:53 | 显示全部楼层
是这么个思想
但是你的伪代码并没有把这种思想表现出来
 楼主| hdp7891000 发表于 2011-6-10 08:20 | 显示全部楼层
4# 程序匠人
多谢匠人前辈,我还想请教一下:如果您裸奔的话会采用什么样的调度思想呢?
 楼主| hdp7891000 发表于 2011-6-10 08:20 | 显示全部楼层
5# 原野之狼
狼前辈能不能说的详细一点?
原野之狼 发表于 2011-6-10 08:45 | 显示全部楼层
5# 原野之狼
狼前辈能不能说的详细一点?
hdp7891000 发表于 2011-6-10 08:20

每执行完一个任务就根据优先级调度一次 你的伪代码里设置的那几个flag办不到这个事啊
 楼主| 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;
       }
        。。。。。。
}
 楼主| hdp7891000 发表于 2011-6-10 14:03 | 显示全部楼层
8# 原野之狼 或者能不能指教下您的做法?不胜感激:lol
原野之狼 发表于 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  任务间通讯
 楼主| hdp7891000 发表于 2011-6-14 08:29 | 显示全部楼层
11# 原野之狼 大体上明白了,我还有极长的路要走,多谢前辈
hotpower 发表于 2011-6-14 10:28 | 显示全部楼层
这些问题可以请教lee老师。
他在qq群12407788里。
johnwjl 发表于 2011-6-14 10:30 | 显示全部楼层
建议LZ看看操作系统的原理。
hotpower 发表于 2011-6-14 10:36 | 显示全部楼层
hotpower 发表于 2011-6-14 10:38 | 显示全部楼层
13楼写错了,是12047788
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

322

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部