关于任务结构体中utime和stime的探讨

    最近翻看linux较早版本的内核,在定时器处理函数do_timer()【linux/kernel/sched.c】中有这么一段代码觉得想不透彻:

    

    if (cpl)

        current->utime++;  

    else

        current->stime++;

 其中不解之处就是对cpl的理解。网上普遍的理解是cpl=0为内核态,否则>0表示用户态。但是定时器中断处理函数都是在内核态进行的,赵炯博士的树上是这么解释的,0表示超级任务,即内核态任务,linux的idle任务和任务1即是此类任务,该任务与其他任务的区别就是其代码段和数据段都是在640K的内核区域之内的,>0表示普通任务。至于我的理解,认为“赵博”的的解释更加合理,因为如按第一种解释,对于任何一个执行do_timer的任务(实际上这是由定时器中断产生的),执行这段代码,都是处于内核态的,用户态的时候根本不会跑到这里。

     姑且这么认为吧,希望疑问能够早日得到解决!

posted @ 2011-12-18 14:50  Orig  阅读(1460)  评论(0编辑  收藏  举报