【第6章】进程调度【三】

     紧接着上次的任务,我们在各进程的执行体加入一个打印当前的系统的ticks的数值,再在调度程序中加入打印当前的进程的ticks值:

Code:
  1. void Proc_A()   
  2. {   
  3.     while(1)   
  4.     {   
  5.         Disp_Color_Str("A",0xc);   
  6.         Disp_Int(Get_Ticks());   
  7.         Milli_Delay(200);   
  8.     }   
  9. }   
  10.   
  11. void Proc_B()   
  12. {   
  13.     while(1)   
  14.     {   
  15.         Disp_Color_Str("B",0xd);   
  16.         Disp_Int(Get_Ticks());   
  17.         Milli_Delay(200);   
  18.     }   
  19. }   
  20.   
  21. void Proc_C()   
  22. {   
  23.     while(1)   
  24.     {   
  25.         Disp_Color_Str("C",0xe);   
  26.         Disp_Int(Get_Ticks());   
  27.         Milli_Delay(200);   
  28.     }   
  29. }  
Code:
  1. if(p_PCB->ticks > greatest_ticks)   
  2. {   
  3.     Disp_Color_Str("<",0xa);
        Disp_Int(p_PCB->ticks);
        Disp_Color_Str(">",0xa);  
  4.     greatest_ticks = p_PCB->ticks;   
  5.     p_Resume_PCB = p_PCB;   
  6. }  

     同时注释掉把各进程的ticks值恢复到回来的priortiy值,以免让各进程无休止的运行下去。

     编译链接,运行,结果如图所示:

     下面我们就来分析,第一阶段因为进程A的ticks值最高,所以它得以优先运行,其它两个进程无法运行,直到进程A的ticks值比进程B的ticks值低时,控制权才回到进程B手中,这时就进入第二阶段,进程A与进程B轮流执行,进程C仍无法得到控制权,这一情况持续到进程A与进程B的ticks值都比进程C小时,进程C终于得到了控制权,这就进入第三阶段,进程A与进程B与进程C都有机会执行,直到这3个进程的ticks值都小于等于0。

     下面就是书上的分析表格:

     运行结果图的ABC3个字符的比为:11:7:4,跟书上的11:6:4接近,这个值与分析的理论的字符比11.5:6.5:4.5接近。但这与看上去的5:1.67:1相去甚远,虽然定性都一样,但定量不太一样。为了达到一致,修改一个地方就搞定了:

Code:
  1. if(Is_Reenter != 0)   
  2. {   
  3.     Disp_Color_Str("!",0xe);   
  4.     return;        
  5. }   
  6.   
  7. if(p_Resume_PCB->tickds > 0)   
  8. {   
  9.     return;   
  10. }  

     如果进程的ticks值大于0,则直接return,这也就意味着要继续霸占CPU。等到进程A的ticks消耗完之后,才轮到下一个ticks值最大的进程获得CPU。

     为了得到更精确的结果,我们把各进程的延迟时间改为10ms,把进程A,B,C的priority字段分别改为15,5,3。再把打印语句注释掉。

     编译链接,运行,结果如图所示:

     来统计一下,结果如图:

     怎么样,几乎一模一样吧。

     哈哈,就这样结束了第6章,虽然说有不少东西需要我们消化,但起码对我来说算蛮快的了,我的目标是在这学期末搞定上半部分,看来是要提前完成任务了。这样也好,因为还有英语6级和期末考试,2个课程设计需要应付,计算机网络还几乎没看过。争取早点把上半部分仅存的第7章搞定,哦也。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值