系统时间:(jiffies 系统滴答)
CPU内部有一个RTC,会在上电的时候调用mktime函数算出从1970年1月1日开始到当前开机点所过的秒数,给MKTIME函数传来的时间结构体的赋值是由初始化时从RTC(cmos)中读出的参数,转化为时间存入全局变量中,并且会为JIFFIES所用。
JIFFIES是一个系统的时钟滴答,一个系统滴答是10ms。
1.10ms一个系统滴答——>每隔10ms会引发一个定时器中断
(中断服务函数中,首先进行了jiffies的自加time_interrupt)
call_do_timer
2.调用do_timer函数
if (cpl)//CPL变量是内核中用来指示被中断程序的特权(0表示内核进程、1表示被中断的是用户进程)
current->utime++;//utime用户程序的运行时间
else
current->stime++;//stime内核程序的运行时间
3.next_timer 是嫁接与jiffies变量的所有定时器的时间链表
4.current->counter——>进程的时间片
5.task_struck 一个进程 task_struct[ ]进程向量表
6.counter->在哪里用:进程的调度就是task_struct[ ]进程链表的检索,找时间片最大的那个进程对象(task_struck),然后进行调用,直到时间片为0,退出。之后再进行新一轮的调用。
7.counter->在哪里被设置:当全部的 task_struct[ ](task[ ])所有的进程的counter都为0,就进行新一轮的时间片分配。
8.优先级分配 (*p)->counter = ((*p)->counter >> 1) + (*p)->priority;
9.优先级时间片轮转调度算法